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