bta_gattc_api.cc revision a484a888196ddf8bcbf1ad3226d6451bc735a94b
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 6331a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&bta_gattc_disable)); 64cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_deregister(BTA_ID_GATTC); 65ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 66ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 67221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowskistatic void create_random_uuid(tBT_UUID* uuid) { 68221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski uuid->len = LEN_UUID_128; 69221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski 70221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski for (int i = 0; i < 16; ++i) { 71221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski uuid->uu.uuid128[i] = (uint8_t)(rand() % 256); 72221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski } 73221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski} 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 75221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski/** 76221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * This function is called to register application callbacks with BTA GATTC 77221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * module. |client_cb| pointer to the application callback function. 78221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * |cb| one time callback when registration is finished 79221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski */ 80221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowskivoid BTA_GATTC_AppRegister(tBTA_GATTC_CBACK* p_client_cb, 81221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski BtaAppRegisterCallback cb) { 82cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (bta_sys_is_register(BTA_ID_GATTC) == false) 83cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg); 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 85221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski // base::Owned will own and free app_uuid 86221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski tBT_UUID* uuid = new tBT_UUID; 87221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski create_random_uuid(uuid); 88221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&bta_gattc_register, base::Owned(uuid), 89221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski p_client_cb, std::move(cb))); 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 9231a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowskistatic void app_deregister_impl(tBTA_GATTC_IF client_if) { 9331a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski bta_gattc_deregister(bta_gattc_cl_get_regcb(client_if)); 9431a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski} 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) { 10831a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&app_deregister_impl, client_if)); 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Open 1148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Open a direct connection or add a background auto connection 1168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bd address 1178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if: server interface. 1198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda: remote device BD address. 1208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_direct: direct connection or background auto connection 121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * transport: Transport to be used for GATT connection 1221baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * (BREDR/LE) 12396fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski * initiating_phys: LE PHY to use, optional 12416bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski * opportunistic: wether the connection shall be opportunistic, 12516bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski * and don't impact the disconnection timer 1268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 128a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, const RawAddress& remote_bda, 129c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski bool is_direct, tBTA_GATT_TRANSPORT transport, 130c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski bool opportunistic) { 13196fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski uint8_t phy = controller_get_interface()->get_le_all_initiating_phys(); 13247474c3e584806e0b49b27e1e5330c1e6646cfb9Jakub Pawlowski BTA_GATTC_Open(client_if, remote_bda, is_direct, transport, opportunistic, 13347474c3e584806e0b49b27e1e5330c1e6646cfb9Jakub Pawlowski phy); 13496fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski} 13596fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski 136a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_GATTC_Open(tBTA_GATTC_IF client_if, const RawAddress& remote_bda, 137c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski bool is_direct, tBTA_GATT_TRANSPORT transport, 138c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski bool opportunistic, uint8_t initiating_phys) { 139cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_OPEN* p_buf = 140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_OPEN*)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); 141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT; 143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->client_if = client_if; 144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_direct = is_direct; 145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->transport = transport; 14696fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski p_buf->initiating_phys = initiating_phys; 14716bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski p_buf->opportunistic = opportunistic; 148c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_buf->remote_bda = remote_bda; 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 ******************************************************************************/ 168a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, const RawAddress& remote_bda, 169a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski 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; 176c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_buf->remote_bda = remote_bda; 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 25845aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowskivoid BTA_GATTC_DiscoverServiceByUuid(uint16_t conn_id, tBT_UUID* p_srvc_uuid) { 25945aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski tGATT_DISC_PARAM* param = new tGATT_DISC_PARAM; 26045aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski param->s_handle = 0x0001; 26145aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski param->e_handle = 0xFFFF; 26245aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski param->service = *p_srvc_uuid; 26345aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski do_in_bta_thread(FROM_HERE, 26445aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski base::Bind(base::IgnoreResult(&GATTC_Discover), conn_id, 26545aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski GATT_DISC_SRVC_BY_UUID, base::Owned(param))); 26645aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski} 26745aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2698af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetServices 2718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 272cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the services on the given 2731baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * server. 2748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID which identify the server. 2768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns list_t of tBTA_GATTC_SERVICE or NULL. 2788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 280e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenconst list_t* BTA_GATTC_GetServices(uint16_t conn_id) { 281cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_services(conn_id); 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetCharacteristic 2878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 288cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the characteristic on the 2891baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * given server. 2908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID which identify the server. 2928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteristic handle 2938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL. 2958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 297cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonconst tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, 298cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 299cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_characteristic(conn_id, handle); 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetDescriptor 3058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 306cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the characteristic on the 3071baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * given server. 3088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID which identify the server. 3108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor handle 3118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL. 3138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3148af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 315cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonconst tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, 316cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 317cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_descriptor(conn_id, handle); 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetGattDb 3238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to get the GATT database. 3258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID which identify the server. 327cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * db: output parameter which will contain the GATT database 3281baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * copy. Caller is responsible for freeing it. 3298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * count: number of elements in database. 3308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 332cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, 333cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t end_handle, btgatt_db_element_t** db, 334cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson int* count) { 335cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count); 336533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski} 337533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 338533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski/******************************************************************************* 3398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadCharacteristic 3418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read a characteristics value 3438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 3458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteritic handle to read. 3468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 3488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 350cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, 351cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 352cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_READ_OP_CB callback, void* cb_data) { 353cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ* p_buf = 354cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 355cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 356cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 357cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 358cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 359cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb = callback; 361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb_data = cb_data; 362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3667dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski/** 3677dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski * This function is called to read a value of characteristic with uuid equal to 3687dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski * |uuid| 3697dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski */ 3707dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowskivoid BTA_GATTC_ReadUsingCharUuid(uint16_t conn_id, tBT_UUID uuid, 3717dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski uint16_t s_handle, uint16_t e_handle, 3727dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski tBTA_GATT_AUTH_REQ auth_req, 3737dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski GATT_READ_OP_CB callback, void* cb_data) { 3747dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski tBTA_GATTC_API_READ* p_buf = 3757dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 3767dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3777dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 3787dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->hdr.layer_specific = conn_id; 3797dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->auth_req = auth_req; 3807dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->handle = 0; 3817dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->uuid = uuid; 3827dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->s_handle = s_handle; 3837dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->e_handle = e_handle; 3847dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->read_cb = callback; 3857dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->read_cb_data = cb_data; 3867dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3877dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski bta_sys_sendmsg(p_buf); 3887dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski} 3897dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadCharDescr 3938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read a descriptor value. 3958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 3978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor handle to read. 3988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 402cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, 403cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 404cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_READ_OP_CB callback, void* cb_data) { 405cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ* p_buf = 406cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 407cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 408cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 409cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 410cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 411cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 412cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb = callback; 413cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb_data = cb_data; 414cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 415cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 417717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadMultiple 4218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read multiple characteristic or 4238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * characteristic descriptors. 4248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connectino ID. 4268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_read_multi - pointer to the read multiple parameter. 4278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 431cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI* p_read_multi, 432cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req) { 433cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ_MULTI* p_buf = 434cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ_MULTI*)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI)); 435717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 436cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT; 437cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 438cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 439cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->num_attr = p_read_multi->num_attr; 440717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 441cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_buf->num_attr > 0) 442cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->handles, p_read_multi->handles, 443cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(uint16_t) * p_read_multi->num_attr); 4445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 446717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov} 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_WriteCharValue 4518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to write characteristic value. 4538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 4558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteristic handle to write. 4568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * write_type - type of write. 4578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 4588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 462cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_WriteCharValue(uint16_t conn_id, uint16_t handle, 463cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_WRITE_TYPE write_type, 464cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 465cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 466cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 467cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 468cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 469cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 470cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 471cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 472cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 473cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 474cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = write_type; 475cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 476cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 477cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 478cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 479cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() > 0) { 480cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 481cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 482cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 483cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 484cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 486717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_WriteCharDescr 4908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to write descriptor value. 4928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID 4948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor hadle to write. 4958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 4968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 500cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_WriteCharDescr(uint16_t conn_id, uint16_t handle, 501cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 502cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 503cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 504cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 505cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 506cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 507cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 508cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 509cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 510cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 511cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = BTA_GATTC_TYPE_WRITE; 512cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 513cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 514cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 515cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() != 0) { 516cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 517cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 518cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 519cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 5205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 521cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 523717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_PrepareWrite 5278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 528cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to prepare write a characteristic 5291baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * value. 5308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_char_id - GATT characteritic ID of the service. 5338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * offset - offset of the write value. 5348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 5358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 539cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_PrepareWrite(uint16_t conn_id, uint16_t handle, uint16_t offset, 540cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 541cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_AUTH_REQ auth_req, 542cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 543cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 544cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 545cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 546cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 547cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 548cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 549cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 550cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 551cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 552cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 553cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = BTA_GATTC_WRITE_PREPARE; 554cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->offset = offset; 555cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 556cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 557cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() > 0) { 558cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 559cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 560cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 561cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 562cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 564717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ExecuteWrite 5688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 569cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to execute write a prepare write 5701baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * sequence. 5718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_execute - execute or cancel. 5748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 578cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ExecuteWrite(uint16_t conn_id, bool is_execute) { 579cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_EXEC* p_buf = 580cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_EXEC*)osi_calloc(sizeof(tBTA_GATTC_API_EXEC)); 5815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 582cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT; 583cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 584cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_execute = is_execute; 5855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 586cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 588717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_SendIndConfirm 5928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to send handle value confirmation. 5948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_char_id - characteristic ID to confirm. 5978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 601cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_SendIndConfirm(uint16_t conn_id, uint16_t handle) { 602cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CONFIRM* p_buf = 603cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_CONFIRM*)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM)); 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 605cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_API("%s conn_id=%d handle=0x%04x", __func__, conn_id, handle); 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 607cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT; 608cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 609cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 611cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6158af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6168af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_RegisterForNotifications 6178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 618cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to register for notification of a 6191baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * service. 6208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface. 6228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bda - target GATT server. 6238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - GATT characteristic handle. 6248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns OK if registration succeed, otherwise failed. 6268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 628cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications(tBTA_GATTC_IF client_if, 629a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& bda, 630cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 631cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg; 632cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATT_STATUS status = BTA_GATT_ILLEGAL_PARAMETER; 633cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t i; 634cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 635cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!handle) { 636cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("deregistration failed, handle is 0"); 637cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 638cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 639cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 640f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_clreg = bta_gattc_cl_get_regcb(client_if); 641f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_clreg != NULL) { 642cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 643cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg->notif_reg[i].in_use && 644c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_clreg->notif_reg[i].remote_bda == bda && 645cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle == handle) { 646cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_WARNING("notification already registered"); 647cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_GATT_OK; 648cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 649cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 651cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (status != BTA_GATT_OK) { 652cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 653cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_clreg->notif_reg[i].in_use) { 654cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset((void*)&p_clreg->notif_reg[i], 0, 655cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_NOTIF_REG)); 656cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 657cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].in_use = true; 658c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_clreg->notif_reg[i].remote_bda = bda; 659cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 660cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle = handle; 661cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_GATT_OK; 662cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 664cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 665cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (i == BTA_GATTC_NOTIF_REG_MAX) { 666cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson status = BTA_GATT_NO_RESOURCES; 667cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Max Notification Reached, registration failed."); 668cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 670cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 671cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("Client_if: %d Not Registered", client_if); 672cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 674cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_DeregisterForNotifications 6808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 681cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to de-register for notification of a 6821baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * service. 6838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface. 6858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda - target GATT server. 6868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - GATT characteristic handle. 6878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns OK if deregistration succeed, otherwise failed. 6898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 691cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications(tBTA_GATTC_IF client_if, 692a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& bda, 693cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 694cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!handle) { 695cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson APPL_TRACE_ERROR("%s: deregistration failed, handle is 0", __func__); 696cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_ILLEGAL_PARAMETER; 697cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 698cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 699cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(client_if); 700cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg == NULL) { 701c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski LOG(ERROR) << __func__ << " client_if: " << +client_if 702c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski << " not registered bd_addr:" << bda; 703cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_ILLEGAL_PARAMETER; 704cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 705cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 706cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 707cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg->notif_reg[i].in_use && 708c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_clreg->notif_reg[i].remote_bda == bda && 709cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle == handle) { 710c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski VLOG(1) << __func__ << " deregistered bd_addr:" << bda; 711cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); 712cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_OK; 7135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 714cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 7155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 716c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski LOG(ERROR) << __func__ << " registration not found bd_addr:" << bda; 717cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return BTA_GATT_ERROR; 7185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 720ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 7218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Refresh 7238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Refresh the server cache of the remote device 7258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters remote_bda: remote device BD address. 7278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 7298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 731a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_GATTC_Refresh(const RawAddress& remote_bda) { 732d7ee6f2e85a1a8837b0b1e2e8ba1c72b53650cd8Jakub Pawlowski do_in_bta_thread(FROM_HERE, 733d7ee6f2e85a1a8837b0b1e2e8ba1c72b53650cd8Jakub Pawlowski base::Bind(&bta_gattc_process_api_refresh, remote_bda)); 734ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 735