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