Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2009-2012 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 /******************************************************************************
     20  *
     21  *  This is the public interface file for the HeaLth device profile (HL)
     22  *  subsystem of BTA, Broadcom's Bluetooth application layer for mobile
     23  *  phones.
     24  *
     25  ******************************************************************************/
     26 #ifndef BTA_HL_API_H
     27 #define BTA_HL_API_H
     28 
     29 #include "bta_api.h"
     30 #include "btm_api.h"
     31 #include "mca_api.h"
     32 
     33 /*****************************************************************************
     34 **  Constants and data types
     35 *****************************************************************************/
     36 /* Extra Debug Code */
     37 #ifndef BTA_HL_DEBUG
     38 #define BTA_HL_DEBUG           TRUE
     39 #endif
     40 
     41 #ifndef BTA_HL_NUM_APPS
     42 #define BTA_HL_NUM_APPS                 12
     43 #endif
     44 
     45 #ifndef BTA_HL_NUM_MDEPS
     46 #define BTA_HL_NUM_MDEPS                13
     47 #endif
     48 
     49 #ifndef BTA_HL_NUM_MCLS
     50 #define BTA_HL_NUM_MCLS                 7
     51 #endif
     52 
     53 #ifndef BTA_HL_NUM_MDLS_PER_MDEP
     54 #define BTA_HL_NUM_MDLS_PER_MDEP        4
     55 #endif
     56 
     57 #ifndef BTA_HL_NUM_MDLS_PER_MCL
     58 #define BTA_HL_NUM_MDLS_PER_MCL         10
     59 #endif
     60 
     61 #ifndef BTA_HL_NUM_DATA_TYPES
     62 #define BTA_HL_NUM_DATA_TYPES            5   /* maximum number of data types can be supported
     63                                                 per MDEP ID */
     64 #endif
     65 
     66 #define BTA_HL_MCAP_RSP_TOUT            2    /* 2 seconds */
     67 
     68 #ifndef BTA_HL_CCH_NUM_FILTER_ELEMS
     69 #define BTA_HL_CCH_NUM_FILTER_ELEMS     3
     70 #endif
     71 
     72 #ifndef BTA_HL_NUM_SDP_CBACKS
     73 #define BTA_HL_NUM_SDP_CBACKS           7
     74 #endif
     75 
     76 #ifndef BTA_HL_NUM_SDP_RECS
     77 #define BTA_HL_NUM_SDP_RECS             5
     78 #endif
     79 
     80 #ifndef BTA_HL_NUM_SDP_MDEPS
     81 #define BTA_HL_NUM_SDP_MDEPS            12
     82 #endif
     83 
     84 #ifndef BTA_HL_NUM_SVC_ELEMS
     85 #define BTA_HL_NUM_SVC_ELEMS            2
     86 #endif
     87 
     88 #ifndef BTA_HL_NUM_PROTO_ELEMS
     89 #define BTA_HL_NUM_PROTO_ELEMS          2
     90 #endif
     91 
     92 #define BTA_HL_VERSION_01_00            0x0100
     93 #define BTA_HL_NUM_ADD_PROTO_LISTS      1
     94 #define BTA_HL_NUM_ADD_PROTO_ELEMS      2
     95 #define BTA_HL_MDEP_SEQ_SIZE            20
     96 #define BTA_HL_VAL_ARRY_SIZE            320
     97 
     98 #ifndef BTA_HL_NUM_MDL_CFGS
     99 #define BTA_HL_NUM_MDL_CFGS             16    /* numer of MDL cfg saved in the persistent memory*/
    100 #endif
    101 
    102 #define BTA_HL_NUM_TIMERS               7
    103 
    104 #define BTA_HL_CCH_RSP_TOUT             2000
    105 #define BTA_HL_LRG_POOL_ID              GKI_POOL_ID_7
    106 #define BTA_HL_MAX_TIME                 255
    107 #define BTA_HL_MIN_TIME                 1
    108 #define BTA_HL_INVALID_APP_HANDLE       0xFF
    109 #define BTA_HL_INVALID_MCL_HANDLE       0xFF
    110 #define BTA_HL_INVALID_MDL_HANDLE       0xFFFF
    111 
    112 #define BTA_HL_STATUS_OK                    0
    113 #define BTA_HL_STATUS_FAIL                  1   /* Used to pass all other errors */
    114 #define BTA_HL_STATUS_ABORTED               2
    115 #define BTA_HL_STATUS_NO_RESOURCE           3
    116 #define BTA_HL_STATUS_LAST_ITEM             4
    117 #define BTA_HL_STATUS_DUPLICATE_APP_ID      5
    118 #define BTA_HL_STATUS_INVALID_APP_HANDLE    6
    119 #define BTA_HL_STATUS_INVALID_MCL_HANDLE    7
    120 #define BTA_HL_STATUS_MCAP_REG_FAIL         8
    121 #define BTA_HL_STATUS_MDEP_CO_FAIL          9
    122 #define BTA_HL_STATUS_ECHO_CO_FAIL          10
    123 #define BTA_HL_STATUS_MDL_CFG_CO_FAIL       11
    124 #define BTA_HL_STATUS_SDP_NO_RESOURCE       12
    125 #define BTA_HL_STATUS_SDP_FAIL              13
    126 #define BTA_HL_STATUS_NO_CCH                14
    127 #define BTA_HL_STATUS_NO_MCL                15
    128 
    129 #define BTA_HL_STATUS_NO_FIRST_RELIABLE     17
    130 #define BTA_HL_STATUS_INVALID_DCH_CFG       18
    131 #define BTA_HL_STATUS_INVALID_MDL_HANDLE    19
    132 #define BTA_HL_STATUS_INVALID_BD_ADDR       20
    133 #define BTA_HL_STATUS_INVALID_RECONNECT_CFG 21
    134 #define BTA_HL_STATUS_ECHO_TEST_BUSY        22
    135 #define BTA_HL_STATUS_INVALID_LOCAL_MDEP_ID 23
    136 #define BTA_HL_STATUS_INVALID_MDL_ID        24
    137 #define BTA_HL_STATUS_NO_MDL_ID_FOUND       25
    138 #define BTA_HL_STATUS_DCH_BUSY              26  /* DCH is congested*/
    139 #define BTA_HL_STATUS_INVALID_CTRL_PSM      27
    140 #define BTA_HL_STATUS_DUPLICATE_CCH_OPEN    28
    141 
    142 typedef UINT8 tBTA_HL_STATUS;
    143 typedef tMCA_HANDLE tBTA_HL_APP_HANDLE;
    144 typedef tMCA_CL     tBTA_HL_MCL_HANDLE;
    145 typedef tMCA_DL     tBTA_HL_MDL_HANDLE;
    146 enum
    147 {
    148     BTA_HL_DEVICE_TYPE_SINK,
    149     BTA_HL_DEVICE_TYPE_SOURCE,
    150     BTA_HL_DEVICE_TYPE_DUAL
    151 };
    152 
    153 typedef UINT8 tBTA_HL_DEVICE_TYPE;
    154 
    155 
    156 
    157 #define BTA_HL_SDP_IEEE_11073_20601             0x01
    158 
    159 #define BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT          2 /* 0x02 */
    160 #define BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT        4 /* 0x04 */
    161 #define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE          0 /* 0x08 */
    162 #define BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER         0 /* 0x10 */
    163 
    164 #define BTA_HL_MCAP_SUP_PROC_MASK  (BTA_HL_MCAP_SUP_RECONNECT_MASK_INIT | \
    165                                     BTA_HL_MCAP_SUP_RECONNECT_MASK_ACCEPT | \
    166                                     BTA_HL_MCAP_SUP_CSP_MASK_SYNC_SLAVE | \
    167                                     BTA_HL_MCAP_SUP_CSP_MASK_SYNC_MASTER)
    168 #define BTA_HL_MDEP_ROLE_SOURCE         0x00
    169 #define BTA_HL_MDEP_ROLE_SINK           0x01
    170 
    171 typedef UINT8 tBTA_HL_MDEP_ROLE;
    172 
    173 #define BTA_HL_MDEP_ROLE_MASK_SOURCE    0x01     /* bit mask */
    174 #define BTA_HL_MDEP_ROLE_MASK_SINK      0x02
    175 typedef UINT8 tBTA_HL_MDEP_ROLE_MASK;
    176 
    177 
    178 #define BTA_HL_ECHO_TEST_MDEP_ID        0
    179 #define BTA_HL_ECHO_TEST_MDEP_CFG_IDX   0
    180 
    181 #define BTA_HL_INVALID_MDEP_ID     0xFF
    182 typedef tMCA_DEP tBTA_HL_MDEP_ID; /* 0 is for echo test,
    183                                    0x01-0x7F availave for use,
    184                                    0x80-0xFF reserved*/
    185 
    186 
    187 #define BTA_HL_DELETE_ALL_MDL_IDS   0xFFFF
    188 #define BTA_HL_MAX_MDL_VAL          0xFEFF
    189 typedef UINT16 tBTA_HL_MDL_ID;  /* 0x0000 reserved,
    190                                    0x0001-0xFEFF dynamic range,
    191                                    0xFF00-0xFFFE reserved,
    192                                    0xFFFF indicates all MDLs*/
    193 
    194 #define BTA_HL_MDEP_DESP_LEN       35
    195 
    196 #define BTA_HL_DCH_MODE_RELIABLE    0
    197 #define BTA_HL_DCH_MODE_STREAMING   1
    198 
    199 typedef UINT8 tBTA_HL_DCH_MODE;
    200 
    201 #define BTA_HL_DCH_CFG_NO_PREF      0
    202 #define BTA_HL_DCH_CFG_RELIABLE     1
    203 #define BTA_HL_DCH_CFG_STREAMING    2
    204 #define BTA_HL_DCH_CFG_UNKNOWN      0xFF
    205 
    206 typedef UINT8 tBTA_HL_DCH_CFG;
    207 
    208 /* The Default DCH CFG for the echo test when the device is a Source */
    209 #define BTA_HL_DEFAULT_ECHO_TEST_SRC_DCH_CFG BTA_HL_DCH_CFG_RELIABLE
    210 
    211 #define BTA_HL_DCH_CREATE_RSP_SUCCESS 0
    212 #define BTA_HL_DCH_CREATE_RSP_CFG_REJ 1
    213 
    214 typedef UINT8 tBTA_HL_DCH_CREATE_RSP;
    215 
    216 #define BTA_HL_MCAP_SUP_PROC_RECONNECT_INIT 0x02
    217 #define BTA_HL_MCAP_SUP_PROC_RECONNECT_APT  0x04
    218 #define BTA_HL_MCAP_SUP_PROC_CSP_SLAVE      0x08
    219 #define BTA_HL_MCAP_SUP_PROC_CSP_MASTER     0x10
    220 
    221 typedef UINT8 tBTA_HL_SUP_PROC_MASK;
    222 
    223 typedef struct
    224 {
    225     UINT16                  max_rx_apdu_size;  /* local rcv MTU */
    226     UINT16                  max_tx_apdu_size;  /* maximum TX APDU size*/
    227 } tBTA_HL_ECHO_CFG;
    228 
    229 
    230 typedef struct
    231 {
    232     UINT16                  data_type;
    233     UINT16                  max_rx_apdu_size;  /* local rcv MTU */
    234     UINT16                  max_tx_apdu_size;  /* maximum TX APDU size*/
    235     char                    desp[BTA_HL_MDEP_DESP_LEN+1];
    236 } tBTA_HL_MDEP_DATA_TYPE_CFG;
    237 
    238 
    239 typedef struct
    240 {
    241     tBTA_HL_MDEP_ROLE           mdep_role;
    242     UINT8                       num_of_mdep_data_types;
    243     tBTA_HL_MDEP_DATA_TYPE_CFG  data_cfg[BTA_HL_NUM_DATA_TYPES];
    244 } tBTA_HL_MDEP_CFG;
    245 
    246 typedef struct
    247 {
    248     tBTA_HL_MDEP_ID         mdep_id;  /* MDEP ID 0x01-0x7F */
    249     tBTA_HL_MDEP_CFG        mdep_cfg;
    250     UINT8                   ori_app_id;
    251 } tBTA_HL_MDEP;
    252 
    253 typedef struct
    254 {
    255     tBTA_HL_MDEP            mdep[BTA_HL_NUM_MDEPS];
    256     tBTA_HL_ECHO_CFG        echo_cfg;
    257     tBTA_HL_MDEP_ROLE_MASK  app_role_mask;
    258     BOOLEAN                 advertize_source_sdp;
    259     UINT8                   num_of_mdeps;
    260 } tBTA_HL_SUP_FEATURE;
    261 
    262 typedef struct
    263 {
    264     BOOLEAN                 delete_req_pending;
    265     tBTA_HL_MDL_ID          mdl_id;
    266     tBTA_HL_MCL_HANDLE      mcl_handle;
    267 } tBTA_HL_DELETE_MDL;
    268 
    269 typedef struct
    270 {
    271     UINT8                   time;
    272     UINT16                  mtu;
    273     tBTA_HL_MDL_ID          mdl_id;
    274     tBTA_HL_MDEP_ID         local_mdep_id;
    275     tBTA_HL_MDEP_ROLE       local_mdep_role;
    276     BOOLEAN                 active;     /* true if this item is in use */
    277     tBTA_HL_DCH_MODE        dch_mode;
    278     UINT8                   fcs;
    279     BD_ADDR                 peer_bd_addr;
    280 } tBTA_HL_MDL_CFG;
    281 
    282 
    283 /* Maximum number of supported feature list items (list_elem in tSDP_SUP_FEATURE_ELEM) */
    284 #define BTA_HL_NUM_SUP_FEATURE_ELEMS     13
    285 #define BTA_HL_SUP_FEATURE_SDP_BUF_SIZE  512
    286 /* This structure is used to add supported feature lists and find supported feature elements */
    287 typedef struct
    288 {
    289     UINT8       mdep_id;
    290     UINT16      data_type;
    291     tBTA_HL_MDEP_ROLE       mdep_role;
    292     char        *p_mdep_desp;
    293 } tBTA_HL_SUP_FEATURE_ELEM;
    294 
    295 typedef struct
    296 {
    297     UINT16                      num_elems;
    298     tBTA_HL_SUP_FEATURE_ELEM   list_elem[BTA_HL_NUM_SUP_FEATURE_ELEMS];
    299 } tBTA_HL_SUP_FEATURE_LIST_ELEM;
    300 
    301 
    302 typedef struct
    303 {
    304     tBTA_HL_DEVICE_TYPE     dev_type;           /* sink, source or dual roles */
    305     tBTA_SEC                sec_mask;           /* security mask for accepting conenction*/
    306     const char              *p_srv_name;        /* service name to be used in the SDP; null terminated*/
    307     const char              *p_srv_desp;        /* service description to be used in the SDP; null terminated */
    308     const char              *p_provider_name;   /* provide name to be used in the SDP; null terminated */
    309 } tBTA_HL_REG_PARAM;
    310 
    311 typedef struct
    312 {
    313     UINT16                  ctrl_psm;
    314     BD_ADDR                 bd_addr;           /* Address of peer device */
    315     tBTA_SEC                sec_mask;          /* security mask for initiating connection*/
    316 } tBTA_HL_CCH_OPEN_PARAM;
    317 
    318 
    319 typedef struct
    320 {
    321     UINT16                  ctrl_psm;
    322     tBTA_HL_MDEP_ID         local_mdep_id;     /* local MDEP ID */
    323     tBTA_HL_MDEP_ID         peer_mdep_id;      /* peer mdep id */
    324     tBTA_HL_DCH_CFG         local_cfg;
    325     tBTA_SEC                sec_mask;          /* security mask for initiating connection*/
    326 } tBTA_HL_DCH_OPEN_PARAM;
    327 
    328 
    329 typedef struct
    330 {
    331     UINT16                  ctrl_psm;
    332     tBTA_HL_MDL_ID          mdl_id;
    333 } tBTA_HL_DCH_RECONNECT_PARAM;
    334 
    335 
    336 typedef struct
    337 {
    338     UINT16                  ctrl_psm;
    339     UINT16                  pkt_size;
    340     tBTA_HL_DCH_CFG         local_cfg;
    341 } tBTA_HL_DCH_ECHO_TEST_PARAM;
    342 
    343 typedef struct
    344 {
    345     UINT16                  buf_size;
    346     UINT8                   p_buf;        /* buffer pointer */
    347 } tBTA_HL_DCH_BUF_INFO;
    348 
    349 typedef struct
    350 {
    351     tBTA_HL_MDEP_ID         local_mdep_id;  /* local MDEP ID */
    352     tBTA_HL_MDL_ID          mdl_id;
    353     tBTA_HL_DCH_CREATE_RSP  rsp_code;
    354     tBTA_HL_DCH_CFG         cfg_rsp;
    355 } tBTA_HL_DCH_CREATE_RSP_PARAM;
    356 
    357 typedef struct
    358 {
    359     UINT16              data_type;
    360     UINT8               mdep_id;
    361     tBTA_HL_MDEP_ROLE   mdep_role;
    362     char                mdep_desp[BTA_HL_MDEP_DESP_LEN+1];
    363 }tBTA_HL_SDP_MDEP_CFG;
    364 
    365 typedef struct
    366 {
    367     UINT16                  ctrl_psm;
    368     UINT16                  data_psm;
    369     UINT8                   mcap_sup_proc;
    370     UINT8                   num_mdeps; /* number of mdep elements from SDP*/
    371     char                    srv_name[BTA_SERVICE_NAME_LEN+1];
    372     char                    srv_desp[BTA_SERVICE_DESP_LEN+1];
    373     char                    provider_name[BTA_PROVIDER_NAME_LEN+1];
    374     tBTA_HL_SDP_MDEP_CFG    mdep_cfg[BTA_HL_NUM_SDP_MDEPS];
    375 } tBTA_HL_SDP_REC;
    376 
    377 typedef struct
    378 {
    379     UINT8                num_recs;
    380     tBTA_HL_SDP_REC      sdp_rec[BTA_HL_NUM_SDP_RECS];
    381 } tBTA_HL_SDP;
    382 
    383 /* HL control callback function events */
    384 enum
    385 {
    386     BTA_HL_CTRL_ENABLE_CFM_EVT            = 0,
    387     BTA_HL_CTRL_DISABLE_CFM_EVT
    388 };
    389 typedef UINT8 tBTA_HL_CTRL_EVT;
    390 /* Structure associated with BTA_HL_ENABLE_EVT
    391    BTA_HL_DISABLE_EVT */
    392 
    393 typedef struct
    394 {
    395     tBTA_HL_STATUS  status;
    396 } tBTA_HL_CTRL_ENABLE_DISABLE;
    397 
    398 typedef union
    399 {
    400     tBTA_HL_CTRL_ENABLE_DISABLE  enable_cfm;
    401     tBTA_HL_CTRL_ENABLE_DISABLE  disable_cfm;
    402 } tBTA_HL_CTRL;
    403 
    404 /* HL instance callback function events */
    405 enum
    406 {
    407     BTA_HL_REGISTER_CFM_EVT           =0,
    408     BTA_HL_DEREGISTER_CFM_EVT,
    409     BTA_HL_CCH_OPEN_IND_EVT,
    410     BTA_HL_CCH_OPEN_CFM_EVT,
    411     BTA_HL_CCH_CLOSE_IND_EVT,
    412     BTA_HL_CCH_CLOSE_CFM_EVT,
    413     BTA_HL_DCH_CREATE_IND_EVT,
    414     BTA_HL_DCH_OPEN_IND_EVT,
    415     BTA_HL_DCH_OPEN_CFM_EVT,
    416     BTA_HL_DCH_CLOSE_IND_EVT,
    417     BTA_HL_DCH_CLOSE_CFM_EVT,
    418     BTA_HL_DCH_RECONNECT_IND_EVT,
    419     BTA_HL_DCH_RECONNECT_CFM_EVT,
    420 
    421     BTA_HL_DCH_ABORT_IND_EVT,
    422     BTA_HL_DCH_ABORT_CFM_EVT,
    423     BTA_HL_DELETE_MDL_IND_EVT,
    424     BTA_HL_DELETE_MDL_CFM_EVT,
    425     BTA_HL_DCH_SEND_DATA_CFM_EVT,
    426     BTA_HL_DCH_RCV_DATA_IND_EVT,
    427     BTA_HL_CONG_CHG_IND_EVT,
    428     BTA_HL_DCH_ECHO_TEST_CFM_EVT,
    429     BTA_HL_SDP_QUERY_CFM_EVT,
    430     BTA_HL_SDP_INFO_IND_EVT
    431 };
    432 typedef UINT8 tBTA_HL_EVT;
    433 
    434 
    435 typedef struct
    436 {
    437     tBTA_HL_STATUS          status;        /* start status */
    438     UINT8                   app_id;
    439     tBTA_HL_APP_HANDLE      app_handle;
    440 } tBTA_HL_REGISTER_CFM;
    441 
    442 
    443 typedef struct
    444 {
    445     tBTA_HL_STATUS          status;        /* start status */
    446     UINT8                   app_id;
    447     tBTA_HL_APP_HANDLE      app_handle;
    448 } tBTA_HL_DEREGISTER_CFM;
    449 
    450 
    451 typedef struct
    452 {
    453     BOOLEAN                 intentional;
    454     tBTA_HL_MCL_HANDLE      mcl_handle;
    455     tBTA_HL_APP_HANDLE      app_handle;
    456 } tBTA_HL_CCH_CLOSE_IND;
    457 
    458 
    459 typedef struct
    460 {
    461     tBTA_HL_MCL_HANDLE      mcl_handle;
    462     tBTA_HL_APP_HANDLE      app_handle;
    463 } tBTA_HL_MCL_IND;
    464 
    465 typedef struct
    466 {
    467     tBTA_HL_STATUS          status;             /* connection status */
    468     tBTA_HL_MCL_HANDLE      mcl_handle;
    469     tBTA_HL_APP_HANDLE      app_handle;
    470 } tBTA_HL_MCL_CFM;
    471 
    472 typedef struct
    473 {
    474     tBTA_HL_MCL_HANDLE      mcl_handle;
    475     tBTA_HL_APP_HANDLE      app_handle;
    476     BD_ADDR                 bd_addr; /* address of peer device */
    477 } tBTA_HL_CCH_OPEN_IND;
    478 
    479 typedef struct
    480 {
    481     tBTA_HL_STATUS          status;             /* connection status */
    482     UINT8                   app_id;
    483     tBTA_HL_MCL_HANDLE      mcl_handle;
    484     tBTA_HL_APP_HANDLE      app_handle;
    485     BD_ADDR                 bd_addr;            /* address of peer device */
    486 } tBTA_HL_CCH_OPEN_CFM;
    487 
    488 typedef struct
    489 {
    490     tBTA_HL_MCL_HANDLE      mcl_handle;
    491     tBTA_HL_APP_HANDLE      app_handle;
    492     tBTA_HL_MDEP_ID         local_mdep_id;
    493     tBTA_HL_MDL_ID          mdl_id;             /* MCAP data link ID for this
    494                                                    data channel conenction    */
    495     tBTA_HL_DCH_CFG         cfg;                /* dch cfg requested by the peer device */
    496     BD_ADDR                 bd_addr; /* address of peer device */
    497 
    498 } tBTA_HL_DCH_CREATE_IND;
    499 
    500 typedef struct
    501 {
    502     tBTA_HL_MDL_HANDLE      mdl_handle;
    503     tBTA_HL_MCL_HANDLE      mcl_handle;
    504     tBTA_HL_APP_HANDLE      app_handle;
    505     tBTA_HL_MDEP_ID         local_mdep_id;
    506     tBTA_HL_MDL_ID          mdl_id;             /* MCAP data link ID for this
    507                                                    data channel conenction    */
    508     tBTA_HL_DCH_MODE        dch_mode;           /* data channel mode - reliable or streaming*/
    509 
    510     BOOLEAN                 first_reliable;  /* whether this is the first reliable data channel */
    511     UINT16                  mtu;
    512 } tBTA_HL_DCH_OPEN_IND;
    513 
    514 typedef struct
    515 {
    516     tBTA_HL_STATUS          status;             /* connection status */
    517     tBTA_HL_MDL_HANDLE      mdl_handle;
    518     tBTA_HL_MCL_HANDLE      mcl_handle;
    519     tBTA_HL_APP_HANDLE      app_handle;
    520     tBTA_HL_MDEP_ID         local_mdep_id;
    521     tBTA_HL_MDL_ID          mdl_id;             /* MCAP data link ID for this
    522                                                    data channel conenction    */
    523     tBTA_HL_DCH_MODE        dch_mode;           /* data channel mode - reliable or streaming*/
    524     BOOLEAN                 first_reliable;     /* whether this is the first reliable data channel */
    525     UINT16                  mtu;
    526 } tBTA_HL_DCH_OPEN_CFM;
    527 
    528 
    529 typedef struct
    530 {
    531     BOOLEAN                 intentional;
    532     tBTA_HL_MDL_HANDLE      mdl_handle;
    533     tBTA_HL_MCL_HANDLE      mcl_handle;
    534     tBTA_HL_APP_HANDLE      app_handle;
    535 } tBTA_HL_DCH_CLOSE_IND;
    536 
    537 
    538 typedef struct
    539 {
    540     tBTA_HL_MDL_HANDLE      mdl_handle;
    541     tBTA_HL_MCL_HANDLE      mcl_handle;
    542     tBTA_HL_APP_HANDLE      app_handle;
    543 } tBTA_HL_MDL_IND;
    544 
    545 typedef struct
    546 {
    547     tBTA_HL_STATUS          status;
    548     tBTA_HL_MDL_HANDLE      mdl_handle;
    549     tBTA_HL_MCL_HANDLE      mcl_handle;
    550     tBTA_HL_APP_HANDLE      app_handle;
    551 } tBTA_HL_MDL_CFM;
    552 
    553 typedef struct
    554 {
    555     tBTA_HL_MCL_HANDLE      mcl_handle;
    556     tBTA_HL_APP_HANDLE      app_handle;
    557     tBTA_HL_MDL_ID          mdl_id;
    558 } tBTA_HL_DELETE_MDL_IND;
    559 
    560 typedef struct
    561 {
    562     tBTA_HL_STATUS          status;
    563     tBTA_HL_MCL_HANDLE      mcl_handle;
    564     tBTA_HL_APP_HANDLE      app_handle;
    565     tBTA_HL_MDL_ID          mdl_id;
    566 } tBTA_HL_DELETE_MDL_CFM;
    567 
    568 typedef struct
    569 {
    570     tBTA_HL_MDL_HANDLE      mdl_handle;
    571     tBTA_HL_MCL_HANDLE      mcl_handle;
    572     tBTA_HL_APP_HANDLE      app_handle;
    573     BOOLEAN                 cong;
    574 } tBTA_HL_DCH_CONG_IND;
    575 
    576 typedef struct
    577 {
    578     tBTA_HL_APP_HANDLE      app_handle;
    579     UINT16                  ctrl_psm;
    580     UINT16                  data_psm;
    581     UINT8                   data_x_spec;
    582     UINT8                   mcap_sup_procs;
    583 } tBTA_HL_SDP_INFO_IND;
    584 
    585 typedef struct
    586 {
    587     tBTA_HL_STATUS          status;
    588     UINT8                   app_id;
    589     tBTA_HL_APP_HANDLE      app_handle;
    590     BD_ADDR                 bd_addr;
    591     tBTA_HL_SDP             *p_sdp;
    592 } tBTA_HL_SDP_QUERY_CFM;
    593 
    594 typedef union
    595 {
    596     tBTA_HL_REGISTER_CFM        reg_cfm;
    597     tBTA_HL_DEREGISTER_CFM      dereg_cfm;
    598     tBTA_HL_CCH_OPEN_IND        cch_open_ind;
    599     tBTA_HL_CCH_OPEN_CFM        cch_open_cfm;
    600     tBTA_HL_CCH_CLOSE_IND       cch_close_ind;
    601     tBTA_HL_MCL_CFM             cch_close_cfm;
    602     tBTA_HL_DCH_CREATE_IND      dch_create_ind;
    603     tBTA_HL_DCH_OPEN_IND        dch_open_ind;
    604     tBTA_HL_DCH_OPEN_CFM        dch_open_cfm;
    605     tBTA_HL_DCH_CLOSE_IND       dch_close_ind;
    606     tBTA_HL_MDL_CFM             dch_close_cfm;
    607     tBTA_HL_DCH_OPEN_IND        dch_reconnect_ind;
    608     tBTA_HL_DCH_OPEN_CFM        dch_reconnect_cfm;
    609     tBTA_HL_MCL_IND             dch_abort_ind;
    610     tBTA_HL_MCL_CFM             dch_abort_cfm;
    611     tBTA_HL_DELETE_MDL_IND      delete_mdl_ind;
    612     tBTA_HL_DELETE_MDL_CFM      delete_mdl_cfm;
    613     tBTA_HL_MDL_CFM             dch_send_data_cfm;
    614     tBTA_HL_MDL_IND             dch_rcv_data_ind;
    615     tBTA_HL_DCH_CONG_IND        dch_cong_ind;
    616     tBTA_HL_MCL_CFM             echo_test_cfm;
    617     tBTA_HL_SDP_QUERY_CFM       sdp_query_cfm;
    618     tBTA_HL_SDP_INFO_IND        sdp_info_ind;
    619 
    620 } tBTA_HL;
    621 
    622 /* HL callback functions */
    623 typedef void tBTA_HL_CTRL_CBACK(tBTA_HL_CTRL_EVT event, tBTA_HL_CTRL *p_data);
    624 typedef void tBTA_HL_CBACK(tBTA_HL_EVT event, tBTA_HL *p_data);
    625 
    626 
    627 /*****************************************************************************
    628 **  External Function Declarations
    629 *****************************************************************************/
    630 #ifdef __cplusplus
    631 extern "C"
    632 {
    633 #endif
    634 
    635 /**************************
    636 **  API Functions
    637 ***************************/
    638 
    639 /*******************************************************************************
    640 **
    641 ** Function         BTA_HlEnable
    642 **
    643 ** Description      Enable the HL subsystems.  This function must be
    644 **                  called before any other functions in the HL API are called.
    645 **                  When the enable operation is completed the callback function
    646 **                  will be called with an BTA_HL_CTRL_ENABLE_CFM_EVT event.
    647 **
    648 ** Parameters       p_cback - HL event call back function
    649 **
    650 ** Returns          void
    651 **
    652 *******************************************************************************/
    653 extern void BTA_HlEnable(tBTA_HL_CTRL_CBACK *p_ctrl_cback);
    654 /*******************************************************************************
    655 **
    656 ** Function         BTA_HlDisable
    657 **
    658 ** Description     Disable the HL subsystem.
    659 **
    660 ** Returns          void
    661 **
    662 *******************************************************************************/
    663 extern void BTA_HlDisable(void);
    664 
    665 /*******************************************************************************
    666 **
    667 ** Function         BTA_HlUpdate
    668 **
    669 ** Description      Register an HDP application
    670 **
    671 ** Parameters       app_id        - Application ID
    672 **                  p_reg_param   - non-platform related parameters for the
    673 **                                  HDP application
    674 **                  p_cback       - HL event callback fucntion
    675 **
    676 ** Returns          void
    677 **
    678 *******************************************************************************/
    679 extern void BTA_HlUpdate(UINT8  app_id,
    680                          tBTA_HL_REG_PARAM *p_reg_param, BOOLEAN is_register,
    681                          tBTA_HL_CBACK *p_cback);
    682 
    683 /*******************************************************************************
    684 **
    685 ** Function         BTA_HlRegister
    686 **
    687 ** Description      Register a HDP application
    688 **
    689 **
    690 ** Parameters       app_id        - hdp application ID
    691 **                  p_reg_param   - non-platform related parameters for the
    692 **                                  HDP application
    693 **                  p_cback       - HL event callback fucntion
    694 **
    695 ** Returns          void
    696 **
    697 *******************************************************************************/
    698 extern void BTA_HlRegister(UINT8  app_id,
    699                            tBTA_HL_REG_PARAM *p_reg_param,
    700                            tBTA_HL_CBACK *p_cback);
    701 
    702 /*******************************************************************************
    703 **
    704 ** Function         BTA_HlDeregister
    705 **
    706 ** Description      Deregister an HDP application
    707 **
    708 ** Parameters       app_handle - Application handle
    709 **
    710 ** Returns         void
    711 **
    712 *******************************************************************************/
    713 extern void BTA_HlDeregister(UINT8 app_id,tBTA_HL_APP_HANDLE app_handle);
    714 
    715 /*******************************************************************************
    716 **
    717 ** Function         BTA_HlCchOpen
    718 **
    719 ** Description      Open a Control channel connection with the specified BD address
    720 **                  and the control PSM value is used to select which
    721 **                  HDP insatnce should be used in case the peer device support
    722 **                  multiple HDP instances.
    723 **
    724 **
    725 ** Parameters       app_handle - Application Handle
    726 **                  p_open_param - parameters for opening a control channel
    727 **
    728 ** Returns          void
    729 **
    730 **                  Note: If the control PSM value is zero then the first HDP
    731 **                        instance is used for the control channel setup
    732 *******************************************************************************/
    733 extern void BTA_HlCchOpen(UINT8 app_id, tBTA_HL_APP_HANDLE app_handle,
    734                           tBTA_HL_CCH_OPEN_PARAM *p_open_param);
    735 
    736 /*******************************************************************************
    737 **
    738 ** Function         BTA_HlCchClose
    739 **
    740 ** Description      Close a Control channel connection with the specified MCL
    741 **                  handle
    742 **
    743 ** Parameters       mcl_handle - MCL handle
    744 **
    745 ** Returns          void
    746 **
    747 *******************************************************************************/
    748 extern  void BTA_HlCchClose(tBTA_HL_MCL_HANDLE mcl_handle);
    749 
    750 /*******************************************************************************
    751 **
    752 ** Function         BTA_HlDchOpen
    753 **
    754 ** Description      Open a data channel connection with the specified DCH parameters
    755 **
    756 ** Parameters       mcl_handle - MCL handle
    757 **                  p_open_param - parameters for opening a data channel
    758 **
    759 ** Returns          void
    760 **
    761 *******************************************************************************/
    762 extern  void BTA_HlDchOpen(tBTA_HL_MCL_HANDLE mcl_handle,
    763                            tBTA_HL_DCH_OPEN_PARAM *p_open_param);
    764 /*******************************************************************************
    765 **
    766 ** Function         BTA_HlDchReconnect
    767 **
    768 ** Description      Reconnect a data channel with the specified MDL_ID
    769 **
    770 ** Parameters       mcl_handle      - MCL handle
    771 *8                  p_recon_param   - parameters for reconnecting a data channel
    772 **
    773 ** Returns          void
    774 **
    775 *******************************************************************************/
    776 extern void BTA_HlDchReconnect(tBTA_HL_MCL_HANDLE mcl_handle,
    777                                tBTA_HL_DCH_RECONNECT_PARAM *p_recon_param);
    778 /*******************************************************************************
    779 **
    780 ** Function         BTA_HlDchClose
    781 **
    782 ** Description      Close a data channel with the specified MDL handle
    783 **
    784 ** Parameters       mdl_handle  - MDL handle
    785 **
    786 ** Returns          void
    787 **
    788 *******************************************************************************/
    789 extern void BTA_HlDchClose(tBTA_HL_MDL_HANDLE mdl_handle);
    790 
    791 /*******************************************************************************
    792 **
    793 ** Function         BTA_HlDchAbort
    794 **
    795 ** Description      Abort the current data channel setup with the specified MCL
    796 **                  handle
    797 **
    798 ** Parameters       mcl_handle  - MCL handle
    799 **
    800 **
    801 ** Returns          void
    802 **
    803 *******************************************************************************/
    804 extern void BTA_HlDchAbort(tBTA_HL_MCL_HANDLE mcl_handle);
    805 
    806 /*******************************************************************************
    807 **
    808 ** Function         BTA_HlSendData
    809 **
    810 ** Description      Send an APDU to the peer device
    811 **
    812 ** Parameters       mdl_handle  - MDL handle
    813 **                  pkt_size    - size of the data packet to be sent
    814 **
    815 ** Returns          void
    816 **
    817 *******************************************************************************/
    818 extern void BTA_HlSendData(tBTA_HL_MDL_HANDLE mdl_handle,
    819                            UINT16           pkt_size);
    820 
    821 /*******************************************************************************
    822 **
    823 ** Function         BTA_HlDeleteMdl
    824 **
    825 ** Description      Delete the specified MDL_ID within the specified MCL handle
    826 **
    827 ** Parameters       mcl_handle  - MCL handle
    828 **                  mdl_id      - MDL ID
    829 **
    830 ** Returns          void
    831 **
    832 **                  note: If mdl_id = 0xFFFF then this means to delete all MDLs
    833 **                        and this value can only be used with DeleteMdl request only
    834 **                        not other requests
    835 **
    836 *******************************************************************************/
    837 extern void BTA_HlDeleteMdl(tBTA_HL_MCL_HANDLE mcl_handle,
    838                             tBTA_HL_MDL_ID mdl_id );
    839 
    840 /*******************************************************************************
    841 **
    842 ** Function         BTA_HlDchEchoTest
    843 **
    844 ** Description      Initiate an echo test with the specified MCL handle
    845 **
    846 ** Parameters       mcl_handle           - MCL handle
    847 *8                  p_echo_test_param   -  parameters for echo testing
    848 **
    849 ** Returns          void
    850 **
    851 *******************************************************************************/
    852 extern void BTA_HlDchEchoTest( tBTA_HL_MCL_HANDLE  mcl_handle,
    853                                tBTA_HL_DCH_ECHO_TEST_PARAM *p_echo_test_param);
    854 
    855 /*******************************************************************************
    856 **
    857 ** Function         BTA_HlSdpQuery
    858 **
    859 ** Description      SDP query request for the specified BD address
    860 **
    861 ** Parameters       app_id
    862                         app_handle      - application handle
    863 **                  bd_addr         - BD address
    864 **
    865 ** Returns          void
    866 **
    867 *******************************************************************************/
    868 extern  void BTA_HlSdpQuery(UINT8  app_id,tBTA_HL_APP_HANDLE app_handle,
    869                             BD_ADDR bd_addr);
    870 
    871 /*******************************************************************************
    872 **
    873 ** Function         BTA_HlDchCreateMdlRsp
    874 **
    875 ** Description      Set the Response and configuration values for the Create MDL
    876 **                  request
    877 **
    878 ** Parameters       mcl_handle  - MCL handle
    879 **                  p_rsp_param - parameters specified whether the request should
    880 **                                be accepted or not and if it should be accepted
    881 **                                then it also specified the configuration response
    882 **                                value
    883 **
    884 ** Returns          void
    885 **
    886 *******************************************************************************/
    887 extern void BTA_HlDchCreateRsp(tBTA_HL_MCL_HANDLE mcl_handle,
    888                                tBTA_HL_DCH_CREATE_RSP_PARAM *p_rsp_param);
    889 
    890 
    891 
    892 #ifdef __cplusplus
    893 
    894 }
    895 #endif
    896 
    897 #endif /* BTA_HL_API_H */
    898