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