15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski * Copyright 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 39819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowskiusing bluetooth::Uuid; 40819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Constants 438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 45cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonstatic const tBTA_SYS_REG bta_gattc_reg = {bta_gattc_hdl_event, 46cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_Disable}; 47e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Disable 518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to disable GATTC module 538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters None. 558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 59cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_Disable(void) { 60b749ebde2c6a55569e4e480abda3a4ee3afe2d72Myles Watson if (!bta_sys_is_register(BTA_ID_GATTC)) { 612647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(WARNING) << "GATTC Module not enabled/already disabled"; 62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return; 63cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 64e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 6531a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&bta_gattc_disable)); 66cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_deregister(BTA_ID_GATTC); 67ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 68ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 69221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski/** 70221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * This function is called to register application callbacks with BTA GATTC 71221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * module. |client_cb| pointer to the application callback function. 72221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski * |cb| one time callback when registration is finished 73221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski */ 74221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowskivoid BTA_GATTC_AppRegister(tBTA_GATTC_CBACK* p_client_cb, 75221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski BtaAppRegisterCallback cb) { 76b749ebde2c6a55569e4e480abda3a4ee3afe2d72Myles Watson if (!bta_sys_is_register(BTA_ID_GATTC)) 77cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_register(BTA_ID_GATTC, &bta_gattc_reg); 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 79819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&bta_gattc_register, Uuid::GetRandom(), 80221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski p_client_cb, std::move(cb))); 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 83e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskistatic void app_deregister_impl(tGATT_IF client_if) { 8431a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski bta_gattc_deregister(bta_gattc_cl_get_regcb(client_if)); 8531a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski} 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_AppDeregister 898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to deregister an application 918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * from BTA GATTC module. 928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface identifier. 948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 98e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskivoid BTA_GATTC_AppDeregister(tGATT_IF client_if) { 9931a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski do_in_bta_thread(FROM_HERE, base::Bind(&app_deregister_impl, client_if)); 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Open 1058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Open a direct connection or add a background auto connection 1078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bd address 1088af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1098af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if: server interface. 1108af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda: remote device BD address. 1118af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_direct: direct connection or background auto connection 112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * transport: Transport to be used for GATT connection 1131baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * (BREDR/LE) 11496fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski * initiating_phys: LE PHY to use, optional 11516bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski * opportunistic: wether the connection shall be opportunistic, 11616bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski * and don't impact the disconnection timer 1178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 119e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskivoid BTA_GATTC_Open(tGATT_IF client_if, const RawAddress& remote_bda, 12050ba9031b4551b013fe5f77c8648c85a257365c5Jakub Pawlowski bool is_direct, tGATT_TRANSPORT transport, 121c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski bool opportunistic) { 12296fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski uint8_t phy = controller_get_interface()->get_le_all_initiating_phys(); 12347474c3e584806e0b49b27e1e5330c1e6646cfb9Jakub Pawlowski BTA_GATTC_Open(client_if, remote_bda, is_direct, transport, opportunistic, 12447474c3e584806e0b49b27e1e5330c1e6646cfb9Jakub Pawlowski phy); 12596fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski} 12696fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski 127e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskivoid BTA_GATTC_Open(tGATT_IF client_if, const RawAddress& remote_bda, 12850ba9031b4551b013fe5f77c8648c85a257365c5Jakub Pawlowski bool is_direct, tGATT_TRANSPORT transport, 129c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski bool opportunistic, uint8_t initiating_phys) { 130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_OPEN* p_buf = 131cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_OPEN*)osi_malloc(sizeof(tBTA_GATTC_API_OPEN)); 132cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 133cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_OPEN_EVT; 134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->client_if = client_if; 135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_direct = is_direct; 136cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->transport = transport; 13796fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski p_buf->initiating_phys = initiating_phys; 13816bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski p_buf->opportunistic = opportunistic; 139c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_buf->remote_bda = remote_bda; 140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_CancelOpen 1478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 148cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description Cancel a direct open connection or remove a background auto 1491baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * connection 1508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bd address 1518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if: server interface. 1538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda: remote device BD address. 1548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_direct: direct connection or background auto connection 1558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 159e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskivoid BTA_GATTC_CancelOpen(tGATT_IF client_if, const RawAddress& remote_bda, 160a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski bool is_direct) { 161cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CANCEL_OPEN* p_buf = (tBTA_GATTC_API_CANCEL_OPEN*)osi_malloc( 162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_CANCEL_OPEN)); 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 164cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CANCEL_OPEN_EVT; 165cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->client_if = client_if; 166cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_direct = is_direct; 167c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_buf->remote_bda = remote_bda; 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1748af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Close 1758af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Close a connection to a GATT server. 1778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connectino ID to be closed. 1798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 1818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_Close(uint16_t conn_id) { 184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR* p_buf = (BT_HDR*)osi_malloc(sizeof(BT_HDR)); 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 186cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->event = BTA_GATTC_API_CLOSE_EVT; 187cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->layer_specific = conn_id; 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 189cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 191717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ConfigureMTU 1958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Configure the MTU size in the GATT channel. This can be done 1978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * only once per connection. 1988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 1998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID. 2008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * mtu: desired MTU size to use. 2018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 2038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 205cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ConfigureMTU(uint16_t conn_id, uint16_t mtu) { 206cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CFG_MTU* p_buf = 207cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_CFG_MTU*)osi_malloc(sizeof(tBTA_GATTC_API_CFG_MTU)); 2089426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 209cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT; 210cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 211cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->mtu = mtu; 2129426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach 213cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 2149426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach} 215717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 2169426d530e9bbc5d3ffae55515388d49185c61325Andre Eisenbach/******************************************************************************* 2178af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2188af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ServiceSearchRequest 2198af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2208af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to request a GATT service discovery 2211baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * on a GATT server. This function report service search 2221baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * result by a callback event, and followed by a service search 2231baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * complete event. 2248af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID. 226cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * p_srvc_uuid: a UUID of the service application is interested 2271baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * in. 2288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * If Null, discover for all services. 2298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 2318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 233819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowskivoid BTA_GATTC_ServiceSearchRequest(uint16_t conn_id, Uuid* p_srvc_uuid) { 234819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski const size_t len = sizeof(tBTA_GATTC_API_SEARCH) + sizeof(Uuid); 235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_SEARCH* p_buf = (tBTA_GATTC_API_SEARCH*)osi_calloc(len); 236cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_SEARCH_EVT; 238cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 239cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_srvc_uuid) { 240819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski p_buf->p_srvc_uuid = (Uuid*)(p_buf + 1); 241819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski *p_buf->p_srvc_uuid = *p_srvc_uuid; 242cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_srvc_uuid = NULL; 244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 245cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 246cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 247717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov} 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 249819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowskivoid BTA_GATTC_DiscoverServiceByUuid(uint16_t conn_id, 250819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski const Uuid& p_srvc_uuid) { 25145aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski tGATT_DISC_PARAM* param = new tGATT_DISC_PARAM; 25245aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski param->s_handle = 0x0001; 25345aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski param->e_handle = 0xFFFF; 254819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski param->service = p_srvc_uuid; 25545aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski do_in_bta_thread(FROM_HERE, 25645aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski base::Bind(base::IgnoreResult(&GATTC_Discover), conn_id, 25745aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski GATT_DISC_SRVC_BY_UUID, base::Owned(param))); 25845aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski} 25945aebe75f75c1f93c396118bc39748fc0f4054c7Jakub Pawlowski 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetServices 2638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 264cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the services on the given 2651baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * server. 2668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID which identify the server. 2688af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 269d9ca4100b8a22950a3e560985ca09d885eb22f32Jakub Pawlowski * Returns returns list of tBTA_GATTC_SERVICE or NULL. 2708af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 272fa9074885bea48e7844e2fd14df799df6da4782fJakub Pawlowskiconst std::vector<tBTA_GATTC_SERVICE>* BTA_GATTC_GetServices(uint16_t conn_id) { 273cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_services(conn_id); 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetCharacteristic 2798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 280cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the characteristic on the 2811baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * given server. 2828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2838af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID which identify the server. 2848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteristic handle 2858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns pointer to tBTA_GATTC_CHARACTERISTIC or NULL. 2878af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2888af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 289cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonconst tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetCharacteristic(uint16_t conn_id, 290cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 291cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_characteristic(conn_id, handle); 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 2968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetDescriptor 2978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 298cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to find the characteristic on the 2991baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * given server. 3008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID which identify the server. 3028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor handle 3038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns returns pointer to tBTA_GATTC_DESCRIPTOR or NULL. 3058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 307cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonconst tBTA_GATTC_DESCRIPTOR* BTA_GATTC_GetDescriptor(uint16_t conn_id, 308cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle) { 309cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return bta_gattc_get_descriptor(conn_id, handle); 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3126918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski/* Return characteristic that owns descriptor with handle equal to |handle|, or 3136918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski * NULL */ 3146918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowskiconst tBTA_GATTC_CHARACTERISTIC* BTA_GATTC_GetOwningCharacteristic( 3156918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski uint16_t conn_id, uint16_t handle) { 3166918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski return bta_gattc_get_owning_characteristic(conn_id, handle); 3176918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski} 3186918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski 3196918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski/* Return service that owns descriptor or characteristic with handle equal to 3206918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski * |handle|, or NULL */ 3216918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowskiconst tBTA_GATTC_SERVICE* BTA_GATTC_GetOwningService(uint16_t conn_id, 3226918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski uint16_t handle) { 3236918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski return bta_gattc_get_service_for_handle(conn_id, handle); 3246918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski} 3256918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_GetGattDb 3298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to get the GATT database. 3318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id: connection ID which identify the server. 333cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * db: output parameter which will contain the GATT database 3341baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * copy. Caller is responsible for freeing it. 3358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * count: number of elements in database. 3368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 338cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_GetGattDb(uint16_t conn_id, uint16_t start_handle, 339cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t end_handle, btgatt_db_element_t** db, 340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson int* count) { 341cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_gattc_get_gatt_db(conn_id, start_handle, end_handle, db, count); 342533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski} 343533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski 344533fdbf46fb623aefbe4d0107b5cccd41aec097aJakub Pawlowski/******************************************************************************* 3458af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3468af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadCharacteristic 3478af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3488af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read a characteristics value 3498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 3518af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteritic handle to read. 3528af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3538af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 3548af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 356cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadCharacteristic(uint16_t conn_id, uint16_t handle, 357ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req, 358cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_READ_OP_CB callback, void* cb_data) { 359cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ* p_buf = 360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 364cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 365cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 366cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb = callback; 367cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb_data = cb_data; 368cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 369cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3727dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski/** 3737dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski * This function is called to read a value of characteristic with uuid equal to 3747dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski * |uuid| 3757dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski */ 376819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowskivoid BTA_GATTC_ReadUsingCharUuid(uint16_t conn_id, const Uuid& uuid, 3777dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski uint16_t s_handle, uint16_t e_handle, 378ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req, 3797dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski GATT_READ_OP_CB callback, void* cb_data) { 3807dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski tBTA_GATTC_API_READ* p_buf = 3817dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 3827dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3837dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 3847dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->hdr.layer_specific = conn_id; 3857dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->auth_req = auth_req; 3867dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->handle = 0; 3877dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->uuid = uuid; 3887dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->s_handle = s_handle; 3897dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->e_handle = e_handle; 3907dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->read_cb = callback; 3917dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski p_buf->read_cb_data = cb_data; 3927dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3937dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski bta_sys_sendmsg(p_buf); 3947dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski} 3957dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 3988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadCharDescr 3998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read a descriptor value. 4018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 4038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor handle to read. 4048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4078af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 408cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadCharDescr(uint16_t conn_id, uint16_t handle, 409ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req, GATT_READ_OP_CB callback, 410ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski void* cb_data) { 411cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ* p_buf = 412cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ*)osi_calloc(sizeof(tBTA_GATTC_API_READ)); 413cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 414cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_EVT; 415cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 416cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 417cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 418cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb = callback; 419cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->read_cb_data = cb_data; 420cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 421cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 423717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4258af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ReadMultiple 4278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to read multiple characteristic or 4298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * characteristic descriptors. 4308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connectino ID. 4328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_read_multi - pointer to the read multiple parameter. 4338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 437cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ReadMultiple(uint16_t conn_id, tBTA_GATTC_MULTI* p_read_multi, 438ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req) { 439cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ_MULTI* p_buf = 440cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_READ_MULTI*)osi_calloc(sizeof(tBTA_GATTC_API_READ_MULTI)); 441717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 442cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_READ_MULTI_EVT; 443cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 444cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->num_attr = p_read_multi->num_attr; 446717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 447cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_buf->num_attr > 0) 448cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->handles, p_read_multi->handles, 449cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(uint16_t) * p_read_multi->num_attr); 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 451cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 452717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov} 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4558af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_WriteCharValue 4578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4588af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to write characteristic value. 4598af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4608af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 4618af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - characteristic handle to write. 4628af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * write_type - type of write. 4638af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 4648af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4658af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 4668af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4678af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 468cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_WriteCharValue(uint16_t conn_id, uint16_t handle, 469e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_WRITE_TYPE write_type, 470cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 471ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req, 472cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 473cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 474cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 475cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 476cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 477cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 478cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 479cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 480cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = write_type; 481cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 482cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 483cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 484cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 485cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() > 0) { 486cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 487cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 488cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 489cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 490cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 492717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_WriteCharDescr 4968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to write descriptor value. 4988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 4998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID 5008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - descriptor hadle to write. 5018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 5028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 506cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_WriteCharDescr(uint16_t conn_id, uint16_t handle, 507cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson std::vector<uint8_t> value, 508ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req, 509cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 510cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 511cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 512cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 513cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 514cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 515cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 516cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 517e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski p_buf->write_type = GATT_WRITE; 518cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 519cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 520cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 521cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() != 0) { 522cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 523cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 524cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 525cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 5265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 527cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 529717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_PrepareWrite 5338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 534cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to prepare write a characteristic 5351baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * value. 5368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5378af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5388af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_char_id - GATT characteritic ID of the service. 5398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * offset - offset of the write value. 5408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * value - the value to be written. 5418af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5428af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5438af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5448af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 545cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_PrepareWrite(uint16_t conn_id, uint16_t handle, uint16_t offset, 546ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski std::vector<uint8_t> value, tGATT_AUTH_REQ auth_req, 547cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB callback, void* cb_data) { 548cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE* p_buf = (tBTA_GATTC_API_WRITE*)osi_calloc( 549cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_API_WRITE) + value.size()); 550cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 551cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_WRITE_EVT; 552cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 553cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->auth_req = auth_req; 554cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 555cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb = callback; 556cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_cb_data = cb_data; 557cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 558cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->write_type = BTA_GATTC_WRITE_PREPARE; 559cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->offset = offset; 560cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->len = value.size(); 561cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 562cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (value.size() > 0) { 563cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->p_value = (uint8_t*)(p_buf + 1); 564cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memcpy(p_buf->p_value, value.data(), value.size()); 565cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 566cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 567cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 569717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5718af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5728af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_ExecuteWrite 5738af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 574cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to execute write a prepare write 5751baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * sequence. 5768af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5778af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 5788af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * is_execute - execute or cancel. 5798af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5808af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 5818af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5828af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 583cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_ExecuteWrite(uint16_t conn_id, bool is_execute) { 584cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_EXEC* p_buf = 585cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_EXEC*)osi_calloc(sizeof(tBTA_GATTC_API_EXEC)); 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 587cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_EXEC_EVT; 588cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 589cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->is_execute = is_execute; 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 591cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 593717a4a9f3a044f264ec2482c2d1806ec3093707aPavlin Radoslavov 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_SendIndConfirm 5978af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 5988af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description This function is called to send handle value confirmation. 5998af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6008af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters conn_id - connection ID. 6018af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * p_char_id - characteristic ID to confirm. 6028af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6038af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns None 6048af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 606cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonvoid BTA_GATTC_SendIndConfirm(uint16_t conn_id, uint16_t handle) { 607cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CONFIRM* p_buf = 608cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson (tBTA_GATTC_API_CONFIRM*)osi_calloc(sizeof(tBTA_GATTC_API_CONFIRM)); 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6102647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski VLOG(1) << __func__ << ": conn_id=" << +conn_id << " handle=0x" << std::hex 6112647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski << +handle; 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 613cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.event = BTA_GATTC_API_CONFIRM_EVT; 614cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->hdr.layer_specific = conn_id; 615cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_buf->handle = handle; 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 617cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bta_sys_sendmsg(p_buf); 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6218af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6228af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_RegisterForNotifications 6238af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 624cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to register for notification of a 6251baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * service. 6268af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface. 6288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * bda - target GATT server. 6298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - GATT characteristic handle. 6308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns OK if registration succeed, otherwise failed. 6328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 634e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub PawlowskitGATT_STATUS BTA_GATTC_RegisterForNotifications(tGATT_IF client_if, 635e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski const RawAddress& bda, 636e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski uint16_t handle) { 637cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg; 638e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_STATUS status = GATT_ILLEGAL_PARAMETER; 639cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t i; 640cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 641cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!handle) { 6422647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(ERROR) << "deregistration failed, handle is 0"; 643cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 644cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 645cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 646f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen p_clreg = bta_gattc_cl_get_regcb(client_if); 647f33b6f434f086b20fabe5913016bc423ac975057Marie Janssen if (p_clreg != NULL) { 648cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 649cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg->notif_reg[i].in_use && 650c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_clreg->notif_reg[i].remote_bda == bda && 651cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle == handle) { 6522647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(WARNING) << "notification already registered"; 653e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski status = GATT_SUCCESS; 654cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 655cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 657e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski if (status != GATT_SUCCESS) { 658cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 659cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!p_clreg->notif_reg[i].in_use) { 660cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset((void*)&p_clreg->notif_reg[i], 0, 661cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson sizeof(tBTA_GATTC_NOTIF_REG)); 662cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 663cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].in_use = true; 664c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_clreg->notif_reg[i].remote_bda = bda; 665cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 666cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle = handle; 667e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski status = GATT_SUCCESS; 668cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson break; 6695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 670cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 671cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (i == BTA_GATTC_NOTIF_REG_MAX) { 672e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski status = GATT_NO_RESOURCES; 6732647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(ERROR) << "Max Notification Reached, registration failed."; 674cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 676cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } else { 6772647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(ERROR) << "client_if=" << +client_if << " Not Registered"; 678cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 6795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 680cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson return status; 6815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6848af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6858af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_DeregisterForNotifications 6868af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 687cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * Description This function is called to de-register for notification of a 6881baaae3f34a667058e7f0c5f778357d98320cf38Myles Watson * service. 6898af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6908af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters client_if - client interface. 6918af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * remote_bda - target GATT server. 6928af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * handle - GATT characteristic handle. 6938af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6948af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns OK if deregistration succeed, otherwise failed. 6958af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 6968af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 697e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub PawlowskitGATT_STATUS BTA_GATTC_DeregisterForNotifications(tGATT_IF client_if, 698e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski const RawAddress& bda, 699e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski uint16_t handle) { 700cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (!handle) { 7012647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(ERROR) << __func__ << ": deregistration failed, handle is 0"; 702e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski return GATT_ILLEGAL_PARAMETER; 703cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 704cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 705cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(client_if); 706cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg == NULL) { 7072647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(ERROR) << __func__ << " client_if=" << +client_if 7082647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski << " not registered bd_addr=" << bda; 709e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski return GATT_ILLEGAL_PARAMETER; 710cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 711cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 712cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson for (int i = 0; i < BTA_GATTC_NOTIF_REG_MAX; i++) { 713cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson if (p_clreg->notif_reg[i].in_use && 714c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski p_clreg->notif_reg[i].remote_bda == bda && 715cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson p_clreg->notif_reg[i].handle == handle) { 7162647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski VLOG(1) << __func__ << " deregistered bd_addr=" << bda; 717cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson memset(&p_clreg->notif_reg[i], 0, sizeof(tBTA_GATTC_NOTIF_REG)); 718e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski return GATT_SUCCESS; 7195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 720cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson } 7215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 7222647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski LOG(ERROR) << __func__ << " registration not found bd_addr=" << bda; 723e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski return GATT_ERROR; 7245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 7255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 726ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta/******************************************************************************* 7278af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7288af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function BTA_GATTC_Refresh 7298af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7308af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Description Refresh the server cache of the remote device 7318af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7328af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Parameters remote_bda: remote device BD address. 7338af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7348af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Returns void 7358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * 7368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ******************************************************************************/ 737a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskivoid BTA_GATTC_Refresh(const RawAddress& remote_bda) { 738d7ee6f2e85a1a8837b0b1e2e8ba1c72b53650cd8Jakub Pawlowski do_in_bta_thread(FROM_HERE, 739d7ee6f2e85a1a8837b0b1e2e8ba1c72b53650cd8Jakub Pawlowski base::Bind(&bta_gattc_process_api_refresh, remote_bda)); 740ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta} 741