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