15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski * Copyright 2003-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 private file for the file transfer client (FTC). 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_GATTC_INT_H 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_GATTC_INT_H 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h" 281a3844f933bd63c8a381371dabfb35c6a0249e3ePavlin Radoslavov 295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatt_api.h" 30cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h" 31cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "osi/include/fixed_queue.h" 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 33258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h" 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 352647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski#include <base/logging.h> 362647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski#include <base/strings/stringprintf.h> 372647452211f7beaee19610fe79442828ab2b0ee6Jakub Pawlowski 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 398af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Constants and data types 408af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 41cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonenum { 42cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_GATTC), 43cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_INT_OPEN_FAIL_EVT, 44cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_CANCEL_OPEN_EVT, 45cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_INT_CANCEL_OPEN_OK_EVT, 46cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 47cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_READ_EVT, 48cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_WRITE_EVT, 49cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_EXEC_EVT, 50cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_CFG_MTU_EVT, 51cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 52cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_CLOSE_EVT, 53cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 54cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_SEARCH_EVT, 55cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_CONFIRM_EVT, 56cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_API_READ_MULTI_EVT, 57cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 58cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_INT_CONN_EVT, 59cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_INT_DISCOVER_EVT, 60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_DISCOVER_CMPL_EVT, 61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_OP_CMPL_EVT, 6231a6bf4f11b7f5483af93d9ded49f979167a0ccbJakub Pawlowski BTA_GATTC_INT_DISCONN_EVT 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 64e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssentypedef uint16_t tBTA_GATTC_INT_EVT; 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 66cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_SERVICE_CHANGED_LEN 4 675919554fe8e03b87a7c7724238481b85e9cf6630Jakub Pawlowski 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* max client application GATTC can support */ 69cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#ifndef BTA_GATTC_CL_MAX 70cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_CL_MAX 32 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* max known devices GATTC can support */ 74cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#ifndef BTA_GATTC_KNOWN_SR_MAX 75cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_KNOWN_SR_MAX 10 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 78cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_CONN_MAX GATT_MAX_PHY_CHANNEL 79ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_GATTC_CLCB_MAX 81cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_CLCB_MAX GATT_CL_MAX_LCB 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 84cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_WRITE_PREPARE GATT_WRITE_PREPARE 85e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* internal strucutre for GATTC register API */ 87cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 88cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 89a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress remote_bda; 90e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_IF client_if; 91cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool is_direct; 92cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_TRANSPORT transport; 9396fb273d92a31204edcf43ab2594a19876d14056Jakub Pawlowski uint8_t initiating_phys; 9416bb48b320cde54a1a06a525f4d9be1421689649Jakub Pawlowski bool opportunistic; 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTC_API_OPEN; 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef tBTA_GATTC_API_OPEN tBTA_GATTC_API_CANCEL_OPEN; 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 99cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 100cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 101ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req; 1027dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 1037dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski // read by handle data 104cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle; 1057dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 1067dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski // read by UUID data 107819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski bluetooth::Uuid uuid; 1087dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski uint16_t s_handle; 1097dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski uint16_t e_handle; 1107dd34f52bc950bae2fb1b30b17da0ff34ee016aaJakub Pawlowski 111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_EVT cmpl_evt; 112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_READ_OP_CB read_cb; 113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson void* read_cb_data; 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTC_API_READ; 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 117cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 118ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req; 119cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle; 120e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_WRITE_TYPE write_type; 121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t offset; 122cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t len; 123cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t* p_value; 124cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson GATT_WRITE_OP_CB write_cb; 125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson void* write_cb_data; 126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_API_WRITE; 127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 129cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool is_execute; 131cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_API_EXEC; 132cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 133cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle; 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTC_API_CONFIRM; 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef tGATT_CL_COMPLETE tBTA_GATTC_CMPL; 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 140cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 141cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t op_code; 143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tGATT_STATUS status; 144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_CMPL* p_cmpl; 145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_OP_CMPL; 146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 147cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 148cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 149819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski bluetooth::Uuid* p_srvc_uuid; 150cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_API_SEARCH; 151cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 152cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 153cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 154ee9a11f903af6ee6b3ca1bd59fc9f89fd029cebaJakub Pawlowski tGATT_AUTH_REQ auth_req; 155cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t num_attr; 156cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handles[GATT_MAX_READ_MULTI_HANDLES]; 157cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_API_READ_MULTI; 158cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 159cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 160cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 161cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t mtu; 162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_API_CFG_MTU; 163cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 164cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 165cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 166a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress remote_bda; 167e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_IF client_if; 168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t role; 169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBT_TRANSPORT transport; 170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tGATT_DISCONN_REASON reason; 171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_INT_CONN; 172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef union { 174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BT_HDR hdr; 175cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_OPEN api_conn; 176cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CANCEL_OPEN api_cancel_conn; 177cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ api_read; 178cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_SEARCH api_search; 179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_WRITE api_write; 180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CONFIRM api_confirm; 181cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_EXEC api_exec; 182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_READ_MULTI api_read_multi; 183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_API_CFG_MTU api_mtu; 184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_OP_CMPL op_cmpl; 185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_INT_CONN int_conn; 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTC_DATA; 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 188cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonenum { 189cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_IDLE_ST = 0, /* Idle */ 190cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_W4_CONN_ST, /* Wait for connection - (optional) */ 191cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_CONN_ST, /* connected state */ 192cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_DISCOVER_ST /* discover is in progress */ 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}; 194e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssentypedef uint8_t tBTA_GATTC_STATE; 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 196cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 197cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 198a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress server_bda; 199cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool connected; 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 201cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_SERV_IDLE 0 202cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_SERV_LOAD 1 203cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_SERV_SAVE 2 204cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_SERV_DISC 3 205ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define BTA_GATTC_SERV_DISC_ACT 4 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 207cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t state; 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 209fa9074885bea48e7844e2fd14df799df6da4782fJakub Pawlowski std::vector<tBTA_GATTC_SERVICE> srvc_cache; 210cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t update_count; /* indication received */ 211cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t num_clcb; /* number of associated CLCB */ 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2138a0f7ad094c5b1493e3791ba1db718c1791a5b94Jakub Pawlowski std::vector<tBTA_GATTC_SERVICE> pending_discovery; 2148a0f7ad094c5b1493e3791ba1db718c1791a5b94Jakub Pawlowski std::vector<tBTA_GATTC_SERVICE>::iterator pending_service; 2158a0f7ad094c5b1493e3791ba1db718c1791a5b94Jakub Pawlowski std::vector<tBTA_GATTC_CHARACTERISTIC>::iterator pending_char; 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 217cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t srvc_hdl_chg; /* service handle change indication pending */ 218cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t attr_index; /* cahce NV saving/loading attribute index */ 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 220cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t mtu; 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTC_SERV; 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_GATTC_NOTIF_REG_MAX 224cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_NOTIF_REG_MAX 15 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 227cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 228cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 229a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress remote_bda; 230cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle; 231cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_NOTIF_REG; 232cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 233cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 234cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_CBACK* p_cback; 235cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 236e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_IF client_if; /* client interface with BTE stack for this application */ 237cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t num_clcb; /* number of associated CLCB */ 238cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool dereg_pending; 239819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski bluetooth::Uuid app_uuid; 240cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_NOTIF_REG notif_reg[BTA_GATTC_NOTIF_REG_MAX]; 241cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_RCB; 242cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 243cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson/* client channel is a mapping between a BTA client(cl_id) and a remote BD 244cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson * address */ 245cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 246cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t bta_conn_id; /* client channel ID, unique for clcb */ 247a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress bda; 248cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_TRANSPORT transport; /* channel transport */ 249cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_rcb; /* pointer to the registration CB */ 250cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_SERV* p_srcb; /* server cache CB */ 251cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_q_cmd; /* command in queue waiting for execution */ 252cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 253cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_NO_SCHEDULE 0 254cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_DISC_WAITING 0x01 255cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTC_REQ_WAITING 0x10 256cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 257cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t auto_update; /* auto update is waiting */ 258cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool disc_active; 259cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 260cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_STATE state; 261e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_STATUS status; 262cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t reason; 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTC_CLCB; 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* back ground connection tracking information */ 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if GATT_MAX_APPS <= 8 267cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef uint8_t tBTA_GATTC_CIF_MASK; 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#elif GATT_MAX_APPS <= 16 269e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssentypedef uint16_t tBTA_GATTC_CIF_MASK; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#elif GATT_MAX_APPS <= 32 271e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssentypedef uint32_t tBTA_GATTC_CIF_MASK; 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 274cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 275cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 276a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress remote_bda; 277cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_CIF_MASK cif_mask; 278cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 279cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_BG_TCK; 280cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 281cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 282cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson bool in_use; 283a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski RawAddress remote_bda; 284cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_CONN; 285cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 286cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonenum { 287cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_STATE_DISABLED, 288cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_STATE_ENABLING, 289cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_STATE_ENABLED, 290cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson BTA_GATTC_STATE_DISABLING 291e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach}; 292e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 293cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct { 294cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint8_t state; 295e1202caae4920139ea0cfed5c51f5f76b2dc8bc4Andre Eisenbach 296cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_CONN conn_track[BTA_GATTC_CONN_MAX]; 297cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_BG_TCK bg_track[BTA_GATTC_KNOWN_SR_MAX]; 298cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB cl_rcb[BTA_GATTC_CL_MAX]; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 300cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_CLCB clcb[BTA_GATTC_CLCB_MAX]; 301cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_SERV known_server[BTA_GATTC_KNOWN_SR_MAX]; 302cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTC_CB; 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 3058af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Global data 3068af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* GATTC control block */ 309cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_CB bta_gattc_cb; 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/***************************************************************************** 3128af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson * Function prototypes 3138af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/ 314cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gattc_hdl_event(BT_HDR* p_msg); 315cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gattc_sm_execute(tBTA_GATTC_CLCB* p_clcb, uint16_t event, 316cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* function processed outside SM */ 319a05734c69c611567374c7d9a7c9184f60afaed06Jakub Pawlowskiextern void bta_gattc_disable(); 320819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowskiextern void bta_gattc_register(const bluetooth::Uuid& app_uuid, 321819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski tBTA_GATTC_CBACK* p_data, 322221e9bf6c9e9f974efd92ea4f054dbdba248d2dbJakub Pawlowski BtaAppRegisterCallback cb); 323cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_process_api_open(tBTA_GATTC_DATA* p_msg); 324cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_process_api_open_cancel(tBTA_GATTC_DATA* p_msg); 325cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_deregister(tBTA_GATTC_RCB* p_clreg); 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* function within state machine */ 328cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 329cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_open_fail(tBTA_GATTC_CLCB* p_clcb, 330cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 331cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_open_error(tBTA_GATTC_CLCB* p_clcb, 332cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 333cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 334cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_cancel_open(tBTA_GATTC_CLCB* p_clcb, 335cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 336cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_cancel_open_ok(tBTA_GATTC_CLCB* p_clcb, 337cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 338cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_cancel_open_error(tBTA_GATTC_CLCB* p_clcb, 339cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 340cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 341cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_conn(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 342cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 343cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_close(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 344cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_close_fail(tBTA_GATTC_CLCB* p_clcb, 345cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 346cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_disc_close(tBTA_GATTC_CLCB* p_clcb, 347cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 348cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 349cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_start_discover(tBTA_GATTC_CLCB* p_clcb, 350cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 351cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB* p_clcb, 352cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 353cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_read(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 354cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_write(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 355cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_op_cmpl(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 356cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_q_cmd(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 357cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_search(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 358cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_fail(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 359cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_confirm(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 360cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_execute(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 361cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_read_multi(tBTA_GATTC_CLCB* p_clcb, 362cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 363cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_ci_open(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 364cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_ci_close(tBTA_GATTC_CLCB* p_clcb, 365cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 366cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_ignore_op_cmpl(tBTA_GATTC_CLCB* p_clcb, 367cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_data); 368cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_restart_discover(tBTA_GATTC_CLCB* p_clcb, 369cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_DATA* p_msg); 370cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN* p_data, 371cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_RCB* p_clreg); 372cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN* p_data); 373cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_send_open_cback(tBTA_GATTC_RCB* p_clreg, 374e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_STATUS status, 375a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& remote_bda, 376c2276b06572ab6fc1f900fbb1f41087e77d47e2aJakub Pawlowski uint16_t conn_id, 377cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_TRANSPORT transport, uint16_t mtu); 378a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern void bta_gattc_process_api_refresh(const RawAddress& remote_bda); 379cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 380cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_listen(tBTA_GATTC_DATA* p_msg); 381cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_broadcast(tBTA_GATTC_DATA* p_msg); 38284baa7f16e830394408278dbb8c508dd9fa02887Myles Watson 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* utility functions */ 384a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_CLCB* bta_gattc_find_clcb_by_cif(uint8_t client_if, 385a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& remote_bda, 386a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski tBTA_TRANSPORT transport); 387cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_CLCB* bta_gattc_find_clcb_by_conn_id(uint16_t conn_id); 388e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskiextern tBTA_GATTC_CLCB* bta_gattc_clcb_alloc(tGATT_IF client_if, 389a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& remote_bda, 390cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_TRANSPORT transport); 391cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_clcb_dealloc(tBTA_GATTC_CLCB* p_clcb); 392e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskiextern tBTA_GATTC_CLCB* bta_gattc_find_alloc_clcb(tGATT_IF client_if, 393a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& remote_bda, 394cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_TRANSPORT transport); 395cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_RCB* bta_gattc_cl_get_regcb(uint8_t client_if); 396a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_SERV* bta_gattc_find_srcb(const RawAddress& bda); 397a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_SERV* bta_gattc_srcb_alloc(const RawAddress& bda); 398cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_SERV* bta_gattc_find_scb_by_cid(uint16_t conn_id); 399cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_CLCB* bta_gattc_find_int_conn_clcb(tBTA_GATTC_DATA* p_msg); 400cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_CLCB* bta_gattc_find_int_disconn_clcb(tBTA_GATTC_DATA* p_msg); 401cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 402cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gattc_enqueue(tBTA_GATTC_CLCB* p_clcb, tBTA_GATTC_DATA* p_data); 403cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 404cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gattc_check_notif_registry(tBTA_GATTC_RCB* p_clreg, 405cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_SERV* p_srcb, 406cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_NOTIFY* p_notify); 407e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskiextern bool bta_gattc_mark_bg_conn(tGATT_IF client_if, 408a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& remote_bda, bool add); 409e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskiextern bool bta_gattc_check_bg_conn(tGATT_IF client_if, 410a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowski const RawAddress& remote_bda, uint8_t role); 411e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenextern uint8_t bta_gattc_num_reg_app(void); 412cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_clear_notif_registration(tBTA_GATTC_SERV* p_srcb, 413cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t conn_id, 414cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t start_handle, 415cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t end_handle); 416a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_SERV* bta_gattc_find_srvr_cache(const RawAddress& bda); 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* discovery functions */ 419cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_disc_res_cback(uint16_t conn_id, 420cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tGATT_DISC_TYPE disc_type, 421cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tGATT_DISC_RES* p_data); 422cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_disc_cmpl_cback(uint16_t conn_id, 423cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tGATT_DISC_TYPE disc_type, 424cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tGATT_STATUS status); 425e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskiextern tGATT_STATUS bta_gattc_discover_pri_service(uint16_t conn_id, 426e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tBTA_GATTC_SERV* p_server_cb, 427e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski uint8_t disc_type); 428819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowskiextern void bta_gattc_search_service(tBTA_GATTC_CLCB* p_clcb, 429819e2ecb84a22d6e03ec9ed67b3260c0dd7e8abaJakub Pawlowski bluetooth::Uuid* p_uuid); 430fa9074885bea48e7844e2fd14df799df6da4782fJakub Pawlowskiextern std::vector<tBTA_GATTC_SERVICE>* bta_gattc_get_services( 431fa9074885bea48e7844e2fd14df799df6da4782fJakub Pawlowski uint16_t conn_id); 432cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern const tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle( 433cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t conn_id, uint16_t handle); 434cd1fd07f1306e08fe048682dd5918987e579f937Myles WatsontBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic_srcb( 435cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_SERV* p_srcb, uint16_t handle); 4366918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowskiextern tBTA_GATTC_SERVICE* bta_gattc_get_service_for_handle_srcb( 4376918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski tBTA_GATTC_SERV* p_srcb, uint16_t handle); 438cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_characteristic(uint16_t conn_id, 439cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t handle); 440d9ca4100b8a22950a3e560985ca09d885eb22f32Jakub Pawlowskiextern const tBTA_GATTC_DESCRIPTOR* bta_gattc_get_descriptor(uint16_t conn_id, 441d9ca4100b8a22950a3e560985ca09d885eb22f32Jakub Pawlowski uint16_t handle); 4426918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowskiextern const tBTA_GATTC_CHARACTERISTIC* bta_gattc_get_owning_characteristic( 4436918d40fd9ca8c58c115cf694f165413165e5758Jakub Pawlowski uint16_t conn_id, uint16_t handle); 444cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_get_gatt_db(uint16_t conn_id, uint16_t start_handle, 445cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson uint16_t end_handle, btgatt_db_element_t** db, 446cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson int* count); 447e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowskiextern tGATT_STATUS bta_gattc_init_cache(tBTA_GATTC_SERV* p_srvc_cb); 448cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_rebuild_cache(tBTA_GATTC_SERV* p_srcv, uint16_t num_attr, 449cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson tBTA_GATTC_NV_ATTR* attr); 450cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_cache_save(tBTA_GATTC_SERV* p_srvc_cb, uint16_t conn_id); 451cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gattc_reset_discover_st(tBTA_GATTC_SERV* p_srcb, 452e9ef00c3fb2de5077a8ffdb728f1996cc1e9a155Jakub Pawlowski tGATT_STATUS status); 453cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson 454a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_CONN* bta_gattc_conn_alloc(const RawAddress& remote_bda); 455a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_CONN* bta_gattc_conn_find(const RawAddress& remote_bda); 456a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern tBTA_GATTC_CONN* bta_gattc_conn_find_alloc(const RawAddress& remote_bda); 457a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern bool bta_gattc_conn_dealloc(const RawAddress& remote_bda); 458ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta 459cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gattc_cache_load(tBTA_GATTC_CLCB* p_clcb); 460a484a888196ddf8bcbf1ad3226d6451bc735a94bJakub Pawlowskiextern void bta_gattc_cache_reset(const RawAddress& server_bda); 461c10b209f62a52d2a782d4d8c97734b6c142f2567Jakub Pawlowski 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATTC_INT_H */ 463