• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2003-2013 Broadcom Corporation
4  *
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:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  This is the public interface file for BTA GATT.
22  *
23  ******************************************************************************/
24 
25 #ifndef BTA_GATT_API_H
26 #define BTA_GATT_API_H
27 
28 #include "bta_api.h"
29 #include "gatt_api.h"
30 
31 #ifndef     BTA_GATT_INCLUDED
32 #define     BTA_GATT_INCLUDED     FALSE
33 #endif
34 
35 
36 #if ((BLE_INCLUDED == FALSE) && (BTA_GATT_INCLUDED == TRUE))
37 #undef BTA_GATT_INCLUDED
38 #define BTA_GATT_INCLUDED        FALSE
39 #endif
40 
41 
42 #ifndef     BTA_GATT_DEBUG
43 #define     BTA_GATT_DEBUG       FALSE
44 #endif
45 
46 /*****************************************************************************
47 **  Constants and data types
48 *****************************************************************************/
49 /**************************
50 **  Common Definitions
51 ***************************/
52 /* GATT ID */
53 typedef struct
54 {
55     tBT_UUID    uuid;           /* uuid of the attribute */
56     UINT8       inst_id;        /* instance ID */
57 } __attribute__((packed)) tBTA_GATT_ID;
58 
59 /* Success code and error codes */
60 #define  BTA_GATT_OK                        GATT_SUCCESS
61 #define  BTA_GATT_INVALID_HANDLE            GATT_INVALID_HANDLE                /* 0x0001 */
62 #define  BTA_GATT_READ_NOT_PERMIT           GATT_READ_NOT_PERMIT               /* 0x0002 */
63 #define  BTA_GATT_WRITE_NOT_PERMIT          GATT_WRITE_NOT_PERMIT              /* 0x0003 */
64 #define  BTA_GATT_INVALID_PDU               GATT_INVALID_PDU                   /* 0x0004 */
65 #define  BTA_GATT_INSUF_AUTHENTICATION      GATT_INSUF_AUTHENTICATION          /* 0x0005 */
66 #define  BTA_GATT_REQ_NOT_SUPPORTED         GATT_REQ_NOT_SUPPORTED             /* 0x0006 */
67 #define  BTA_GATT_INVALID_OFFSET            GATT_INVALID_OFFSET                /* 0x0007 */
68 #define  BTA_GATT_INSUF_AUTHORIZATION       GATT_INSUF_AUTHORIZATION           /* 0x0008 */
69 #define  BTA_GATT_PREPARE_Q_FULL            GATT_PREPARE_Q_FULL                /* 0x0009 */
70 #define  BTA_GATT_NOT_FOUND                 GATT_NOT_FOUND                     /* 0x000a */
71 #define  BTA_GATT_NOT_LONG                  GATT_NOT_LONG                      /* 0x000b */
72 #define  BTA_GATT_INSUF_KEY_SIZE            GATT_INSUF_KEY_SIZE                /* 0x000c */
73 #define  BTA_GATT_INVALID_ATTR_LEN          GATT_INVALID_ATTR_LEN              /* 0x000d */
74 #define  BTA_GATT_ERR_UNLIKELY              GATT_ERR_UNLIKELY                  /* 0x000e */
75 #define  BTA_GATT_INSUF_ENCRYPTION          GATT_INSUF_ENCRYPTION              /* 0x000f */
76 #define  BTA_GATT_UNSUPPORT_GRP_TYPE        GATT_UNSUPPORT_GRP_TYPE            /* 0x0010 */
77 #define  BTA_GATT_INSUF_RESOURCE            GATT_INSUF_RESOURCE                /* 0x0011 */
78 
79 
80 #define  BTA_GATT_ILLEGAL_PARAMETER         GATT_ILLEGAL_PARAMETER             /* 0x0087 */
81 #define  BTA_GATT_NO_RESOURCES              GATT_NO_RESOURCES                  /* 0x0080 */
82 #define  BTA_GATT_INTERNAL_ERROR            GATT_INTERNAL_ERROR                /* 0x0081 */
83 #define  BTA_GATT_WRONG_STATE               GATT_WRONG_STATE                   /* 0x0082 */
84 #define  BTA_GATT_DB_FULL                   GATT_DB_FULL                       /* 0x0083 */
85 #define  BTA_GATT_BUSY                      GATT_BUSY                          /* 0x0084 */
86 #define  BTA_GATT_ERROR                     GATT_ERROR                         /* 0x0085 */
87 #define  BTA_GATT_CMD_STARTED               GATT_CMD_STARTED                   /* 0x0086 */
88 #define  BTA_GATT_PENDING                   GATT_PENDING                       /* 0x0088 */
89 #define  BTA_GATT_AUTH_FAIL                 GATT_AUTH_FAIL                     /* 0x0089 */
90 #define  BTA_GATT_MORE                      GATT_MORE                          /* 0x008a */
91 #define  BTA_GATT_INVALID_CFG               GATT_INVALID_CFG                   /* 0x008b */
92 #define  BTA_GATT_DUP_REG                   0x008c
93 #define  BTA_GATT_ALREADY_OPEN              0x008d                              /* 0x008d */
94 #define  BTA_GATT_CANCEL                    0x008e                              /* 0x008e */
95 typedef UINT8 tBTA_GATT_STATUS;
96 
97 #define BTA_GATT_INVALID_CONN_ID   GATT_INVALID_CONN_ID
98 
99 
100 /* Client callback function events */
101 #define BTA_GATTC_REG_EVT           0   /* GATT client is registered. */
102 #define BTA_GATTC_DEREG_EVT         1   /* GATT client deregistered event */
103 #define BTA_GATTC_OPEN_EVT          2   /* GATTC open request status  event */
104 #define BTA_GATTC_READ_CHAR_EVT     3   /* GATT read characteristic event */
105 #define BTA_GATTC_WRITE_CHAR_EVT    4   /* GATT write characteristic or char descriptor event */
106 #define BTA_GATTC_CLOSE_EVT         5   /* GATTC  close request status event */
107 #define BTA_GATTC_SEARCH_CMPL_EVT   6   /* GATT discovery complete event */
108 #define BTA_GATTC_SEARCH_RES_EVT    7   /* GATT discovery result event */
109 #define BTA_GATTC_READ_DESCR_EVT    8   /* GATT read characterisitc descriptor event */
110 #define BTA_GATTC_WRITE_DESCR_EVT   9   /* GATT write characteristic descriptor event */
111 #define BTA_GATTC_NOTIF_EVT         10  /* GATT attribute notification event */
112 #define BTA_GATTC_PREP_WRITE_EVT    11  /* GATT prepare write  event */
113 #define BTA_GATTC_EXEC_EVT          12  /* execute write complete event */
114 #define BTA_GATTC_ACL_EVT           13  /* ACL up event */
115 #define BTA_GATTC_CANCEL_OPEN_EVT   14  /* cancel open event */
116 #define BTA_GATTC_SRVC_CHG_EVT      15  /* service change event */
117 #define BTA_GATTC_LISTEN_EVT        16  /* listen event */
118 #define BTA_GATTC_ENC_CMPL_CB_EVT   17  /* encryption complete callback event */
119 
120 typedef UINT8 tBTA_GATTC_EVT;
121 
122 typedef tGATT_IF tBTA_GATTC_IF;
123 
124 typedef struct
125 {
126     UINT16              unit;       /* as UUIUD defined by SIG */
127     UINT16              descr;       /* as UUID as defined by SIG */
128     tGATT_FORMAT        format;
129     INT8                exp;
130     UINT8               name_spc;   /* The name space of the description */
131 }tBTA_GATT_CHAR_PRES;
132 
133 #define BTA_GATT_CLT_CONFIG_NONE               GATT_CLT_CONFIG_NONE         /* 0x0000    */
134 #define BTA_GATT_CLT_CONFIG_NOTIFICATION       GATT_CLT_CONFIG_NOTIFICATION /* 0x0001 */
135 #define BTA_GATT_CLT_CONFIG_INDICATION         GATT_CLT_CONFIG_INDICATION   /* 0x0002 */
136 typedef UINT16  tBTA_GATT_CLT_CHAR_CONFIG;
137 
138 /* characteristic descriptor: server configuration value
139 */
140 #define BTA_GATT_SVR_CONFIG_NONE            GATT_SVR_CONFIG_NONE            /* 0x0000 */
141 #define BTA_GATT_SVR_CONFIG_BROADCAST       GATT_SVR_CONFIG_BROADCAST       /*  0x0001 */
142 typedef UINT16  tBTA_GATT_SVR_CHAR_CONFIG;
143 
144 /* Characteristic Aggregate Format attribute value
145 */
146 #define BTA_GATT_AGGR_HANDLE_NUM_MAX        10
147 typedef struct
148 {
149     UINT8                   num_handle;
150     UINT16                  handle_list[BTA_GATT_AGGR_HANDLE_NUM_MAX];
151 } tBTA_GATT_CHAR_AGGRE;
152 typedef tGATT_VALID_RANGE           tBTA_GATT_VALID_RANGE;
153 
154 typedef struct
155 {
156     UINT16  len;
157     UINT8   *p_value;
158 }tBTA_GATT_UNFMT;
159 
160 #define BTA_GATT_MAX_ATTR_LEN       GATT_MAX_ATTR_LEN
161 
162 #define BTA_GATTC_TYPE_WRITE             GATT_WRITE
163 #define BTA_GATTC_TYPE_WRITE_NO_RSP      GATT_WRITE_NO_RSP
164 typedef UINT8 tBTA_GATTC_WRITE_TYPE;
165 
166 #define BTA_GATT_CONN_UNKNOWN                   0
167 #define BTA_GATT_CONN_L2C_FAILURE               GATT_CONN_L2C_FAILURE         /* general l2cap resource failure */
168 #define BTA_GATT_CONN_TIMEOUT                   GATT_CONN_TIMEOUT             /* 0x08 connection timeout  */
169 #define BTA_GATT_CONN_TERMINATE_PEER_USER       GATT_CONN_TERMINATE_PEER_USER /* 0x13 connection terminate by peer user  */
170 #define BTA_GATT_CONN_TERMINATE_LOCAL_HOST      GATT_CONN_TERMINATE_LOCAL_HOST/* 0x16 connectionterminated by local host  */
171 #define BTA_GATT_CONN_FAIL_ESTABLISH            GATT_CONN_FAIL_ESTABLISH      /* 0x03E connection fail to establish  */
172 #define BTA_GATT_CONN_LMP_TIMEOUT               GATT_CONN_LMP_TIMEOUT          /* 0x22 connection fail for LMP response tout */
173 #define BTA_GATT_CONN_CANCEL                    GATT_CONN_CANCEL               /* 0x0100 L2CAP connection cancelled  */
174 #define BTA_GATT_CONN_NONE                      0x0101                          /* 0x0101 no connection to cancel  */
175 typedef UINT16 tBTA_GATT_REASON;
176 
177 typedef struct
178 {
179     tBTA_GATT_ID        id;
180     BOOLEAN             is_primary;
181 }tBTA_GATT_SRVC_ID;
182 
183 typedef struct
184 {
185     tBTA_GATT_SRVC_ID       srvc_id;
186     tBTA_GATT_ID            char_id;
187 }tBTA_GATTC_CHAR_ID;
188 
189 typedef struct
190 {
191     tBTA_GATTC_CHAR_ID      char_id;
192     tBTA_GATT_ID            descr_id;
193 }tBTA_GATTC_CHAR_DESCR_ID;
194 
195 typedef struct
196 {
197     tBTA_GATT_SRVC_ID       srvc_id;
198     tBTA_GATT_SRVC_ID       incl_svc_id;
199 }tBTA_GATTC_INCL_SVC_ID;
200 
201 #define     BTA_GATT_TYPE_CHAR          0
202 #define     BTA_GATT_TYPE_CHAR_DESCR    1
203 typedef UINT8 tBTA_GATT_ID_TYPE;
204 
205 typedef struct
206 {
207     tBTA_GATT_ID_TYPE               id_type;
208     union
209     {
210         tBTA_GATTC_CHAR_ID         char_id;
211         tBTA_GATTC_CHAR_DESCR_ID   char_descr_id;
212 
213     }                       id_value;
214 }tBTA_GATTC_ATTR_ID;
215 
216 #define BTA_GATTC_MULTI_MAX    GATT_MAX_READ_MULTI_HANDLES
217 
218 typedef struct
219 {
220     UINT8                       num_attr;
221     tBTA_GATTC_ATTR_ID          id_list[BTA_GATTC_MULTI_MAX];
222 
223 }tBTA_GATTC_MULTI;
224 
225 #define BTA_GATT_AUTH_REQ_NONE           GATT_AUTH_REQ_NONE
226 #define BTA_GATT_AUTH_REQ_NO_MITM        GATT_AUTH_REQ_NO_MITM            /* unauthenticated encryption */
227 #define BTA_GATT_AUTH_REQ_MITM           GATT_AUTH_REQ_MITM               /* authenticated encryption */
228 #define BTA_GATT_AUTH_REQ_SIGNED_NO_MITM GATT_AUTH_REQ_SIGNED_NO_MITM
229 #define BTA_GATT_AUTH_REQ_SIGNED_MITM    GATT_AUTH_REQ_SIGNED_MITM
230 
231 typedef tGATT_AUTH_REQ tBTA_GATT_AUTH_REQ;
232 
233 enum
234 {
235     BTA_GATTC_ATTR_TYPE_INCL_SRVC,
236     BTA_GATTC_ATTR_TYPE_CHAR,
237     BTA_GATTC_ATTR_TYPE_CHAR_DESCR,
238     BTA_GATTC_ATTR_TYPE_SRVC
239 };
240 typedef UINT8 tBTA_GATTC_ATTR_TYPE;
241 
242 
243 typedef struct
244 {
245     tBT_UUID    uuid;
246     UINT16      s_handle;
247     UINT16      e_handle;   /* used for service only */
248     UINT8       attr_type;
249     UINT8       id;
250     UINT8       prop;       /* used when attribute type is characteristic */
251     BOOLEAN     is_primary; /* used when attribute type is service */
252 }tBTA_GATTC_NV_ATTR;
253 
254 /* callback data structure */
255 typedef struct
256 {
257     tBTA_GATT_STATUS    status;
258     tBTA_GATTC_IF       client_if;
259 // btla-specific ++
260     tBT_UUID            app_uuid;
261 // btla-specific --
262 }tBTA_GATTC_REG;
263 
264 typedef struct
265 {
266     UINT8                       num_pres_fmt;   /* number of presentation format aggregated*/
267     tBTA_GATTC_CHAR_DESCR_ID    pre_format[BTA_GATTC_MULTI_MAX];
268 }tBTA_GATT_CHAR_AGGRE_VALUE;
269 
270 typedef union
271 {
272     tBTA_GATT_CHAR_AGGRE_VALUE      aggre_value;
273     tBTA_GATT_UNFMT                 unformat;
274 
275 }tBTA_GATT_READ_VAL;
276 
277 typedef struct
278 {
279     UINT16              conn_id;
280     tBTA_GATT_STATUS    status;
281     tBTA_GATT_SRVC_ID   srvc_id;
282     tBTA_GATT_ID        char_id;
283     tBTA_GATT_ID        descr_type;
284     tBTA_GATT_READ_VAL  *p_value;
285 }tBTA_GATTC_READ;
286 
287 typedef struct
288 {
289     UINT16              conn_id;
290     tBTA_GATT_STATUS    status;
291     tBTA_GATT_SRVC_ID   srvc_id;
292     tBTA_GATT_ID        char_id;
293     tBTA_GATT_ID        descr_type;
294 }tBTA_GATTC_WRITE;
295 
296 typedef struct
297 {
298     UINT16              conn_id;
299     tBTA_GATT_STATUS    status;
300 }tBTA_GATTC_EXEC_CMPL;
301 
302 typedef struct
303 {
304     UINT16              conn_id;
305     tBTA_GATT_STATUS    status;
306 }tBTA_GATTC_SEARCH_CMPL;
307 
308 typedef struct
309 {
310     UINT16              conn_id;
311     tBTA_GATT_SRVC_ID   service_uuid;
312 }tBTA_GATTC_SRVC_RES;
313 
314 
315 typedef struct
316 {
317     tBTA_GATT_STATUS    status;
318     UINT16              conn_id;
319     tBTA_GATTC_IF       client_if;
320     BD_ADDR             remote_bda;
321 }tBTA_GATTC_OPEN;
322 
323 typedef struct
324 {
325     tBTA_GATT_STATUS    status;
326     UINT16              conn_id;
327     tBTA_GATTC_IF       client_if;
328     BD_ADDR             remote_bda;
329     tBTA_GATT_REASON    reason;         /* disconnect reason code, not useful when connect event is reported */
330 }tBTA_GATTC_CLOSE;
331 
332 typedef struct
333 {
334     UINT16              conn_id;
335     BD_ADDR             bda;
336     tBTA_GATTC_CHAR_ID  char_id;
337     tBTA_GATT_ID        descr_type;
338     UINT16              len;
339     UINT8               value[BTA_GATT_MAX_ATTR_LEN];
340     BOOLEAN             is_notify;
341 }tBTA_GATTC_NOTIFY;
342 
343 // btla-specific ++
344 typedef struct
345 {
346     tBTA_GATT_STATUS        status;
347     tBTA_GATTC_IF           client_if;
348     UINT16                  conn_id;
349     BD_ADDR                 remote_bda;
350 }tBTA_GATTC_OPEN_CLOSE;
351 // btla-specific --
352 
353 typedef struct
354 {
355     tBTA_GATTC_IF       client_if;
356     BD_ADDR             remote_bda;
357 }tBTA_GATTC_ENC_CMPL_CB;
358 
359 typedef union
360 {
361     tBTA_GATT_STATUS        status;
362 
363     tBTA_GATTC_SEARCH_CMPL  search_cmpl;          /* discovery complete */
364     tBTA_GATTC_SRVC_RES     srvc_res;          /* discovery result */
365     tBTA_GATTC_REG          reg_oper;              /* registration data */
366     tBTA_GATTC_OPEN         open;
367     tBTA_GATTC_CLOSE        close;
368     tBTA_GATTC_READ         read;             /* read attribute/descriptor data */
369     tBTA_GATTC_WRITE        write;            /* write complete data */
370     tBTA_GATTC_EXEC_CMPL    exec_cmpl;       /*  execute complete */
371     tBTA_GATTC_NOTIFY       notify;           /* notification/indication event data */
372     tBTA_GATTC_ENC_CMPL_CB  enc_cmpl;
373     BD_ADDR                 remote_bda;     /* service change event */
374 } tBTA_GATTC;
375 
376 /* GATTC enable callback function */
377 typedef void (tBTA_GATTC_ENB_CBACK)(tBTA_GATT_STATUS status);
378 
379 /* Client callback function */
380 typedef void (tBTA_GATTC_CBACK)(tBTA_GATTC_EVT event, tBTA_GATTC *p_data);
381 
382 
383 /* GATT Server Data Structure */
384 /* Server callback function events */
385 #define BTA_GATTS_REG_EVT                               0
386 #define BTA_GATTS_READ_EVT                              GATTS_REQ_TYPE_READ         /* 1 */
387 #define BTA_GATTS_WRITE_EVT                             GATTS_REQ_TYPE_WRITE        /* 2 */
388 #define BTA_GATTS_EXEC_WRITE_EVT                        GATTS_REQ_TYPE_WRITE_EXEC   /* 3 */
389 #define BTA_GATTS_MTU_EVT                               GATTS_REQ_TYPE_MTU          /* 4 */
390 #define BTA_GATTS_CONF_EVT                              GATTS_REQ_TYPE_CONF         /* 5 */
391 #define BTA_GATTS_DEREG_EVT                             6
392 #define BTA_GATTS_CREATE_EVT                            7
393 #define BTA_GATTS_ADD_INCL_SRVC_EVT                     8
394 #define BTA_GATTS_ADD_CHAR_EVT                          9
395 #define BTA_GATTS_ADD_CHAR_DESCR_EVT                    10
396 #define BTA_GATTS_DELELTE_EVT                           11
397 #define BTA_GATTS_START_EVT                             12
398 #define BTA_GATTS_STOP_EVT                              13
399 #define BTA_GATTS_CONNECT_EVT                           14
400 #define BTA_GATTS_DISCONNECT_EVT                        15
401 #define BTA_GATTS_OPEN_EVT                              16
402 #define BTA_GATTS_CANCEL_OPEN_EVT                       17
403 #define BTA_GATTS_CLOSE_EVT                             18
404 #define BTA_GATTS_LISTEN_EVT                            19
405 
406 typedef UINT8  tBTA_GATTS_EVT;
407 typedef tGATT_IF tBTA_GATTS_IF;
408 
409 /* Attribute permissions
410 */
411 #define BTA_GATT_PERM_READ              GATT_PERM_READ              /* bit 0 -  0x0001 */
412 #define BTA_GATT_PERM_READ_ENCRYPTED    GATT_PERM_READ_ENCRYPTED    /* bit 1 -  0x0002 */
413 #define BTA_GATT_PERM_READ_ENC_MITM     GATT_PERM_READ_ENC_MITM     /* bit 2 -  0x0004 */
414 #define BTA_GATT_PERM_WRITE             GATT_PERM_WRITE             /* bit 4 -  0x0010 */
415 #define BTA_GATT_PERM_WRITE_ENCRYPTED   GATT_PERM_WRITE_ENCRYPTED   /* bit 5 -  0x0020 */
416 #define BTA_GATT_PERM_WRITE_ENC_MITM    GATT_PERM_WRITE_ENC_MITM    /* bit 6 -  0x0040 */
417 #define BTA_GATT_PERM_WRITE_SIGNED      GATT_PERM_WRITE_SIGNED      /* bit 7 -  0x0080 */
418 #define BTA_GATT_PERM_WRITE_SIGNED_MITM GATT_PERM_WRITE_SIGNED_MITM /* bit 8 -  0x0100 */
419 typedef UINT16 tBTA_GATT_PERM;
420 
421 #define BTA_GATTS_INVALID_APP   0xff
422 
423 #define BTA_GATTS_INVALID_IF    0
424 
425 /* definition of characteristic properties */
426 #define BTA_GATT_CHAR_PROP_BIT_BROADCAST    GATT_CHAR_PROP_BIT_BROADCAST    /* 0x01 */
427 #define BTA_GATT_CHAR_PROP_BIT_READ         GATT_CHAR_PROP_BIT_READ    /* 0x02 */
428 #define BTA_GATT_CHAR_PROP_BIT_WRITE_NR     GATT_CHAR_PROP_BIT_WRITE_NR    /* 0x04 */
429 #define BTA_GATT_CHAR_PROP_BIT_WRITE        GATT_CHAR_PROP_BIT_WRITE       /* 0x08 */
430 #define BTA_GATT_CHAR_PROP_BIT_NOTIFY       GATT_CHAR_PROP_BIT_NOTIFY      /* 0x10 */
431 #define BTA_GATT_CHAR_PROP_BIT_INDICATE     GATT_CHAR_PROP_BIT_INDICATE    /* 0x20 */
432 #define BTA_GATT_CHAR_PROP_BIT_AUTH         GATT_CHAR_PROP_BIT_AUTH        /* 0x40 */
433 #define BTA_GATT_CHAR_PROP_BIT_EXT_PROP     GATT_CHAR_PROP_BIT_EXT_PROP    /* 0x80 */
434 typedef UINT8 tBTA_GATT_CHAR_PROP;
435 
436 #ifndef BTA_GATTC_CHAR_DESCR_MAX
437 #define BTA_GATTC_CHAR_DESCR_MAX        7
438 #endif
439 
440 /***********************  NV callback Data Definitions   **********************
441 */
442 typedef struct
443 {
444     tBT_UUID app_uuid128;
445     tBT_UUID svc_uuid;
446     UINT16   svc_inst;
447     UINT16   s_handle;
448     UINT16   e_handle;
449     BOOLEAN  is_primary;      /* primary service or secondary */
450 } tBTA_GATTS_HNDL_RANGE;
451 
452 #define BTA_GATTS_SRV_CHG_CMD_ADD_CLIENT       GATTS_SRV_CHG_CMD_ADD_CLIENT
453 #define BTA_GATTS_SRV_CHG_CMD_UPDATE_CLIENT    GATTS_SRV_CHG_CMD_UPDATE_CLIENT
454 #define BTA_GATTS_SRV_CHG_CMD_REMOVE_CLIENT    GATTS_SRV_CHG_CMD_REMOVE_CLIENT
455 #define BTA_GATTS_SRV_CHG_CMD_READ_NUM_CLENTS  GATTS_SRV_CHG_CMD_READ_NUM_CLENTS
456 #define BTA_GATTS_SRV_CHG_CMD_READ_CLENT       GATTS_SRV_CHG_CMD_READ_CLENT
457 typedef tGATTS_SRV_CHG_CMD tBTA_GATTS_SRV_CHG_CMD;
458 
459 typedef tGATTS_SRV_CHG     tBTA_GATTS_SRV_CHG;
460 typedef tGATTS_SRV_CHG_REQ tBTA_GATTS_SRV_CHG_REQ;
461 typedef tGATTS_SRV_CHG_RSP tBTA_GATTS_SRV_CHG_RSP;
462 
463 enum
464 {
465     BTA_GATT_TRANSPORT_LE,
466     BTA_GATT_TRANSPORT_BR_EDR,
467     BTA_GATT_TRANSPORT_LE_BR_EDR
468 };
469 typedef UINT8 tBTA_GATT_TRANSPORT;
470 
471 /* attribute value */
472 typedef tGATT_VALUE tBTA_GATT_VALUE;
473 
474 /* attribute response data */
475 typedef tGATTS_RSP tBTA_GATTS_RSP;
476 
477 /* attribute request data from the client */
478 #define BTA_GATT_PREP_WRITE_CANCEL   0x00
479 #define BTA_GATT_PREP_WRITE_EXEC     0x01
480 typedef tGATT_EXEC_FLAG tBTA_GATT_EXEC_FLAG;
481 
482 /* read request always based on UUID */
483 typedef tGATT_READ_REQ tTA_GBATT_READ_REQ;
484 
485 /* write request data */
486 typedef tGATT_WRITE_REQ tBTA_GATT_WRITE_REQ;
487 
488 /* callback data for server access request from client */
489 typedef tGATTS_DATA tBTA_GATTS_REQ_DATA;
490 
491 typedef struct
492 {
493     BD_ADDR             remote_bda;
494     UINT32              trans_id;
495     UINT16              conn_id;
496     tBTA_GATTS_REQ_DATA *p_data;
497 }tBTA_GATTS_REQ;
498 
499 typedef struct
500 {
501     tBTA_GATTS_IF       server_if;
502     tBTA_GATT_STATUS    status;
503 // btla-specific ++
504     tBT_UUID            uuid;
505 // btla-specific --
506 }tBTA_GATTS_REG_OPER;
507 
508 
509 typedef struct
510 {
511     tBTA_GATTS_IF       server_if;
512     UINT16              service_id;
513 // btla-specific ++
514     UINT16              svc_instance;
515     BOOLEAN             is_primary;
516     tBTA_GATT_STATUS    status;
517     tBT_UUID            uuid;
518 // btla-specific --
519 }tBTA_GATTS_CREATE;
520 
521 typedef struct
522 {
523     tBTA_GATTS_IF       server_if;
524     UINT16              service_id;
525     UINT16              attr_id;
526     tBTA_GATT_STATUS    status;
527 // btla-specific ++
528     tBT_UUID            char_uuid;
529 // btla-specific --
530 }tBTA_GATTS_ADD_RESULT;
531 
532 typedef struct
533 {
534     tBTA_GATTS_IF       server_if;
535     UINT16              service_id;
536     tBTA_GATT_STATUS    status;
537 }tBTA_GATTS_SRVC_OPER;
538 
539 
540 typedef struct
541 {
542     tBTA_GATTS_IF       server_if;
543     BD_ADDR             remote_bda;
544     UINT16              conn_id;
545     tBTA_GATT_REASON    reason; /* report disconnect reason */
546 }tBTA_GATTS_CONN;
547 
548 /* GATTS callback data */
549 typedef union
550 {
551     tBTA_GATTS_REG_OPER     reg_oper;
552     tBTA_GATTS_CREATE       create;
553     tBTA_GATTS_SRVC_OPER    srvc_oper;
554     tBTA_GATT_STATUS        status; /*  BTA_GATTS_CONF_EVT */
555     tBTA_GATTS_ADD_RESULT   add_result;  /* add included service: BTA_GATTS_ADD_INCL_SRVC_EVT
556                                            add char : BTA_GATTS_ADD_CHAR_EVT
557                                            add char descriptor: BTA_GATTS_ADD_CHAR_DESCR_EVT */
558     tBTA_GATTS_REQ          req_data;
559     tBTA_GATTS_CONN         conn;       /* BTA_GATTS_CONN_EVT */
560 
561 }tBTA_GATTS;
562 
563 /* GATTS enable callback function */
564 typedef void (tBTA_GATTS_ENB_CBACK)(tBTA_GATT_STATUS status);
565 
566 /* Server callback function */
567 typedef void (tBTA_GATTS_CBACK)(tBTA_GATTS_EVT event,  tBTA_GATTS *p_data);
568 
569 /*****************************************************************************
570 **  External Function Declarations
571 *****************************************************************************/
572 
573 #ifdef __cplusplus
574 extern "C"
575 {
576 #endif
577 
578 /**************************
579 **  Client Functions
580 ***************************/
581 
582 /*******************************************************************************
583 **
584 ** Function         BTA_GATTC_Disable
585 **
586 ** Description      This function is called to disable the GATTC module
587 **
588 ** Parameters       None.
589 **
590 ** Returns          None
591 **
592 *******************************************************************************/
593 BTA_API extern void BTA_GATTC_Disable(void);
594 
595 /*******************************************************************************
596 **
597 ** Function         BTA_GATTC_AppRegister
598 **
599 ** Description      This function is called to register application callbacks
600 **                    with BTA GATTC module.
601 **
602 ** Parameters       p_app_uuid - applicaiton UUID
603 **                  p_client_cb - pointer to the application callback function.
604 **
605 ** Returns          None
606 **
607 *******************************************************************************/
608 BTA_API extern void BTA_GATTC_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTC_CBACK *p_client_cb);
609 
610 /*******************************************************************************
611 **
612 ** Function         BTA_GATTC_AppDeregister
613 **
614 ** Description      This function is called to deregister an application
615 **                  from BTA GATTC module.
616 **
617 ** Parameters       client_if - client interface identifier.
618 **
619 ** Returns          None
620 **
621 *******************************************************************************/
622 BTA_API extern void BTA_GATTC_AppDeregister (tBTA_GATTC_IF client_if);
623 
624 /*******************************************************************************
625 **
626 ** Function         BTA_GATTC_Open
627 **
628 ** Description      Open a direct connection or add a background auto connection
629 **                  bd address
630 **
631 ** Parameters       client_if: server interface.
632 **                  remote_bda: remote device BD address.
633 **                  is_direct: direct connection or background auto connection
634 **
635 ** Returns          void
636 **
637 *******************************************************************************/
638 BTA_API extern void BTA_GATTC_Open(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct);
639 
640 /*******************************************************************************
641 **
642 ** Function         BTA_GATTC_CancelOpen
643 **
644 ** Description      Open a direct connection or add a background auto connection
645 **                  bd address
646 **
647 ** Parameters       client_if: server interface.
648 **                  remote_bda: remote device BD address.
649 **                  is_direct: direct connection or background auto connection
650 **
651 ** Returns          void
652 **
653 *******************************************************************************/
654 BTA_API extern void BTA_GATTC_CancelOpen(tBTA_GATTC_IF client_if, BD_ADDR remote_bda, BOOLEAN is_direct);
655 
656 /*******************************************************************************
657 **
658 ** Function         BTA_GATTC_Close
659 **
660 ** Description      Close a connection to a GATT server.
661 **
662 ** Parameters       conn_id: connectino ID to be closed.
663 **
664 ** Returns          void
665 **
666 *******************************************************************************/
667 BTA_API extern void BTA_GATTC_Close(UINT16 conn_id);
668 
669 /*******************************************************************************
670 **
671 ** Function         BTA_GATTC_ServiceSearchRequest
672 **
673 ** Description      This function is called to request a GATT service discovery
674 **                    on a GATT server. This function report service search result
675 **                  by a callback event, and followed by a service search complete
676 **                  event.
677 **
678 ** Parameters       conn_id: connection ID.
679 **                  p_srvc_uuid: a UUID of the service application is interested in.
680 **                              If Null, discover for all services.
681 **
682 ** Returns          None
683 **
684 *******************************************************************************/
685 BTA_API extern void BTA_GATTC_ServiceSearchRequest(UINT16 conn_id, tBT_UUID *p_srvc_uuid);
686 
687 /*******************************************************************************
688 **
689 ** Function         BTA_GATTC_GetFirstChar
690 **
691 ** Description      This function is called to find the first charatceristic of the
692 **                  service on the given server.
693 **
694 ** Parameters       conn_id: connection ID which identify the server.
695 **                  p_srvc_id: the service ID of which the characteristic is belonged to.
696 **                  p_char_uuid_cond: Characteristic UUID, if NULL find the first available
697 **                               characteristic.
698 **                  p_char_result: output parameter which will store the GATT
699 **                                  characteristic ID.
700 **                  p_property: output parameter to carry the characteristic property.
701 **
702 ** Returns          returns status.
703 **
704 *******************************************************************************/
705 BTA_API extern tBTA_GATT_STATUS  BTA_GATTC_GetFirstChar (UINT16              conn_id,
706                                                          tBTA_GATT_SRVC_ID   *p_srvc_id,
707                                                          tBT_UUID            *p_char_uuid_cond,
708                                                          tBTA_GATTC_CHAR_ID  *p_char_result,
709                                                          tBTA_GATT_CHAR_PROP *p_property);
710 
711 /*******************************************************************************
712 **
713 ** Function         BTA_GATTC_GetNextChar
714 **
715 ** Description      This function is called to find the next charatceristic of the
716 **                  service on the given server.
717 **
718 ** Parameters       conn_id: connection ID which identify the server.
719 **                  p_start_char_id: start the characteristic search from the next record
720 **                           after the one identified by char_id.
721 **                  p_char_uuid_cond: Characteristic UUID, if NULL find the first available
722 **                               characteristic.
723 **                  p_char_result: output parameter which will store the GATT
724 **                                  characteristic ID.
725 **                  p_property: output parameter, characteristic property.
726 **
727 ** Returns          returns status.
728 **
729 *******************************************************************************/
730 BTA_API extern tBTA_GATT_STATUS  BTA_GATTC_GetNextChar (UINT16 conn_id,
731                                                         tBTA_GATTC_CHAR_ID  *p_start_char_id,
732                                                         tBT_UUID            *p_char_uuid_cond,
733                                                         tBTA_GATTC_CHAR_ID  *p_char_result,
734                                                         tBTA_GATT_CHAR_PROP *p_property);
735 
736 /*******************************************************************************
737 **
738 ** Function         BTA_GATTC_GetFirstCharDescr
739 **
740 ** Description      This function is called to find the first charatceristic descriptor of the
741 **                  charatceristic on the given server.
742 **
743 ** Parameters       conn_id: connection ID which identify the server.
744 **                  p_char_id: the characteristic ID of which the descriptor is belonged to.
745 **                  p_descr_uuid_cond: Characteristic Descr UUID, if NULL find the first available
746 **                               characteristic.
747 **                  p_descr_result: output parameter which will store the GATT
748 **                                  characteristic descriptor ID.
749 **
750 ** Returns          returns status.
751 **
752 *******************************************************************************/
753 BTA_API extern tBTA_GATT_STATUS  BTA_GATTC_GetFirstCharDescr (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id,
754                                                 tBT_UUID *p_descr_uuid_cond,
755                                                 tBTA_GATTC_CHAR_DESCR_ID *p_descr_result);
756 
757 /*******************************************************************************
758 **
759 ** Function         BTA_GATTC_GetNextCharDescr
760 **
761 ** Description      This function is called to find the next charatceristic of the
762 **                  service on the given server.
763 **
764 ** Parameters       conn_id: connection ID which identify the server.
765 **                  p_start_descr_id: start the characteristic search from the next record
766 **                           after the one identified by p_start_descr_id.
767 **                  p_descr_uuid_cond: Characteristic descriptor UUID, if NULL find
768 **                               the first available characteristic descriptor.
769 **                  p_descr_result: output parameter which will store the GATT
770 **                                  characteristic descriptor ID.
771 **
772 ** Returns          returns status.
773 **
774 *******************************************************************************/
775 BTA_API extern tBTA_GATT_STATUS  BTA_GATTC_GetNextCharDescr (UINT16 conn_id,
776                                              tBTA_GATTC_CHAR_DESCR_ID *p_start_descr_id,
777                                              tBT_UUID           *p_descr_uuid_cond,
778                                              tBTA_GATTC_CHAR_DESCR_ID *p_descr_result);
779 
780 
781 /*******************************************************************************
782 **
783 ** Function         BTA_GATTC_GetFirstIncludedService
784 **
785 ** Description      This function is called to find the first included service of the
786 **                  service on the given server.
787 **
788 ** Parameters       conn_id: connection ID which identify the server.
789 **                  p_srvc_id: the service ID of which the included service is belonged to.
790 **                  p_uuid_cond: include service UUID, if NULL find the first available
791 **                               included service.
792 **                  p_result: output parameter which will store the GATT ID
793 **                              of the included service found.
794 **
795 ** Returns          returns status.
796 **
797 *******************************************************************************/
798 BTA_API extern tBTA_GATT_STATUS  BTA_GATTC_GetFirstIncludedService(UINT16 conn_id,
799                                                                    tBTA_GATT_SRVC_ID    *p_srvc_id,
800                                                                    tBT_UUID               *p_uuid_cond,
801                                                                    tBTA_GATTC_INCL_SVC_ID *p_result);
802 
803 /*******************************************************************************
804 **
805 ** Function         BTA_GATTC_GetNextIncludedService
806 **
807 ** Description      This function is called to find the next included service of the
808 **                  service on the given server.
809 **
810 ** Parameters       conn_id: connection ID which identify the server.
811 **                  p_start_id: start the search from the next record
812 **                                  after the one identified by p_start_id.
813 **                  p_uuid_cond: Included service UUID, if NULL find the first available
814 **                               included service.
815 **                  p_result: output parameter which will store the GATT ID
816 **                              of the included service found.
817 **
818 ** Returns          returns status.
819 **
820 *******************************************************************************/
821 BTA_API extern tBTA_GATT_STATUS  BTA_GATTC_GetNextIncludedService(UINT16 conn_id,
822                                                                   tBTA_GATTC_INCL_SVC_ID *p_start_id,
823                                                                   tBT_UUID             *p_uuid_cond,
824                                                                   tBTA_GATTC_INCL_SVC_ID *p_result);
825 
826 /*******************************************************************************
827 **
828 ** Function         BTA_GATTC_ReadCharacteristic
829 **
830 ** Description      This function is called to read a service's characteristics of
831 **                    the given characteritisc ID.
832 **
833 ** Parameters       conn_id - connectino ID.
834 **                    p_char_id - characteritic ID to read.
835 **
836 ** Returns          None
837 **
838 *******************************************************************************/
839 BTA_API extern void BTA_GATTC_ReadCharacteristic (UINT16 conn_id,
840                                                   tBTA_GATTC_CHAR_ID *p_char_id,
841                                                   tBTA_GATT_AUTH_REQ auth_req);
842 
843 /*******************************************************************************
844 **
845 ** Function         BTA_GATTC_ReadCharDescr
846 **
847 ** Description      This function is called to read a characteristics descriptor.
848 **
849 ** Parameters       conn_id - connection ID.
850 **                    p_char_descr_id - characteritic descriptor ID to read.
851 **
852 ** Returns          None
853 **
854 *******************************************************************************/
855 BTA_API extern void BTA_GATTC_ReadCharDescr (UINT16 conn_id,
856                                              tBTA_GATTC_CHAR_DESCR_ID *p_char_descr_id,
857                                              tBTA_GATT_AUTH_REQ auth_req);
858 
859 /*******************************************************************************
860 **
861 ** Function         BTA_GATTC_WriteCharValue
862 **
863 ** Description      This function is called to write characteristic value.
864 **
865 ** Parameters       conn_id - connection ID.
866 **                    p_char_id - characteristic ID to write.
867 **                    write_type - type of write.
868 **                  len: length of the data to be written.
869 **                  p_value - the value to be written.
870 **
871 ** Returns          None
872 **
873 *******************************************************************************/
874 BTA_API extern void BTA_GATTC_WriteCharValue (UINT16 conn_id,
875                                               tBTA_GATTC_CHAR_ID *p_char_id,
876                                               tBTA_GATTC_WRITE_TYPE  write_type,
877                                               UINT16 len,
878                                               UINT8 *p_value,
879                                               tBTA_GATT_AUTH_REQ auth_req);
880 
881 /*******************************************************************************
882 **
883 ** Function         BTA_GATTC_WriteCharDescr
884 **
885 ** Description      This function is called to write characteristic descriptor value.
886 **
887 ** Parameters       conn_id - connection ID
888 **                    p_char_descr_id - characteristic descriptor ID to write.
889 **                    write_type - type of write.
890 **                  p_value - the value to be written.
891 **
892 ** Returns          None
893 **
894 *******************************************************************************/
895 BTA_API extern void BTA_GATTC_WriteCharDescr (UINT16 conn_id,
896                                               tBTA_GATTC_CHAR_DESCR_ID *p_char_descr_id,
897                                               tBTA_GATTC_WRITE_TYPE  write_type,
898                                               tBTA_GATT_UNFMT   *p_data,
899                                               tBTA_GATT_AUTH_REQ auth_req);
900 
901 /*******************************************************************************
902 **
903 ** Function         BTA_GATTC_SendIndConfirm
904 **
905 ** Description      This function is called to send handle value confirmation.
906 **
907 ** Parameters       conn_id - connection ID.
908 **                    p_char_id - characteristic ID to confrim.
909 **
910 ** Returns          None
911 **
912 *******************************************************************************/
913 BTA_API extern void BTA_GATTC_SendIndConfirm (UINT16 conn_id, tBTA_GATTC_CHAR_ID *p_char_id);
914 
915 /*******************************************************************************
916 **
917 ** Function         BTA_GATTC_RegisterForNotifications
918 **
919 ** Description      This function is called to register for notification of a service.
920 **
921 ** Parameters       client_if   - client interface.
922 **                  remote_bda  - target GATT server.
923 **                  p_char_id   - pointer to GATT characteristic ID.
924 **
925 ** Returns          OK if registration succeed, otherwise failed.
926 **
927 *******************************************************************************/
928 BTA_API extern tBTA_GATT_STATUS BTA_GATTC_RegisterForNotifications (tBTA_GATTC_IF      client_if,
929                                                                     BD_ADDR            remote_bda,
930                                                                     tBTA_GATTC_CHAR_ID *p_char_id);
931 
932 
933 /*******************************************************************************
934 **
935 ** Function         BTA_GATTC_DeregisterForNotifications
936 **
937 ** Description      This function is called to de-register for notification of a servbice.
938 **
939 ** Parameters       client_if - client interface.
940 **                  remote_bda - target GATT server.
941 **                  p_char_id - pointer to a GATT characteristic ID.
942 **
943 ** Returns          OK if deregistration succeed, otherwise failed.
944 **
945 *******************************************************************************/
946 BTA_API extern tBTA_GATT_STATUS BTA_GATTC_DeregisterForNotifications (tBTA_GATTC_IF      client_if,
947                                                                       BD_ADDR            remote_bda,
948                                                                       tBTA_GATTC_CHAR_ID *p_char_id);
949 
950 /*******************************************************************************
951 **
952 ** Function         BTA_GATTC_PrepareWrite
953 **
954 ** Description      This function is called to prepare write a characteristic value.
955 **
956 ** Parameters       conn_id - connection ID.
957 **                    p_char_id - GATT characteritic ID of the service.
958 **                  offset - offset of the write value.
959 **                  len: length of the data to be written.
960 **                  p_value - the value to be written.
961 **
962 ** Returns          None
963 **
964 *******************************************************************************/
965 BTA_API extern void BTA_GATTC_PrepareWrite  (UINT16 conn_id,
966                                              tBTA_GATTC_CHAR_ID *p_char_id,
967                                              UINT16 offset,
968                                              UINT16 len,
969                                              UINT8 *p_value,
970                                              tBTA_GATT_AUTH_REQ auth_req);
971 
972 /*******************************************************************************
973 **
974 ** Function         BTA_GATTC_ExecuteWrite
975 **
976 ** Description      This function is called to execute write a prepare write sequence.
977 **
978 ** Parameters       conn_id - connection ID.
979 **                    is_execute - execute or cancel.
980 **
981 ** Returns          None
982 **
983 *******************************************************************************/
984 BTA_API extern void BTA_GATTC_ExecuteWrite  (UINT16 conn_id, BOOLEAN is_execute);
985 
986 /*******************************************************************************
987 **
988 ** Function         BTA_GATTC_ReadMultiple
989 **
990 ** Description      This function is called to read multiple characteristic or
991 **                  characteristic descriptors.
992 **
993 ** Parameters       conn_id - connectino ID.
994 **                    p_read_multi - read multiple parameters.
995 **
996 ** Returns          None
997 **
998 *******************************************************************************/
999 BTA_API extern void BTA_GATTC_ReadMultiple(UINT16 conn_id, tBTA_GATTC_MULTI *p_read_multi,
1000                                            tBTA_GATT_AUTH_REQ auth_req);
1001 
1002 
1003 /*******************************************************************************
1004 **
1005 ** Function         BTA_GATTC_Refresh
1006 **
1007 ** Description      Refresh the server cache of the remote device
1008 **
1009 ** Parameters       remote_bda: remote device BD address.
1010 **
1011 ** Returns          void
1012 **
1013 *******************************************************************************/
1014 BTA_API extern void BTA_GATTC_Refresh(BD_ADDR remote_bda);
1015 
1016 
1017 /*******************************************************************************
1018 **
1019 ** Function         BTA_GATTC_Listen
1020 **
1021 ** Description      Start advertisement to listen for connection request.
1022 **
1023 ** Parameters       client_if: server interface.
1024 **                  start: to start or stop listening for connection
1025 **                  remote_bda: remote device BD address, if listen to all device
1026 **                              use NULL.
1027 **
1028 ** Returns          void
1029 **
1030 *******************************************************************************/
1031 BTA_API extern void BTA_GATTC_Listen(tBTA_GATTC_IF client_if, BOOLEAN start, BD_ADDR_PTR target_bda);
1032 
1033 /*******************************************************************************
1034 **
1035 ** Function         BTA_GATTC_Broadcast
1036 **
1037 ** Description      Start broadcasting (non-connectable advertisements)
1038 **
1039 ** Parameters       client_if: client interface.
1040 **                  start: to start or stop listening for connection
1041 **
1042 ** Returns          void
1043 **
1044 *******************************************************************************/
1045 BTA_API extern void BTA_GATTC_Broadcast(tBTA_GATTC_IF client_if, BOOLEAN start);
1046 
1047 
1048 /*******************************************************************************
1049 **  BTA GATT Server API
1050 ********************************************************************************/
1051 
1052 /*******************************************************************************
1053 **
1054 ** Function         BTA_GATTS_Init
1055 **
1056 ** Description      This function is called to initalize GATTS module
1057 **
1058 ** Parameters       None
1059 **
1060 ** Returns          None
1061 **
1062 *******************************************************************************/
1063     BTA_API extern void BTA_GATTS_Init();
1064 
1065 /*******************************************************************************
1066 **
1067 ** Function         BTA_GATTS_Disable
1068 **
1069 ** Description      This function is called to disable GATTS module
1070 **
1071 ** Parameters       None.
1072 **
1073 ** Returns          None
1074 **
1075 *******************************************************************************/
1076     BTA_API extern void BTA_GATTS_Disable(void);
1077 
1078 /*******************************************************************************
1079 **
1080 ** Function         BTA_GATTS_AppRegister
1081 **
1082 ** Description      This function is called to register application callbacks
1083 **                    with BTA GATTS module.
1084 **
1085 ** Parameters       p_app_uuid - applicaiton UUID
1086 **                  p_cback - pointer to the application callback function.
1087 **
1088 ** Returns          None
1089 **
1090 *******************************************************************************/
1091     BTA_API extern void BTA_GATTS_AppRegister(tBT_UUID *p_app_uuid, tBTA_GATTS_CBACK *p_cback);
1092 
1093 
1094 /*******************************************************************************
1095 **
1096 ** Function         BTA_GATTS_AppDeregister
1097 **
1098 ** Description      De-register with BTA GATT Server.
1099 **
1100 ** Parameters       server_if: server interface
1101 **
1102 ** Returns          void
1103 **
1104 *******************************************************************************/
1105     BTA_API extern void BTA_GATTS_AppDeregister(tBTA_GATTS_IF server_if);
1106 
1107 /*******************************************************************************
1108 **
1109 ** Function         BTA_GATTS_CreateService
1110 **
1111 ** Description      Create a service. When service creation is done, a callback
1112 **                  event BTA_GATTS_CREATE_SRVC_EVT is called to report status
1113 **                  and service ID to the profile. The service ID obtained in
1114 **                  the callback function needs to be used when adding included
1115 **                  service and characteristics/descriptors into the service.
1116 **
1117 ** Parameters       server_if: server interface.
1118 **                  p_service_uuid: service UUID.
1119 **                  inst: instance ID number of this service.
1120 **                  num_handle: numble of handle requessted for this service.
1121 **                  is_primary: is this service a primary one or not.
1122 **
1123 ** Returns          void
1124 **
1125 *******************************************************************************/
1126     BTA_API extern void BTA_GATTS_CreateService(tBTA_GATTS_IF server_if, tBT_UUID *p_service_uuid,
1127                                                 UINT8 inst, UINT16 num_handle, BOOLEAN is_primary);
1128 
1129 /*******************************************************************************
1130 **
1131 ** Function         BTA_GATTS_AddIncludeService
1132 **
1133 ** Description      This function is called to add an included service. After included
1134 **                  service is included, a callback event BTA_GATTS_ADD_INCL_SRVC_EVT
1135 **                  is reported the included service ID.
1136 **
1137 ** Parameters       service_id: service ID to which this included service is to
1138 **                              be added.
1139 **                  included_service_id: the service ID to be included.
1140 **
1141 ** Returns          void
1142 **
1143 *******************************************************************************/
1144     BTA_API extern void BTA_GATTS_AddIncludeService(UINT16 service_id, UINT16 included_service_id);
1145 
1146 /*******************************************************************************
1147 **
1148 ** Function         BTA_GATTS_AddCharacteristic
1149 **
1150 ** Description      This function is called to add a characteristic into a service.
1151 **
1152 ** Parameters       service_id: service ID to which this included service is to
1153 **                              be added.
1154 **                  p_char_uuid : Characteristic UUID.
1155 **                  perm      : Characteristic value declaration attribute permission.
1156 **                  property  : Characteristic Properties
1157 **
1158 ** Returns          None
1159 **
1160 *******************************************************************************/
1161     BTA_API extern void BTA_GATTS_AddCharacteristic (UINT16 service_id,  tBT_UUID   *p_char_uuid,
1162                                                      tBTA_GATT_PERM perm, tBTA_GATT_CHAR_PROP property);
1163 
1164 /*******************************************************************************
1165 **
1166 ** Function         BTA_GATTS_AddCharDescriptor
1167 **
1168 ** Description      This function is called to add characteristic descriptor. When
1169 **                  it's done, a callback event BTA_GATTS_ADD_DESCR_EVT is called
1170 **                  to report the status and an ID number for this descriptor.
1171 **
1172 ** Parameters       service_id: service ID to which this charatceristic descriptor is to
1173 **                              be added.
1174 **                  perm: descriptor access permission.
1175 **                  p_descr_uuid: descriptor UUID.
1176 **                  p_descr_params: descriptor value if it's read only descriptor.
1177 **
1178 ** Returns          returns status.
1179 **
1180 *******************************************************************************/
1181     BTA_API extern void BTA_GATTS_AddCharDescriptor (UINT16 service_id,
1182                                                      tBTA_GATT_PERM perm,
1183                                                      tBT_UUID  * p_descr_uuid);
1184 
1185 /*******************************************************************************
1186 **
1187 ** Function         BTA_GATTS_DeleteService
1188 **
1189 ** Description      This function is called to delete a service. When this is done,
1190 **                  a callback event BTA_GATTS_DELETE_EVT is report with the status.
1191 **
1192 ** Parameters       service_id: service_id to be deleted.
1193 **
1194 ** Returns          returns none.
1195 **
1196 *******************************************************************************/
1197     BTA_API extern void  BTA_GATTS_DeleteService(UINT16 service_id);
1198 
1199 /*******************************************************************************
1200 **
1201 ** Function         BTA_GATTS_StartService
1202 **
1203 ** Description      This function is called to start a service.
1204 **
1205 ** Parameters       service_id: the service ID to be started.
1206 **                  sup_transport: supported trasnport.
1207 **
1208 ** Returns          None.
1209 **
1210 *******************************************************************************/
1211     BTA_API extern void  BTA_GATTS_StartService(UINT16 service_id, tBTA_GATT_TRANSPORT sup_transport);
1212 
1213 /*******************************************************************************
1214 **
1215 ** Function         BTA_GATTS_StopService
1216 **
1217 ** Description      This function is called to stop a service.
1218 **
1219 ** Parameters       service_id - service to be topped.
1220 **
1221 ** Returns          None
1222 **
1223 *******************************************************************************/
1224     BTA_API extern void BTA_GATTS_StopService(UINT16 service_id);
1225 
1226 /*******************************************************************************
1227 **
1228 ** Function         BTA_GATTS_HandleValueIndication
1229 **
1230 ** Description      This function is called to read a characteristics descriptor.
1231 **
1232 ** Parameters       conn_id - connection identifier.
1233 **					attr_id - attribute ID to indicate.
1234 **                  data_len - indicate data length.
1235 **                  p_data: data to indicate.
1236 **                  need_confirm - if this indication expects a confirmation or not.
1237 **
1238 ** Returns          None
1239 **
1240 *******************************************************************************/
1241     BTA_API extern void BTA_GATTS_HandleValueIndication (UINT16 conn_id, UINT16 attr_id,
1242                                                          UINT16 data_len,
1243                                                          UINT8 *p_data,
1244                                                          BOOLEAN need_confirm);
1245 
1246 /*******************************************************************************
1247 **
1248 ** Function         BTA_GATTS_SendRsp
1249 **
1250 ** Description      This function is called to send a response to a request.
1251 **
1252 ** Parameters       conn_id - connection identifier.
1253 **                  trans_id - transaction ID.
1254 **                  status - response status
1255 **                  p_msg - response data.
1256 **
1257 ** Returns          None
1258 **
1259 *******************************************************************************/
1260     BTA_API extern void BTA_GATTS_SendRsp (UINT16 conn_id, UINT32 trans_id,
1261                                            tBTA_GATT_STATUS status, tBTA_GATTS_RSP *p_msg);
1262 
1263 
1264 
1265 
1266 /*******************************************************************************
1267 **
1268 ** Function         BTA_GATTS_Open
1269 **
1270 ** Description      Open a direct open connection or add a background auto connection
1271 **                  bd address
1272 **
1273 ** Parameters       server_if: server interface.
1274 **                  remote_bda: remote device BD address.
1275 **                  is_direct: direct connection or background auto connection
1276 **
1277 ** Returns          void
1278 **
1279 *******************************************************************************/
1280     BTA_API extern void BTA_GATTS_Open(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, BOOLEAN is_direct);
1281 
1282 
1283 /*******************************************************************************
1284 **
1285 ** Function         BTA_GATTS_CancelOpen
1286 **
1287 ** Description      Cancel a direct open connection or remove a background auto connection
1288 **                  bd address
1289 **
1290 ** Parameters       server_if: server interface.
1291 **                  remote_bda: remote device BD address.
1292 **                  is_direct: direct connection or background auto connection
1293 **
1294 ** Returns          void
1295 **
1296 *******************************************************************************/
1297     BTA_API extern void BTA_GATTS_CancelOpen(tBTA_GATTS_IF server_if, BD_ADDR remote_bda, BOOLEAN is_direct);
1298 
1299 
1300 /*******************************************************************************
1301 **
1302 ** Function         BTA_GATTS_Close
1303 **
1304 ** Description      Close a connection  a remote device.
1305 **
1306 ** Parameters       conn_id: connectino ID to be closed.
1307 **
1308 ** Returns          void
1309 **
1310 *******************************************************************************/
1311     BTA_API extern void BTA_GATTS_Close(UINT16 conn_id);
1312 
1313 /*******************************************************************************
1314 **
1315 ** Function         BTA_GATTS_Listen
1316 **
1317 ** Description      Start advertisement to listen for connection request for a
1318 **                  GATT server
1319 **
1320 ** Parameters       server_if: server interface.
1321 **                  start: to start or stop listening for connection
1322 **                  remote_bda: remote device BD address, if listen to all device
1323 **                              use NULL.
1324 **
1325 ** Returns          void
1326 **
1327 *******************************************************************************/
1328     BTA_API extern void BTA_GATTS_Listen(tBTA_GATTS_IF server_if, BOOLEAN start,
1329                                         BD_ADDR_PTR target_bda);
1330 
1331 
1332 #ifdef __cplusplus
1333 
1334 }
1335 #endif
1336 
1337 
1338 #endif /* BTA_GATT_API_H */
1339 
1340