1dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie/****************************************************************************** 2dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * 3dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * Copyright (C) 2009-2013 Broadcom Corporation 4dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * 5dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * Licensed under the Apache License, Version 2.0 (the "License"); 6dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * you may not use this file except in compliance with the License. 7dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * You may obtain a copy of the License at: 8dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * 9dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * http://www.apache.org/licenses/LICENSE-2.0 10dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * 11dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * Unless required by applicable law or agreed to in writing, software 12dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * distributed under the License is distributed on an "AS IS" BASIS, 13dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * See the License for the specific language governing permissions and 15dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * limitations under the License. 16dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie * 17dbba0e652e0ce23dd691df3c03979ec6e32c8db3Matthew Xie ******************************************************************************/ 18ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 19ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_api.h" 20ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 21ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include <stdlib.h> 22c7503db23f91676b2df732becb9579d5ccdcc7a7Ian Coolidge#include <string.h> 23258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 24ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#include "bta_gatts_co.h" 255cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "btif_util.h" 26d7ffd64accbd50a27289a388856e56244ccbb5daMyles Watson#include "osi/include/osi.h" 27ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 28ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/***************************************************************************** 296bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Local type definitions 306bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/ 31ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 32ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE 50 33ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsontypedef struct { 356bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bool enable; 366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t num_clients; 376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson tBTA_GATTS_SRV_CHG srv_chg[BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE]; 38ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} __attribute__((packed)) btif_gatts_srv_chg_cb_t; 39ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 40ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/***************************************************************************** 416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Static variables 426bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/ 43ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 44ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Battastatic btif_gatts_srv_chg_cb_t btif_gatts_srv_chg_cb; 45ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 46ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/***************************************************************************** 476bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Static functions 486bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/ 49ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 506bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonstatic void btif_gatts_check_init(void) { 516bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb; 52ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 536bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (!p_cb->enable) { 546bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson memset(p_cb, 0, sizeof(btif_gatts_srv_chg_cb_t)); 556bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_cb->enable = true; 566bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 57ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 58ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 59ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/***************************************************************************** 606bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Externally called functions 616bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/ 626bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 636bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watsonvoid btif_gatts_add_bonded_dev_from_nv(BD_ADDR bda) { 646bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_gatts_srv_chg_cb_t* p_cb = &btif_gatts_srv_chg_cb; 656bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bool found = false; 666bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson uint8_t i; 676bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 686bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson btif_gatts_check_init(); 696bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson 706bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson for (i = 0; i != p_cb->num_clients; ++i) { 716bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (!memcmp(p_cb->srv_chg[i].bda, bda, sizeof(BD_ADDR))) { 726bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson found = true; 736bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson break; 74ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 756bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 76ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 776bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (!found) { 786bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson if (p_cb->num_clients < BTIF_GATTS_MAX_SRV_CHG_CLT_SIZE) { 796bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson bdcpy(p_cb->srv_chg[p_cb->num_clients].bda, bda); 806bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_cb->srv_chg[p_cb->num_clients].srv_changed = false; 816bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson p_cb->num_clients++; 82ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta } 836bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson } 84ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 85ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 86ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/***************************************************************************** 876bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Call-out functions 886bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ****************************************************************************/ 89ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 90ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 916bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 926bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function bta_gatts_co_update_handle_range 936bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 946bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description This callout function is executed by GATTS when a GATT 95f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson * server handle range ios to be added or removed. 966bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 976bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameter is_add: true is to add a handle range; otherwise is to 98f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson * delete. 996bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * p_hndl_range: handle range. 1006bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1016bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns void. 1026bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1036bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/ 1049008888d24407541aa383aa4bd363a40abbf954bMyles Watsonvoid bta_gatts_co_update_handle_range( 1059008888d24407541aa383aa4bd363a40abbf954bMyles Watson UNUSED_ATTR bool is_add, UNUSED_ATTR tBTA_GATTS_HNDL_RANGE* p_hndl_range) {} 106ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 107ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1086bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1096bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function bta_gatts_co_srv_chg 1106bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1116bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description This call-out is to read/write/remove service change related 1126bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * informaiton. The request consists of the cmd and p_req and 113f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson * the response is returned in p_rsp 1146bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1156bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameter cmd - request command 1166bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * p_req - request paramters 1176bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * p_rsp - response data for the request 1186bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1196bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns true - if the request is processed successfully and 1206bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * the response is returned in p_rsp. 1216bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * false - if the request can not be processed 1226bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1236bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/ 124d35a648d39710bbc5ac59f8add85166455af5af7Myles Watsonbool bta_gatts_co_srv_chg(UNUSED_ATTR tBTA_GATTS_SRV_CHG_CMD cmd, 1259008888d24407541aa383aa4bd363a40abbf954bMyles Watson UNUSED_ATTR tBTA_GATTS_SRV_CHG_REQ* p_req, 1269008888d24407541aa383aa4bd363a40abbf954bMyles Watson UNUSED_ATTR tBTA_GATTS_SRV_CHG_RSP* p_rsp) { 1276bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return false; 128ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 129ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 130ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 1316bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1326bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Function bta_gatts_co_load_handle_range 1336bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1346bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Description This callout function is executed by GATTS when a GATT 135f45481678af0694902b5200ba69ced4cb61d73f0Myles Watson * server handle range is requested to be loaded from NV. 1366bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1376bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Parameter 1386bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1396bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * Returns void. 1406bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson * 1416bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson ******************************************************************************/ 1429008888d24407541aa383aa4bd363a40abbf954bMyles Watsonbool bta_gatts_co_load_handle_range( 1439008888d24407541aa383aa4bd363a40abbf954bMyles Watson UNUSED_ATTR uint8_t index, 1449008888d24407541aa383aa4bd363a40abbf954bMyles Watson UNUSED_ATTR tBTA_GATTS_HNDL_RANGE* p_handle_range) { 1456bd442f543972b072ef2cbbcf2f7c91202de1045Myles Watson return false; 146ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 147