bta_gattc_api.cc revision 7dd34f52bc950bae2fb1b30b17da0ff34ee016aa
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2010-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This is the implementation of the API for GATT module of BTA. 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include <string.h> 28f355ef5a4d7fb667fc57a0dfb60f738d870e252eMyles Watson 29221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski#include <base/bind.h> 30221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski#include <base/bind_helpers.h> 31f355ef5a4d7fb667fc57a0dfb60f738d870e252eMyles Watson#include <base/callback.h> 32258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 33221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski#include "bta_closure_api.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatt_api.h" 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gattc_int.h" 36cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h" 3796fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski#include "device/include/controller.h" 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Constants 418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 43cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic const tBTA_SYS_REG bta_gattc_reg = {bta_gattc_hdl_event, 44cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_Disable}; 45e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Disable 498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to disable GATTC module 518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters None. 538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 57cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_Disable(void) { 58cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_sys_is_register(BTA_ID_GATTC) == false) { 59cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("GATTC Module not enabled/already disabled"); 60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 62e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 63cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 64cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->event = BTA_GATTC_API_DISABLE_EVT; 65717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 66cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 67cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_deregister(BTA_ID_GATTC); 68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 69ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 70221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowskistatic void create_random_uuid(tBT_UUID* uuid) { 71221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski uuid->len = LEN_UUID_128; 72221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski 73221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski for (int i = 0; i < 16; ++i) { 74221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski uuid->uu.uuid128[i] = (uint8_t)(rand() % 256); 75221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski } 76221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski} 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 78221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski/** 79221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * This function is called to register application callbacks with BTA GATTC 80221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * module. |client_cb| pointer to the application callback function. 81221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * |cb| one time callback when registration is finished 82221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski */ 83221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowskivoid BTA_GATTC_AppRegister(tBTA_GATTC_CBACK* p_client_cb, 84221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski BtaAppRegisterCallback cb) { 85cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_sys_is_register(BTA_ID_GATTC) == false) 86cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg); 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 88221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski // base::Owned will own and free app_uuid 89221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski tBT_UUID* uuid = new tBT_UUID; 90221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski create_random_uuid(uuid); 91221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&bta_gattc_register, base::Owned(uuid), 92221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski p_client_cb, std::move(cb))); 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_AppDeregister 988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to deregister an application 1008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * from BTA GATTC module. 1018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface identifier. 1038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 1058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 107cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_AppDeregister(tBTA_GATTC_IF client_if) { 108cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_DEREG* p_buf = 109cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_DEREG*)osi_malloc(sizeof(tBTA_GATTC_API_DEREG)); 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_DEREG_EVT; 112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->client_if = client_if; 113717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 114cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Open 1208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Open a direct connection or add a background auto connection 1228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bd address 1238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if: server interface. 1258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda: remote device BD address. 1268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_direct: direct connection or background auto connection 127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * transport: Transport to be used for GATT connection 1281baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * (BREDR/LE) 12996fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski * initiating_phys: LE PHY to use, optional 1308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 132cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_direct, 133cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_TRANSPORT transport) { 13496fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski uint8_t phy = controller_get_interface()->get_le_all_initiating_phys(); 13596fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski BTA_GATTC_Open(client_if, remote_bda, is_direct, transport, phy); 13696fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski} 13796fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski 13896fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowskivoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, bool is_direct, 13996fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski tBTA_GATT_TRANSPORT transport, uint8_t initiating_phys) { 140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_OPEN* p_buf = 141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_OPEN*)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); 142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT; 144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->client_if = client_if; 145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_direct = is_direct; 146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->transport = transport; 14796fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski p_buf->initiating_phys = initiating_phys; 148cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); 149cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 150cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_CancelOpen 1568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 157cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description Cancel a direct open connection or remove a background auto 1581baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * connection 1598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bd address 1608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if: server interface. 1628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda: remote device BD address. 1638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_direct: direct connection or background auto connection 1648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, 169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool is_direct) { 170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CANCEL_OPEN* p_buf = (tBTA_GATTC_API_CANCEL_OPEN*)osi_malloc( 171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_CANCEL_OPEN)); 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT; 174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->client_if = client_if; 175cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_direct = is_direct; 176cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Close 1848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Close a connection to a GATT server. 1868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connectino ID to be closed. 1888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 192cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_Close(uint16_t conn_id) { 193cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->event = BTA_GATTC_API_CLOSE_EVT; 196cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->layer_specific = conn_id; 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 198cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 200717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ConfigureMTU 2048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Configure the MTU size in the GATT channel. This can be done 2068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * only once per connection. 2078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID. 2098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * mtu: desired MTU size to use. 2108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 214cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ConfigureMTU(uint16_t conn_id, uint16_t mtu) { 215cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CFG_MTU* p_buf = 216cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_CFG_MTU*)osi_malloc(sizeof(tBTA_GATTC_API_CFG_MTU)); 2179426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 218cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT; 219cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 220cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->mtu = mtu; 2219426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 222cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 2239426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach} 224717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 2259426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach/******************************************************************************* 2268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ServiceSearchRequest 2288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to request a GATT service discovery 2301baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * on a GATT server. This function report service search 2311baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * result by a callback event, and followed by a service search 2321baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * complete event. 2338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID. 235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * p_srvc_uuid: a UUID of the service application is interested 2361baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * in. 2378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * If Null, discover for all services. 2388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 2408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 242cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ServiceSearchRequest(uint16_t conn_id, tBT_UUID* p_srvc_uuid) { 243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson const size_t len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(tBT_UUID); 244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_SEARCH* p_buf = (tBTA_GATTC_API_SEARCH*)osi_calloc(len); 245cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 246cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT; 247cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 248cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_srvc_uuid) { 249cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_srvc_uuid = (tBT_UUID*)(p_buf + 1); 250cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_srvc_uuid, p_srvc_uuid, sizeof(tBT_UUID)); 251cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 252cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_srvc_uuid = NULL; 253cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 254cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 255cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 256717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov} 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetServices 2618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 262cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the services on the given 2631baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * server. 2648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID which identify the server. 2668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns list_t of tBTA_GATTC_SERVICE or NULL. 2688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 270e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenconst list_t* BTA_GATTC_GetServices(uint16_t conn_id) { 271cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_services(conn_id); 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetCharacteristic 2778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 278cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the characteristic on the 2791baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * given server. 2808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID which identify the server. 2828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteristic handle 2838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL. 2858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 287cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonconst tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, 288cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 289cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_characteristic(conn_id, handle); 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetDescriptor 2958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 296cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the characteristic on the 2971baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * given server. 2988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID which identify the server. 3008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor handle 3018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL. 3038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 305cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonconst tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, 306cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 307cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_descriptor(conn_id, handle); 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetGattDb 3138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to get the GATT database. 3158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID which identify the server. 317cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * db: output parameter which will contain the GATT database 3181baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * copy. Caller is responsible for freeing it. 3198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * count: number of elements in database. 3208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 322cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, 323cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t end_handle, btgatt_db_element_t** db, 324cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson int* count) { 325cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count); 326533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski} 327533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 328533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski/******************************************************************************* 3298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadCharacteristic 3318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read a characteristics value 3338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 3358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteritic handle to read. 3368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 3388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, 341cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 342cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_READ_OP_CB callback, void* cb_data) { 343cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ* p_buf = 344cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 345cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 346cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 347cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 348cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 349cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 350cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb = callback; 351cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb_data = cb_data; 352cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 353cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3567dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski/** 3577dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski * This function is called to read a value of characteristic with uuid equal to 3587dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski * |uuid| 3597dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski */ 3607dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowskivoid BTA_GATTC_ReadUsingCharUuid(uint16_t conn_id, tBT_UUID uuid, 3617dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski uint16_t s_handle, uint16_t e_handle, 3627dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski tBTA_GATT_AUTH_REQ auth_req, 3637dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski GATT_READ_OP_CB callback, void* cb_data) { 3647dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski tBTA_GATTC_API_READ* p_buf = 3657dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 3667dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3677dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 3687dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->hdr.layer_specific = conn_id; 3697dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->auth_req = auth_req; 3707dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->handle = 0; 3717dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->uuid = uuid; 3727dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->s_handle = s_handle; 3737dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->e_handle = e_handle; 3747dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->read_cb = callback; 3757dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->read_cb_data = cb_data; 3767dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3777dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski bta_sys_sendmsg(p_buf); 3787dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski} 3797dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadCharDescr 3838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read a descriptor value. 3858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 3878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor handle to read. 3888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 3908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 392cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, 393cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 394cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_READ_OP_CB callback, void* cb_data) { 395cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ* p_buf = 396cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 397cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 398cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 399cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 400cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 401cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 402cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb = callback; 403cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb_data = cb_data; 404cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 405cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 407717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadMultiple 4118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read multiple characteristic or 4138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * characteristic descriptors. 4148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connectino ID. 4168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_read_multi - pointer to the read multiple parameter. 4178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 421cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI* p_read_multi, 422cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req) { 423cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ_MULTI* p_buf = 424cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ_MULTI*)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI)); 425717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 426cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT; 427cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 428cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 429cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->num_attr = p_read_multi->num_attr; 430717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 431cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_buf->num_attr > 0) 432cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->handles, p_read_multi->handles, 433cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(uint16_t) * p_read_multi->num_attr); 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 435cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 436717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov} 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_WriteCharValue 4418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to write characteristic value. 4438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 4458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteristic handle to write. 4468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * write_type - type of write. 4478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 4488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 452cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_WriteCharValue(uint16_t conn_id, uint16_t handle, 453cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_WRITE_TYPE write_type, 454cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 455cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 456cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 457cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 458cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 459cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 460cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 461cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 462cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 463cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 464cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = write_type; 465cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 466cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 467cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 468cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 469cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() > 0) { 470cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 471cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 472cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 473cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 474cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 476717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 4775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_WriteCharDescr 4808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to write descriptor value. 4828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID 4848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor hadle to write. 4858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 4868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 490cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_WriteCharDescr(uint16_t conn_id, uint16_t handle, 491cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 492cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 493cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 494cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 495cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 496cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 497cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 498cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 499cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 500cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 501cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = BTA_GATTC_TYPE_WRITE; 502cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 503cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 504cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 505cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() != 0) { 506cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 507cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 508cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 509cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 511cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 513717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_PrepareWrite 5178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 518cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to prepare write a characteristic 5191baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * value. 5208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_char_id - GATT characteritic ID of the service. 5238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * offset - offset of the write value. 5248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 5258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 529cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_PrepareWrite(uint16_t conn_id, uint16_t handle, uint16_t offset, 530cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 531cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 532cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 533cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 534cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 535cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 536cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 537cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 538cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 539cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 540cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 541cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 542cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 543cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = BTA_GATTC_WRITE_PREPARE; 544cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->offset = offset; 545cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 546cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 547cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() > 0) { 548cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 549cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 550cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 551cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 552cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 554717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ExecuteWrite 5588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 559cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to execute write a prepare write 5601baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * sequence. 5618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_execute - execute or cancel. 5648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 568cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ExecuteWrite(uint16_t conn_id, bool is_execute) { 569cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_EXEC* p_buf = 570cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_EXEC*)osi_calloc(sizeof(tBTA_GATTC_API_EXEC)); 5715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 572cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT; 573cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 574cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_execute = is_execute; 5755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 576cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 578717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_SendIndConfirm 5828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to send handle value confirmation. 5848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_char_id - characteristic ID to confirm. 5878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 591cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_SendIndConfirm(uint16_t conn_id, uint16_t handle) { 592cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CONFIRM* p_buf = 593cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_CONFIRM*)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM)); 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 595cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_API("%s conn_id=%d handle=0x%04x", __func__, conn_id, handle); 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 597cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT; 598cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 599cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 601cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_RegisterForNotifications 6078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 608cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to register for notification of a 6091baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * service. 6108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface. 6128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bda - target GATT server. 6138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - GATT characteristic handle. 6148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns OK if registration succeed, otherwise failed. 6168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 618cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications(tBTA_GATTC_IF client_if, 619cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson const BD_ADDR bda, 620cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 621cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg; 622cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER; 623cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t i; 624cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 625cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!handle) { 626cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("deregistration failed, handle is 0"); 627cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 628cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 629cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 630f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_clreg = bta_gattc_cl_get_regcb(client_if); 631f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_clreg != NULL) { 632cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 633cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg->notif_reg[i].in_use && 634cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) && 635cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle == handle) { 636cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("notification already registered"); 637cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_GATT_OK; 638cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 639cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 641cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status != BTA_GATT_OK) { 642cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 643cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_clreg->notif_reg[i].in_use) { 644cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset((void*)&p_clreg->notif_reg[i], 0, 645cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_NOTIF_REG)); 646cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 647cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].in_use = true; 648cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN); 649cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 650cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle = handle; 651cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_GATT_OK; 652cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 654cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 655cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (i == BTA_GATTC_NOTIF_REG_MAX) { 656cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_GATT_NO_RESOURCES; 657cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Max Notification Reached, registration failed."); 658cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 660cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 661cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Client_if: %d Not Registered", client_if); 662cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 664cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_DeregisterForNotifications 6708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 671cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to de-register for notification of a 6721baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * service. 6738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface. 6758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda - target GATT server. 6768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - GATT characteristic handle. 6778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns OK if deregistration succeed, otherwise failed. 6798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 681cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications(tBTA_GATTC_IF client_if, 682cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson const BD_ADDR bda, 683cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 684cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!handle) { 685cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("%s: deregistration failed, handle is 0", __func__); 686cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_ILLEGAL_PARAMETER; 687cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 688cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 689cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(client_if); 690cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg == NULL) { 691cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR( 692cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "%s client_if: %d not registered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", 693cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson __func__, client_if, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); 694cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_ILLEGAL_PARAMETER; 695cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 696cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 697cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 698cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg->notif_reg[i].in_use && 699cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson !memcmp(p_clreg->notif_reg[i].remote_bda, bda, BD_ADDR_LEN) && 700cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle == handle) { 701cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_DEBUG("%s deregistered bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", 702cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson __func__, bda[0], bda[1], bda[2], bda[3], bda[4], 703cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bda[5]); 704cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); 705cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_OK; 7065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 707cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 7085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 709cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR( 710cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson "%s registration not found bd_addr:%02x:%02x:%02x:%02x:%02x:%02x", 711cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson __func__, bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); 712cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_ERROR; 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 715ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 7168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Refresh 7188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Refresh the server cache of the remote device 7208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters remote_bda: remote device BD address. 7228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 7248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 726cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_Refresh(const BD_ADDR remote_bda) { 727cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_OPEN* p_buf = 728cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_OPEN*)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); 729ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 730cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_REFRESH_EVT; 731cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->remote_bda, remote_bda, BD_ADDR_LEN); 732ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 733cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 735