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