15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 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 BTA GATT server.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef BTA_GATTS_INT_H
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define BTA_GATTS_INT_H
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_gatt_api.h"
29cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#include "bta_sys.h"
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "gatt_api.h"
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
32258c2538e3b62a8cdb403f2730c45d721e5292b4Pavlin Radoslavov#include "bt_common.h"
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
358af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *  Constants and data types
368af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/
37cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonenum {
38cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS),
39cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_INT_START_IF_EVT,
40cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_DEREG_EVT,
41cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_INDICATION_EVT,
42cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
43cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_DEL_SRVC_EVT,
44cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_STOP_SRVC_EVT,
45cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_RSP_EVT,
46cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_OPEN_EVT,
47cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_CANCEL_OPEN_EVT,
48cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_CLOSE_EVT,
49cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BTA_GATTS_API_DISABLE_EVT
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
51e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssentypedef uint16_t tBTA_GATTS_INT_EVT;
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* max number of application allowed on device */
54cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* max number of services allowed in the device */
57cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson#define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* internal strucutre for GATTC register API  */
60cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
61cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
62cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBT_UUID app_uuid;
63cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_CBACK* p_cback;
64cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_REG;
65cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
66cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
67cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
68cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_IF server_if;
69cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_INT_START_IF;
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG;
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
73cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
74cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
75cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_IF server_if;
76cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  btgatt_db_element_t* service;
77cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t count;
78a641b6fa2a25e1b5382945d13c4fa49d36084a78Jakub Pawlowski} tBTA_GATTS_API_ADD_SERVICE;
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
80cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
81cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
82cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t attr_id;
83cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t len;
84cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bool need_confirm;
85cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint8_t value[BTA_GATT_MAX_ATTR_LEN];
86cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_INDICATION;
87cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
88cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
89cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
90cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint32_t trans_id;
91cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATT_STATUS status;
92cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_RSP* p_rsp;
93cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_RSP;
94cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
95cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
96cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
97cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATT_TRANSPORT transport;
98cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_START;
99cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
100cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
101cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
1029e030fde05352ec4385d7baf6cc2af89e95e039cJakub Pawlowski  RawAddress remote_bda;
103cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_IF server_if;
104cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bool is_direct;
105cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATT_TRANSPORT transport;
106cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
107cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_API_OPEN;
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN;
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
111cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef union {
112cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  BT_HDR hdr;
113cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_REG api_reg;
114cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_DEREG api_dereg;
115cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_ADD_SERVICE api_add_service;
116cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_INDICATION api_indicate;
117cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_RSP api_rsp;
118cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_OPEN api_open;
119cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_API_CANCEL_OPEN api_cancel_open;
120cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
121cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_INT_START_IF int_start_if;
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_GATTS_DATA;
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* application registration control block */
125cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
126cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bool in_use;
127cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBT_UUID app_uuid;
128cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_CBACK* p_cback;
129cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_IF gatt_if;
130cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_RCB;
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* service registration control block */
133cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
134cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBT_UUID service_uuid; /* service UUID */
135cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint16_t service_id;   /* service start handle */
136cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint8_t rcb_idx;
137cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  uint8_t idx; /* self index of serviec CB */
138cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bool in_use;
139cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_SRVC_CB;
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* GATT server control block */
142cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsontypedef struct {
143cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  bool enabled;
144cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM];
145cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson  tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM];
146cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson} tBTA_GATTS_CB;
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
1498af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *  Global data
1508af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* GATTC control block */
153cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_CB bta_gatts_cb;
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
1568af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson *  Function prototypes
1578af480e24549ba51a3f6858d9d9af504715e0beaMyles Watson ****************************************************************************/
158cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern bool bta_gatts_hdl_event(BT_HDR* p_msg);
159cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
160cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_api_disable(tBTA_GATTS_CB* p_cb);
161cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_api_enable(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_data);
162cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_register(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
163cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_start_if(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
164cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_deregister(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
165cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB* p_srvc_cb,
166cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                                     tBTA_GATTS_DATA* p_msg);
167cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB* p_srvc_cb,
168cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                                   tBTA_GATTS_DATA* p_msg);
169cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
170cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_send_rsp(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
171cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_indicate_handle(tBTA_GATTS_CB* p_cb,
172cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                                      tBTA_GATTS_DATA* p_msg);
173cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson
174cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
175cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_cancel_open(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
176cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern void bta_gatts_close(tBTA_GATTS_CB* p_cb, tBTA_GATTS_DATA* p_msg);
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
178e9e58ced195ec2c983c7723c9cbdabd45eb0f2fdMarie Janssenextern bool bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src);
179cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_RCB* bta_gatts_find_app_rcb_by_app_if(
180cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    tBTA_GATTS_IF server_if);
181cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern uint8_t bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB* p_cb,
182cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson                                                    tBTA_GATTS_IF server_if);
183cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern uint8_t bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB* p_cb, uint8_t rcb_idx);
184cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_srvc_id(
185cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    tBTA_GATTS_CB* p_cb, uint16_t service_id);
186cd1fd07f1306e08fe048682dd5918987e579f937Myles Watsonextern tBTA_GATTS_SRVC_CB* bta_gatts_find_srvc_cb_by_attr_id(
187cd1fd07f1306e08fe048682dd5918987e579f937Myles Watson    tBTA_GATTS_CB* p_cb, uint16_t attr_id);
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* BTA_GATTS_INT_H */
190