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