1 /******************************************************************************
3 * Copyright (C) 2003-2012 Broadcom Corporation
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 ******************************************************************************/
19 /******************************************************************************
21 * This is the private file for the BTA GATT server.
23 ******************************************************************************/
24 #ifndef BTA_GATTS_INT_H
25 #define BTA_GATTS_INT_H
27 #include "bt_target.h"
29 #include "bta_gatt_api.h"
32 #include "bt_common.h"
34 /*****************************************************************************
35 ** Constants and data types
36 *****************************************************************************/
39 BTA_GATTS_API_REG_EVT = BTA_SYS_EVT_START(BTA_ID_GATTS),
40 BTA_GATTS_INT_START_IF_EVT,
41 BTA_GATTS_API_DEREG_EVT,
42 BTA_GATTS_API_CREATE_SRVC_EVT,
43 BTA_GATTS_API_INDICATION_EVT,
45 BTA_GATTS_API_ADD_INCL_SRVC_EVT,
46 BTA_GATTS_API_ADD_CHAR_EVT,
47 BTA_GATTS_API_ADD_DESCR_EVT,
48 BTA_GATTS_API_DEL_SRVC_EVT,
49 BTA_GATTS_API_START_SRVC_EVT,
50 BTA_GATTS_API_STOP_SRVC_EVT,
51 BTA_GATTS_API_RSP_EVT,
52 BTA_GATTS_API_OPEN_EVT,
53 BTA_GATTS_API_CANCEL_OPEN_EVT,
54 BTA_GATTS_API_CLOSE_EVT,
55 BTA_GATTS_API_LISTEN_EVT,
56 BTA_GATTS_API_DISABLE_EVT
58 typedef UINT16 tBTA_GATTS_INT_EVT;
60 /* max number of application allowed on device */
61 #define BTA_GATTS_MAX_APP_NUM GATT_MAX_SR_PROFILES
63 /* max number of services allowed in the device */
64 #define BTA_GATTS_MAX_SRVC_NUM GATT_MAX_SR_PROFILES
66 /* internal strucutre for GATTC register API */
71 tBTA_GATTS_CBACK *p_cback;
77 tBTA_GATTS_IF server_if;
78 }tBTA_GATTS_INT_START_IF;
80 typedef tBTA_GATTS_INT_START_IF tBTA_GATTS_API_DEREG;
85 tBTA_GATTS_IF server_if;
86 tBT_UUID service_uuid;
91 } tBTA_GATTS_API_CREATE_SRVC;
98 tBTA_GATT_CHAR_PROP property;
100 }tBTA_GATTS_API_ADD_CHAR;
105 UINT16 included_service_id;
107 }tBTA_GATTS_API_ADD_INCL_SRVC;
114 }tBTA_GATTS_API_ADD_DESCR;
121 BOOLEAN need_confirm;
122 UINT8 value[BTA_GATT_MAX_ATTR_LEN];
123 }tBTA_GATTS_API_INDICATION;
129 tBTA_GATT_STATUS status;
130 tBTA_GATTS_RSP *p_rsp;
136 tBTA_GATT_TRANSPORT transport;
137 }tBTA_GATTS_API_START;
144 tBTA_GATTS_IF server_if;
146 tBTA_GATT_TRANSPORT transport;
148 }tBTA_GATTS_API_OPEN;
150 typedef tBTA_GATTS_API_OPEN tBTA_GATTS_API_CANCEL_OPEN;
155 BD_ADDR_PTR remote_bda;
156 tBTA_GATTS_IF server_if;
158 } tBTA_GATTS_API_LISTEN;
163 tBTA_GATTS_API_REG api_reg;
164 tBTA_GATTS_API_DEREG api_dereg;
165 tBTA_GATTS_API_CREATE_SRVC api_create_svc;
166 tBTA_GATTS_API_ADD_INCL_SRVC api_add_incl_srvc;
167 tBTA_GATTS_API_ADD_CHAR api_add_char;
168 tBTA_GATTS_API_ADD_DESCR api_add_char_descr;
169 tBTA_GATTS_API_START api_start;
170 tBTA_GATTS_API_INDICATION api_indicate;
171 tBTA_GATTS_API_RSP api_rsp;
172 tBTA_GATTS_API_OPEN api_open;
173 tBTA_GATTS_API_CANCEL_OPEN api_cancel_open;
175 tBTA_GATTS_INT_START_IF int_start_if;
176 /* if peripheral role is supported */
177 tBTA_GATTS_API_LISTEN api_listen;
180 /* application registration control block */
185 tBTA_GATTS_CBACK *p_cback;
186 tBTA_GATTS_IF gatt_if;
189 /* service registration control block */
192 tBT_UUID service_uuid; /* service UUID */
193 UINT16 service_id; /* service handle */
194 UINT8 inst_num; /* instance ID */
196 UINT8 idx; /* self index of serviec CB */
202 /* GATT server control block */
206 tBTA_GATTS_RCB rcb[BTA_GATTS_MAX_APP_NUM];
207 tBTA_GATTS_SRVC_CB srvc_cb[BTA_GATTS_MAX_SRVC_NUM];
212 /*****************************************************************************
214 *****************************************************************************/
216 /* GATTC control block */
217 #if BTA_DYNAMIC_MEMORY == FALSE
218 extern tBTA_GATTS_CB bta_gatts_cb;
220 extern tBTA_GATTS_CB *bta_gatts_cb_ptr;
221 #define bta_gatts_cb (*bta_gatts_cb_ptr)
224 /*****************************************************************************
225 ** Function prototypes
226 *****************************************************************************/
227 extern BOOLEAN bta_gatts_hdl_event(BT_HDR *p_msg);
229 extern void bta_gatts_api_disable(tBTA_GATTS_CB *p_cb);
230 extern void bta_gatts_api_enable(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_data);
231 extern void bta_gatts_register(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg);
232 extern void bta_gatts_start_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg);
233 extern void bta_gatts_deregister(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA *p_msg);
234 extern void bta_gatts_create_srvc(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
235 extern void bta_gatts_add_include_srvc(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
236 extern void bta_gatts_add_char(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
237 extern void bta_gatts_add_char_descr(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
238 extern void bta_gatts_delete_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
239 extern void bta_gatts_start_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
240 extern void bta_gatts_stop_service(tBTA_GATTS_SRVC_CB *p_srvc_cb, tBTA_GATTS_DATA * p_msg);
242 extern void bta_gatts_send_rsp(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
243 extern void bta_gatts_indicate_handle (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
246 extern void bta_gatts_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
247 extern void bta_gatts_cancel_open (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
248 extern void bta_gatts_close (tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
249 extern void bta_gatts_listen(tBTA_GATTS_CB *p_cb, tBTA_GATTS_DATA * p_msg);
251 extern BOOLEAN bta_gatts_uuid_compare(tBT_UUID tar, tBT_UUID src);
252 extern tBTA_GATTS_RCB *bta_gatts_find_app_rcb_by_app_if(tBTA_GATTS_IF server_if);
253 extern UINT8 bta_gatts_find_app_rcb_idx_by_app_if(tBTA_GATTS_CB *p_cb, tBTA_GATTS_IF server_if);
254 extern UINT8 bta_gatts_alloc_srvc_cb(tBTA_GATTS_CB *p_cb, UINT8 rcb_idx);
255 extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_srvc_id(tBTA_GATTS_CB *p_cb, UINT16 service_id);
256 extern tBTA_GATTS_SRVC_CB * bta_gatts_find_srvc_cb_by_attr_id(tBTA_GATTS_CB *p_cb, UINT16 attr_id);
259 #endif /* BTA_GATTS_INT_H */