Home | History | Annotate | Download | only in hl
      1 /******************************************************************************
      2  *
      3  *  Copyright 1998-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 private file for the message access equipment (MSE)
     22  *  subsystem.
     23  *
     24  ******************************************************************************/
     25 #ifndef BTA_HL_INT_H
     26 #define BTA_HL_INT_H
     27 
     28 #include "bt_target.h"
     29 #include "bta_hl_api.h"
     30 #include "bta_hl_co.h"
     31 #include "bta_sys.h"
     32 #include "l2cdefs.h"
     33 
     34 typedef uint16_t(tBTA_HL_ALLOCATE_PSM)(void);
     35 
     36 /*****************************************************************************
     37  *  Constants and data types
     38  ****************************************************************************/
     39 
     40 #ifndef BTA_HL_DISC_SIZE
     41 #define BTA_HL_DISC_SIZE 1600
     42 #endif
     43 #define BTA_HL_NUM_SRCH_ATTR 10
     44 #define BTA_HL_MIN_SDP_MDEP_LEN 7
     45 
     46 /* L2CAP defualt parameters */
     47 #define BTA_HL_L2C_TX_WIN_SIZE 10
     48 #define BTA_HL_L2C_MAX_TRANSMIT 32
     49 #define BTA_HL_L2C_RTRANS_TOUT 2000
     50 #define BTA_HL_L2C_MON_TOUT 12000
     51 #define BTA_HL_L2C_MPS 1017
     52 
     53 /* L2CAP FCS setting*/
     54 #define BTA_HL_MCA_USE_FCS MCA_FCS_USE
     55 #define BTA_HL_MCA_NO_FCS MCA_FCS_BYPASS
     56 #define BTA_HL_L2C_USE_FCS 1
     57 #define BTA_HL_L2C_NO_FCS 0
     58 #define BTA_HL_DEFAULT_SOURCE_FCS BTA_HL_L2C_USE_FCS
     59 #define BTA_HL_MCA_FCS_USE_MASK MCA_FCS_USE_MASK
     60 
     61 /* SDP Operations */
     62 #define BTA_HL_SDP_OP_NONE 0
     63 #define BTA_HL_SDP_OP_CCH_INIT 1
     64 #define BTA_HL_SDP_OP_DCH_OPEN_INIT 2
     65 #define BTA_HL_SDP_OP_DCH_RECONNECT_INIT 3
     66 #define BTA_HL_SDP_OP_SDP_QUERY_NEW 4
     67 #define BTA_HL_SDP_OP_SDP_QUERY_CURRENT 5
     68 
     69 typedef uint8_t tBTA_HL_SDP_OPER;
     70 
     71 /* CCH Operations */
     72 #define BTA_HL_CCH_OP_NONE 0
     73 #define BTA_HL_CCH_OP_LOCAL_OPEN 1
     74 #define BTA_HL_CCH_OP_REMOTE_OPEN 2
     75 #define BTA_HL_CCH_OP_LOCAL_CLOSE 3
     76 #define BTA_HL_CCH_OP_REMOTE_CLOSE 4
     77 
     78 typedef uint8_t tBTA_HL_CCH_OPER;
     79 
     80 /* Pending DCH close operations when closing a CCH */
     81 #define BTA_HL_CCH_CLOSE_OP_DCH_NONE 0
     82 #define BTA_HL_CCH_CLOSE_OP_DCH_ABORT 1
     83 #define BTA_HL_CCH_CLOSE_OP_DCH_CLOSE 2
     84 typedef uint8_t tBTA_HL_CCH_CLOSE_DCH_OPER;
     85 
     86 /* DCH Operations */
     87 #define BTA_HL_DCH_OP_NONE 0
     88 #define BTA_HL_DCH_OP_REMOTE_CREATE 1
     89 #define BTA_HL_DCH_OP_LOCAL_OPEN 2
     90 #define BTA_HL_DCH_OP_REMOTE_OPEN 3
     91 #define BTA_HL_DCH_OP_LOCAL_CLOSE 4
     92 #define BTA_HL_DCH_OP_REMOTE_CLOSE 5
     93 #define BTA_HL_DCH_OP_LOCAL_DELETE 6
     94 #define BTA_HL_DCH_OP_REMOTE_DELETE 7
     95 #define BTA_HL_DCH_OP_LOCAL_RECONNECT 8
     96 #define BTA_HL_DCH_OP_REMOTE_RECONNECT 9
     97 #define BTA_HL_DCH_OP_LOCAL_CLOSE_ECHO_TEST 10
     98 #define BTA_HL_DCH_OP_LOCAL_CLOSE_RECONNECT 11
     99 
    100 typedef uint8_t tBTA_HL_DCH_OPER;
    101 
    102 /* Echo test Operations */
    103 #define BTA_HL_ECHO_OP_NONE 0
    104 #define BTA_HL_ECHO_OP_CI_GET_ECHO_DATA 1
    105 #define BTA_HL_ECHO_OP_SDP_INIT 2
    106 #define BTA_HL_ECHO_OP_MDL_CREATE_CFM 3
    107 #define BTA_HL_ECHO_OP_DCH_OPEN_CFM 4
    108 #define BTA_HL_ECHO_OP_LOOP_BACK 5
    109 #define BTA_HL_ECHO_OP_CI_PUT_ECHO_DATA 6
    110 #define BTA_HL_ECHO_OP_DCH_CLOSE_CFM 7
    111 #define BTA_HL_ECHO_OP_OPEN_IND 8
    112 #define BTA_HL_ECHO_OP_ECHO_PKT 9
    113 
    114 typedef uint8_t tBTA_HL_ECHO_OPER;
    115 
    116 /* abort status mask for abort_oper */
    117 
    118 #define BTA_HL_ABORT_NONE_MASK 0x00
    119 #define BTA_HL_ABORT_PENDING_MASK 0x01
    120 #define BTA_HL_ABORT_LOCAL_MASK 0x10
    121 #define BTA_HL_ABORT_REMOTE_MASK 0x20
    122 #define BTA_HL_ABORT_CCH_CLOSE_MASK 0x40
    123 
    124 /* call out mask for cout_oper */
    125 #define BTA_HL_CO_NONE_MASK 0x00
    126 #define BTA_HL_CO_GET_TX_DATA_MASK 0x01
    127 #define BTA_HL_CO_PUT_RX_DATA_MASK 0x02
    128 #define BTA_HL_CO_GET_ECHO_DATA_MASK 0x04
    129 #define BTA_HL_CO_PUT_ECHO_DATA_MASK 0x08
    130 
    131 typedef struct {
    132   uint16_t mtu;
    133   uint8_t fcs; /* '0' No FCS, otherwise '1' */
    134 } tBTA_HL_L2CAP_CFG_INFO;
    135 
    136 /* State Machine Events */
    137 enum {
    138   /* these events are handled by the state machine */
    139   BTA_HL_CCH_OPEN_EVT = BTA_SYS_EVT_START(BTA_ID_HL),
    140   BTA_HL_CCH_SDP_OK_EVT,
    141   BTA_HL_CCH_SDP_FAIL_EVT,
    142   BTA_HL_MCA_CONNECT_IND_EVT,
    143   BTA_HL_MCA_DISCONNECT_IND_EVT,
    144   BTA_HL_CCH_CLOSE_EVT,
    145   BTA_HL_CCH_CLOSE_CMPL_EVT,
    146   BTA_HL_MCA_RSP_TOUT_IND_EVT,
    147   /* DCH EVENT */
    148   BTA_HL_DCH_SDP_INIT_EVT,
    149   BTA_HL_DCH_OPEN_EVT,
    150   BTA_HL_MCA_CREATE_IND_EVT,
    151   BTA_HL_MCA_CREATE_CFM_EVT,
    152   BTA_HL_MCA_OPEN_IND_EVT,
    153 
    154   BTA_HL_MCA_OPEN_CFM_EVT,
    155   BTA_HL_DCH_CLOSE_EVT,
    156   BTA_HL_MCA_CLOSE_IND_EVT,
    157   BTA_HL_MCA_CLOSE_CFM_EVT,
    158   BTA_HL_API_SEND_DATA_EVT,
    159 
    160   BTA_HL_MCA_RCV_DATA_EVT,
    161   BTA_HL_DCH_CLOSE_CMPL_EVT,
    162   BTA_HL_DCH_RECONNECT_EVT,
    163   BTA_HL_DCH_SDP_FAIL_EVT,
    164   BTA_HL_MCA_RECONNECT_IND_EVT,
    165 
    166   BTA_HL_MCA_RECONNECT_CFM_EVT,
    167   BTA_HL_DCH_CLOSE_ECHO_TEST_EVT,
    168   BTA_HL_API_DCH_CREATE_RSP_EVT,
    169   BTA_HL_DCH_ABORT_EVT,
    170   BTA_HL_MCA_ABORT_IND_EVT,
    171 
    172   BTA_HL_MCA_ABORT_CFM_EVT,
    173   BTA_HL_MCA_CONG_CHG_EVT,
    174   BTA_HL_CI_GET_TX_DATA_EVT,
    175   BTA_HL_CI_PUT_RX_DATA_EVT,
    176   BTA_HL_CI_GET_ECHO_DATA_EVT,
    177   BTA_HL_DCH_ECHO_TEST_EVT,
    178   BTA_HL_CI_PUT_ECHO_DATA_EVT,
    179 
    180   /* these events are handled outside the state machine */
    181   BTA_HL_API_ENABLE_EVT,
    182   BTA_HL_API_DISABLE_EVT,
    183   BTA_HL_API_UPDATE_EVT,
    184   BTA_HL_API_REGISTER_EVT,
    185   BTA_HL_API_DEREGISTER_EVT,
    186   BTA_HL_API_CCH_OPEN_EVT,
    187   BTA_HL_API_CCH_CLOSE_EVT,
    188   BTA_HL_API_DCH_OPEN_EVT,
    189   BTA_HL_API_DCH_RECONNECT_EVT,
    190   BTA_HL_API_DCH_CLOSE_EVT,
    191   BTA_HL_API_DELETE_MDL_EVT,
    192   BTA_HL_API_DCH_ABORT_EVT,
    193 
    194   BTA_HL_API_DCH_ECHO_TEST_EVT,
    195   BTA_HL_API_SDP_QUERY_EVT,
    196   BTA_HL_SDP_QUERY_OK_EVT,
    197   BTA_HL_SDP_QUERY_FAIL_EVT,
    198   BTA_HL_MCA_DELETE_IND_EVT,
    199   BTA_HL_MCA_DELETE_CFM_EVT
    200 };
    201 typedef uint16_t tBTA_HL_INT_EVT;
    202 
    203 #define BTA_HL_DCH_EVT_MIN BTA_HL_DCH_SDP_INIT_EVT
    204 #define BTA_HL_DCH_EVT_MAX 0xFFFF
    205 
    206 /* state machine states */
    207 enum {
    208   BTA_HL_CCH_IDLE_ST = 0, /* Idle  */
    209   BTA_HL_CCH_OPENING_ST,  /* Opening a connection*/
    210   BTA_HL_CCH_OPEN_ST,     /* Connection is open */
    211   BTA_HL_CCH_CLOSING_ST   /* Closing is in progress */
    212 };
    213 typedef uint8_t tBTA_HL_CCH_STATE;
    214 
    215 enum {
    216   BTA_HL_DCH_IDLE_ST = 0, /* Idle  */
    217   BTA_HL_DCH_OPENING_ST,  /* Opening a connection*/
    218   BTA_HL_DCH_OPEN_ST,     /* Connection is open */
    219   BTA_HL_DCH_CLOSING_ST   /* Closing is in progress */
    220 };
    221 typedef uint8_t tBTA_HL_DCH_STATE;
    222 
    223 typedef struct {
    224   BT_HDR hdr;
    225   tBTA_HL_CTRL_CBACK* p_cback; /* pointer to control callback function */
    226 } tBTA_HL_API_ENABLE;
    227 
    228 typedef struct {
    229   BT_HDR hdr;
    230   uint8_t app_id;
    231   bool is_register; /* Update HL application due to register or deregister */
    232   tBTA_HL_CBACK* p_cback;       /* pointer to application callback function */
    233   tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */
    234   tBTA_SEC sec_mask;            /* security mask for accepting conenction*/
    235   char srv_name[BTA_SERVICE_NAME_LEN +
    236                 1]; /* service name to be used in the SDP; null terminated*/
    237   char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
    238                                               the SDP; null terminated */
    239   char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
    240                                                     the SDP; null terminated */
    241 
    242 } tBTA_HL_API_UPDATE;
    243 
    244 typedef struct {
    245   BT_HDR hdr;
    246   uint8_t app_id;
    247   tBTA_HL_CBACK* p_cback;       /* pointer to application callback function */
    248   tBTA_HL_DEVICE_TYPE dev_type; /* sink, source or dual roles */
    249   tBTA_SEC sec_mask;            /* security mask for accepting conenction*/
    250   char srv_name[BTA_SERVICE_NAME_LEN +
    251                 1]; /* service name to be used in the SDP; null terminated*/
    252   char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
    253                                               the SDP; null terminated */
    254   char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
    255                                                     the SDP; null terminated */
    256 } tBTA_HL_API_REGISTER;
    257 
    258 typedef struct {
    259   BT_HDR hdr;
    260   uint8_t app_id;
    261   tBTA_HL_CBACK* p_cback; /* pointer to application callback function */
    262   tBTA_HL_APP_HANDLE app_handle;
    263 } tBTA_HL_API_DEREGISTER;
    264 
    265 typedef struct {
    266   BT_HDR hdr;
    267   uint8_t app_id;
    268   tBTA_HL_APP_HANDLE app_handle;
    269   uint16_t ctrl_psm;
    270   RawAddress bd_addr;  /* Address of peer device */
    271   tBTA_SEC sec_mask;   /* security mask for initiating connection*/
    272 } tBTA_HL_API_CCH_OPEN;
    273 
    274 typedef struct {
    275   BT_HDR hdr;
    276   tBTA_HL_MCL_HANDLE mcl_handle;
    277 } tBTA_HL_API_CCH_CLOSE;
    278 
    279 typedef struct {
    280   BT_HDR hdr;
    281   tBTA_HL_MCL_HANDLE mcl_handle;
    282   uint16_t ctrl_psm;
    283   tBTA_HL_MDEP_ID local_mdep_id; /* local MDEP ID */
    284   tBTA_HL_MDEP_ID peer_mdep_id;  /* peer mdep id */
    285   tBTA_HL_DCH_CFG local_cfg;
    286   tBTA_SEC sec_mask; /* security mask for initiating connection*/
    287 } tBTA_HL_API_DCH_OPEN;
    288 
    289 typedef struct {
    290   BT_HDR hdr;
    291 
    292   tBTA_HL_MCL_HANDLE mcl_handle;
    293   uint16_t ctrl_psm;
    294   tBTA_HL_MDL_ID mdl_id;
    295 } tBTA_HL_API_DCH_RECONNECT;
    296 
    297 typedef struct {
    298   BT_HDR hdr;
    299   tBTA_HL_MDL_HANDLE mdl_handle;
    300 } tBTA_HL_API_DCH_CLOSE;
    301 
    302 typedef struct {
    303   BT_HDR hdr;
    304   tBTA_HL_MCL_HANDLE mcl_handle;
    305   tBTA_HL_MDL_ID mdl_id;
    306 } tBTA_HL_API_DELETE_MDL;
    307 
    308 typedef struct {
    309   BT_HDR hdr;
    310   tBTA_HL_MCL_HANDLE mcl_handle;
    311 } tBTA_HL_API_DCH_ABORT;
    312 
    313 typedef struct {
    314   BT_HDR hdr;
    315   tBTA_HL_MDL_HANDLE mdl_handle;
    316   uint16_t pkt_size;
    317 } tBTA_HL_API_SEND_DATA;
    318 
    319 typedef struct {
    320   BT_HDR hdr;
    321   tBTA_HL_MCL_HANDLE mcl_handle;
    322   uint16_t ctrl_psm;
    323   uint16_t pkt_size;
    324   tBTA_HL_DCH_CFG local_cfg;
    325 } tBTA_HL_API_DCH_ECHO_TEST;
    326 
    327 typedef struct {
    328   BT_HDR hdr;
    329   uint8_t app_idx;
    330   uint8_t mcl_idx;
    331   bool release_mcl_cb;
    332 } tBTA_HL_CCH_SDP;
    333 
    334 /* MCA callback event parameters. */
    335 typedef struct {
    336   BT_HDR hdr;
    337   tBTA_HL_APP_HANDLE app_handle;
    338   tBTA_HL_MCL_HANDLE mcl_handle;
    339   tMCA_CTRL mca_data;
    340 } tBTA_HL_MCA_EVT;
    341 
    342 /* MCA callback event parameters. */
    343 typedef struct {
    344   BT_HDR hdr;
    345   uint8_t app_idx;
    346   uint8_t mcl_idx;
    347   uint8_t mdl_idx;
    348   BT_HDR* p_pkt;
    349 } tBTA_HL_MCA_RCV_DATA_EVT;
    350 
    351 typedef struct {
    352   BT_HDR hdr;
    353   uint8_t app_idx;
    354   uint8_t mcl_idx;
    355   uint8_t mdl_idx;
    356 } tBTA_HL_DCH_SDP;
    357 
    358 typedef struct {
    359   BT_HDR hdr;
    360   tBTA_HL_APP_HANDLE app_handle;
    361   uint8_t app_id;
    362   RawAddress bd_addr; /* Address of peer device */
    363 } tBTA_HL_API_SDP_QUERY;
    364 
    365 typedef struct {
    366   BT_HDR hdr;
    367   tBTA_HL_MCL_HANDLE mcl_handle;
    368   tBTA_HL_MDL_ID mdl_id;
    369   tBTA_HL_MDEP_ID local_mdep_id;
    370   tBTA_HL_DCH_CREATE_RSP rsp_code;
    371   tBTA_HL_DCH_CFG cfg_rsp;
    372 } tBTA_HL_API_DCH_CREATE_RSP;
    373 
    374 typedef struct {
    375   BT_HDR hdr;
    376   tBTA_HL_MDL_HANDLE mdl_handle;
    377   tBTA_HL_STATUS status;
    378 } tBTA_HL_CI_GET_PUT_DATA;
    379 
    380 typedef struct {
    381   BT_HDR hdr;
    382   tBTA_HL_MCL_HANDLE mcl_handle;
    383   tBTA_HL_STATUS status;
    384 } tBTA_HL_CI_ECHO_DATA;
    385 
    386 /* union of all state machine event data types */
    387 typedef union {
    388   BT_HDR hdr;
    389   tBTA_HL_API_ENABLE api_enable; /* data for BTA_MSE_API_ENABLE_EVT */
    390   tBTA_HL_API_UPDATE api_update;
    391   tBTA_HL_API_REGISTER api_reg;
    392   tBTA_HL_API_DEREGISTER api_dereg;
    393   tBTA_HL_API_CCH_OPEN api_cch_open;
    394   tBTA_HL_API_CCH_CLOSE api_cch_close;
    395   tBTA_HL_API_DCH_CREATE_RSP api_dch_create_rsp;
    396   tBTA_HL_API_DCH_OPEN api_dch_open;
    397   tBTA_HL_API_DCH_RECONNECT api_dch_reconnect;
    398   tBTA_HL_API_DCH_CLOSE api_dch_close;
    399   tBTA_HL_API_DELETE_MDL api_delete_mdl;
    400   tBTA_HL_API_DCH_ABORT api_dch_abort;
    401   tBTA_HL_API_SEND_DATA api_send_data;
    402   tBTA_HL_API_DCH_ECHO_TEST api_dch_echo_test;
    403   tBTA_HL_API_SDP_QUERY api_sdp_query;
    404 
    405   tBTA_HL_CCH_SDP cch_sdp;
    406   tBTA_HL_MCA_EVT mca_evt;
    407   tBTA_HL_MCA_RCV_DATA_EVT mca_rcv_data_evt;
    408   tBTA_HL_DCH_SDP dch_sdp; /* for DCH_OPEN_EVT and DCH_RECONNECT_EVT */
    409   tBTA_HL_CI_GET_PUT_DATA ci_get_put_data;
    410   tBTA_HL_CI_ECHO_DATA ci_get_put_echo_data;
    411 } tBTA_HL_DATA;
    412 
    413 typedef struct {
    414   bool in_use;
    415   uint16_t mdl_id;
    416   tBTA_HL_MDL_HANDLE mdl_handle;
    417   tBTA_HL_DCH_OPER dch_oper;
    418   bool intentional_close;
    419   tBTA_HL_DCH_STATE dch_state;
    420   uint8_t abort_oper;
    421   uint16_t req_data_psm;
    422   uint16_t max_rx_apdu_size;
    423   uint16_t max_tx_apdu_size;
    424   BT_HDR* p_tx_pkt;
    425   BT_HDR* p_rx_pkt;
    426   tBTA_HL_MDEP_ID local_mdep_id;
    427   uint8_t local_mdep_cfg_idx;
    428   tBTA_HL_DCH_CFG local_cfg;
    429   tBTA_HL_DCH_CFG remote_cfg;
    430   tBTA_HL_MDEP_ID peer_mdep_id;
    431   uint16_t peer_data_type;
    432   tBTA_HL_MDEP_ROLE peer_mdep_role;
    433   tBTA_HL_DCH_MODE dch_mode;
    434   tBTA_SEC sec_mask;
    435   bool is_the_first_reliable;
    436   bool delete_mdl;
    437   uint16_t mtu;
    438   tMCA_CHNL_CFG chnl_cfg;
    439   bool mdl_cfg_idx_included;
    440   uint8_t mdl_cfg_idx;
    441   uint8_t echo_oper;
    442   bool cong;
    443   bool close_pending;
    444   uint8_t cout_oper;
    445   BT_HDR* p_echo_tx_pkt;
    446   BT_HDR* p_echo_rx_pkt;
    447   tBTA_HL_STATUS ci_put_echo_data_status;
    448 } tBTA_HL_MDL_CB;
    449 
    450 typedef struct {
    451   tBTA_HL_MDL_CB mdl[BTA_HL_NUM_MDLS_PER_MCL];
    452   tBTA_HL_DELETE_MDL delete_mdl;
    453   bool in_use;
    454   tBTA_HL_CCH_STATE cch_state;
    455   uint16_t req_ctrl_psm;
    456   uint16_t ctrl_psm;
    457   uint16_t data_psm;
    458   RawAddress bd_addr;
    459   uint16_t cch_mtu;
    460   uint16_t sec_mask;
    461   tBTA_HL_MCL_HANDLE mcl_handle;
    462   tSDP_DISCOVERY_DB* p_db; /* pointer to discovery database */
    463   tSDP_DISC_CMPL_CB* sdp_cback;
    464   tBTA_HL_SDP_OPER sdp_oper;
    465   bool close_pending;
    466   uint8_t sdp_mdl_idx;
    467   tBTA_HL_SDP sdp;
    468   uint8_t cch_oper;
    469   uint8_t force_close_local_cch_opening;
    470   bool intentional_close;
    471   bool rsp_tout;
    472   uint8_t timer_oper;
    473   bool echo_test;
    474   uint8_t echo_mdl_idx;
    475   uint8_t cch_close_dch_oper;
    476   uint8_t app_id;
    477 } tBTA_HL_MCL_CB;
    478 
    479 typedef struct {
    480   tBTA_HL_MCL_CB mcb[BTA_HL_NUM_MCLS]; /* application Control Blocks */
    481   tBTA_HL_CBACK* p_cback; /* pointer to control callback function */
    482   bool in_use;            /* this CB is in use*/
    483   bool deregistering;
    484   uint8_t app_id;
    485   uint32_t sdp_handle; /* SDP record handle */
    486   tBTA_HL_SUP_FEATURE sup_feature;
    487   tBTA_HL_MDL_CFG mdl_cfg[BTA_HL_NUM_MDL_CFGS];
    488   tBTA_HL_DEVICE_TYPE dev_type;
    489   tBTA_HL_APP_HANDLE app_handle;
    490   uint16_t ctrl_psm; /* L2CAP PSM for the MCAP control channel */
    491   uint16_t data_psm; /* L2CAP PSM for the MCAP data channel */
    492   uint16_t sec_mask; /* Security mask for BTM_SetSecurityLevel() */
    493 
    494   char srv_name[BTA_SERVICE_NAME_LEN +
    495                 1]; /* service name to be used in the SDP; null terminated*/
    496   char srv_desp[BTA_SERVICE_DESP_LEN + 1]; /* service description to be used in
    497                                               the SDP; null terminated */
    498   char provider_name[BTA_PROVIDER_NAME_LEN + 1]; /* provide name to be used in
    499                                                     the SDP; null terminated */
    500 
    501   tMCA_CTRL_CBACK* p_mcap_cback; /* pointer to MCAP callback function */
    502   tMCA_DATA_CBACK* p_data_cback;
    503 } tBTA_HL_APP_CB;
    504 
    505 typedef struct {
    506   bool in_use;
    507   tBTA_HL_SDP_OPER sdp_oper;
    508   uint8_t app_idx;
    509   uint8_t mcl_idx;
    510   uint8_t mdl_idx;
    511 } tBTA_HL_SDP_CB;
    512 
    513 typedef struct {
    514   bool in_use;
    515   uint8_t app_idx;
    516   uint8_t mcl_idx;
    517 } tBTA_HL_TIMER_CB;
    518 
    519 typedef struct {
    520   tBTA_HL_APP_CB acb[BTA_HL_NUM_APPS]; /* HL Control Blocks */
    521   tBTA_HL_CTRL_CBACK* p_ctrl_cback; /* pointer to control callback function */
    522   bool enable;
    523   bool disabling;
    524 
    525   tBTA_HL_SDP_CB scb[BTA_HL_NUM_SDP_CBACKS];
    526   tBTA_HL_TIMER_CB tcb[BTA_HL_NUM_TIMERS];
    527   bool enable_random_psm;
    528   tBTA_HL_ALLOCATE_PSM* p_alloc_psm;
    529 } tBTA_HL_CB;
    530 
    531 /******************************************************************************
    532  *  Configuration Definitions
    533  ******************************************************************************/
    534 /* Configuration structure */
    535 
    536 /*****************************************************************************
    537  *  Global data
    538  ****************************************************************************/
    539 
    540 /* HL control block */
    541 extern tBTA_HL_CB bta_hl_cb;
    542 
    543 #define BTA_HL_GET_CB_PTR() &(bta_hl_cb)
    544 #define BTA_HL_GET_APP_CB_PTR(app_idx) &(bta_hl_cb.acb[(app_idx)])
    545 #define BTA_HL_GET_MCL_CB_PTR(app_idx, mcl_idx) \
    546   &(bta_hl_cb.acb[(app_idx)].mcb[(mcl_idx)])
    547 #define BTA_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx) \
    548   &(bta_hl_cb.acb[(app_idx)].mcb[(mcl_idx)].mdl[(mdl_idx)])
    549 #define BTA_HL_GET_MDL_CFG_PTR(app_idx, item_idx) \
    550   &(bta_hl_cb.acb[(app_idx)].mdl_cfg[(item_idx)])
    551 #define BTA_HL_GET_ECHO_CFG_PTR(app_idx) \
    552   &(bta_hl_cb.acb[(app_idx)].sup_feature.echo_cfg)
    553 #define BTA_HL_GET_MDEP_CFG_PTR(app_idx, mdep_cfg_idx) \
    554   &(bta_hl_cb.acb[(app_idx)].sup_feature.mdep[(mdep_cfg_idx)].mdep_cfg)
    555 #define BTA_HL_GET_DATA_CFG_PTR(app_idx, mdep_cfg_idx, data_cfg_idx) \
    556   &(bta_hl_cb.acb[(app_idx)]                                         \
    557         .sup_feature.mdep[(mdep_cfg_idx)]                            \
    558         .mdep_cfg.data_cfg[(data_cfg_idx)])
    559 #define BTA_HL_GET_BUF_PTR(p_pkt) \
    560   ((uint8_t*)((uint8_t*)((p_pkt) + 1) + (p_pkt)->offset))
    561 
    562 /*****************************************************************************
    563  *  Function prototypes
    564  ****************************************************************************/
    565 /* main */
    566 extern bool bta_hl_hdl_event(BT_HDR* p_msg);
    567 /* sdp */
    568 extern bool bta_hl_fill_sup_feature_list(const tSDP_DISC_ATTR* p_attr,
    569                                          tBTA_HL_SUP_FEATURE_LIST_ELEM* p_list);
    570 extern tBTA_HL_STATUS bta_hl_sdp_update(uint8_t app_id);
    571 extern tBTA_HL_STATUS bta_hl_sdp_register(uint8_t app_idx);
    572 extern tSDP_DISC_REC* bta_hl_find_sink_or_src_srv_class_in_db(
    573     const tSDP_DISCOVERY_DB* p_db, const tSDP_DISC_REC* p_start_rec);
    574 
    575 /* action routines */
    576 extern void bta_hl_dch_ci_get_tx_data(uint8_t app_idx, uint8_t mcl_idx,
    577                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    578 extern void bta_hl_dch_ci_put_rx_data(uint8_t app_idx, uint8_t mcl_idx,
    579                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    580 extern void bta_hl_dch_ci_get_echo_data(uint8_t app_idx, uint8_t mcl_idx,
    581                                         uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    582 
    583 extern void bta_hl_dch_echo_test(uint8_t app_idx, uint8_t mcl_idx,
    584                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    585 extern void bta_hl_dch_ci_put_echo_data(uint8_t app_idx, uint8_t mcl_idx,
    586                                         uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    587 extern void bta_hl_dch_send_data(uint8_t app_idx, uint8_t mcl_idx,
    588                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    589 extern void bta_hl_dch_sdp_fail(uint8_t app_idx, uint8_t mcl_idx,
    590                                 uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    591 extern void bta_hl_dch_mca_cong_change(uint8_t app_idx, uint8_t mcl_idx,
    592                                        uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    593 extern void bta_hl_dch_mca_reconnect_ind(uint8_t app_idx, uint8_t mcl_idx,
    594                                          uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    595 extern void bta_hl_dch_mca_reconnect_cfm(uint8_t app_idx, uint8_t mcl_idx,
    596                                          uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    597 extern void bta_hl_dch_mca_reconnect(uint8_t app_idx, uint8_t mcl_idx,
    598                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    599 extern void bta_hl_dch_sdp_init(uint8_t app_idx, uint8_t mcl_idx,
    600                                 uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    601 extern void bta_hl_dch_close_echo_test(uint8_t app_idx, uint8_t mcl_idx,
    602                                        uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    603 extern void bta_hl_dch_create_rsp(uint8_t app_idx, uint8_t mcl_idx,
    604                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    605 extern void bta_hl_dch_mca_rcv_data(uint8_t app_idx, uint8_t mcl_idx,
    606                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    607 extern void bta_hl_dch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx,
    608                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    609 extern void bta_hl_dch_mca_close_cfm(uint8_t app_idx, uint8_t mcl_idx,
    610                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    611 extern void bta_hl_dch_mca_close_ind(uint8_t app_idx, uint8_t mcl_idx,
    612                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    613 extern void bta_hl_dch_mca_close(uint8_t app_idx, uint8_t mcl_idx,
    614                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    615 extern void bta_hl_dch_mca_delete_ind(uint8_t app_idx, uint8_t mcl_idx,
    616                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    617 
    618 extern void bta_hl_dch_mca_delete_cfm(uint8_t app_idx, uint8_t mcl_idx,
    619                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    620 extern void bta_hl_dch_mca_delete(uint8_t app_idx, uint8_t mcl_idx,
    621                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    622 extern void bta_hl_dch_mca_abort_ind(uint8_t app_idx, uint8_t mcl_idx,
    623                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    624 extern void bta_hl_dch_mca_abort_cfm(uint8_t app_idx, uint8_t mcl_idx,
    625                                      uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    626 extern void bta_hl_dch_mca_abort(uint8_t app_idx, uint8_t mcl_idx,
    627                                  uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    628 extern void bta_hl_dch_mca_open_ind(uint8_t app_idx, uint8_t mcl_idx,
    629                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    630 extern void bta_hl_dch_mca_open_cfm(uint8_t app_idx, uint8_t mcl_idx,
    631                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    632 extern void bta_hl_dch_mca_create_ind(uint8_t app_idx, uint8_t mcl_idx,
    633                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    634 extern void bta_hl_dch_mca_create_cfm(uint8_t app_idx, uint8_t mcl_idx,
    635                                       uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    636 extern void bta_hl_dch_mca_create(uint8_t app_idx, uint8_t mcl_idx,
    637                                   uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    638 extern void bta_hl_deallocate_spd_cback(uint8_t sdp_cback_idx);
    639 extern tSDP_DISC_CMPL_CB* bta_hl_allocate_spd_cback(tBTA_HL_SDP_OPER sdp_oper,
    640                                                     uint8_t app_idx,
    641                                                     uint8_t mcl_idx,
    642                                                     uint8_t mdl_idx,
    643                                                     uint8_t* p_sdp_cback_idx);
    644 extern tBTA_HL_STATUS bta_hl_init_sdp(tBTA_HL_SDP_OPER sdp_oper,
    645                                       uint8_t app_idx, uint8_t mcl_idx,
    646                                       uint8_t mdl_idx);
    647 extern void bta_hl_cch_sdp_init(uint8_t app_idx, uint8_t mcl_idx,
    648                                 tBTA_HL_DATA* p_data);
    649 extern void bta_hl_cch_mca_open(uint8_t app_idx, uint8_t mcl_idx,
    650                                 tBTA_HL_DATA* p_data);
    651 extern void bta_hl_cch_mca_close(uint8_t app_idx, uint8_t mcl_idx,
    652                                  tBTA_HL_DATA* p_data);
    653 extern void bta_hl_cch_close_cmpl(uint8_t app_idx, uint8_t mcl_idx,
    654                                   tBTA_HL_DATA* p_data);
    655 extern void bta_hl_cch_mca_disconnect(uint8_t app_idx, uint8_t mcl_idx,
    656                                       tBTA_HL_DATA* p_data);
    657 extern void bta_hl_cch_mca_disc_open(uint8_t app_idx, uint8_t mcl_idx,
    658                                      tBTA_HL_DATA* p_data);
    659 extern void bta_hl_cch_mca_rsp_tout(uint8_t app_idx, uint8_t mcl_idx,
    660                                     tBTA_HL_DATA* p_data);
    661 extern void bta_hl_cch_mca_connect(uint8_t app_idx, uint8_t mcl_idx,
    662                                    tBTA_HL_DATA* p_data);
    663 
    664 /* State machine drivers  */
    665 extern void bta_hl_cch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx,
    666                                   uint16_t event, tBTA_HL_DATA* p_data);
    667 extern void bta_hl_dch_sm_execute(uint8_t inst_idx, uint8_t mcl_idx,
    668                                   uint8_t mdl_idx, uint16_t event,
    669                                   tBTA_HL_DATA* p_data);
    670 /* MCAP callback functions  */
    671 extern void bta_hl_mcap_ctrl_cback(tMCA_HANDLE handle, tMCA_CL mcl,
    672                                    uint8_t event, tMCA_CTRL* p_data);
    673 
    674 extern void bta_hl_mcap_data_cback(tMCA_DL mdl, BT_HDR* p_pkt);
    675 
    676 /* utility functions  */
    677 extern bool bta_hl_set_ctrl_psm_for_dch(uint8_t app_idx, uint8_t mcl_idx,
    678                                         uint8_t mdl_idx, uint16_t ctrl_psm);
    679 extern bool bta_hl_find_sdp_idx_using_ctrl_psm(tBTA_HL_SDP* p_sdp,
    680                                                uint16_t ctrl_psm,
    681                                                uint8_t* p_sdp_idx);
    682 extern uint16_t bta_hl_set_user_tx_buf_size(uint16_t max_tx_size);
    683 extern uint16_t bta_hl_set_user_rx_buf_size(uint16_t mtu);
    684 extern uint8_t bta_hl_set_tx_win_size(uint16_t mtu, uint16_t mps);
    685 extern uint16_t bta_hl_set_mps(uint16_t mtu);
    686 extern void bta_hl_clean_mdl_cb(uint8_t app_idx, uint8_t mcl_idx,
    687                                 uint8_t mdl_idx);
    688 extern BT_HDR* bta_hl_get_buf(uint16_t data_size, bool fcs_use);
    689 extern bool bta_hl_find_service_in_db(uint8_t app_idx, uint8_t mcl_idx,
    690                                       uint16_t service_uuid,
    691                                       tSDP_DISC_REC** pp_rec);
    692 extern uint16_t bta_hl_get_service_uuids(uint8_t sdp_oper, uint8_t app_idx,
    693                                          uint8_t mcl_idx, uint8_t mdl_idx);
    694 extern bool bta_hl_find_echo_cfg_rsp(uint8_t app_idx, uint8_t mcl_idx,
    695                                      uint8_t mdep_idx, uint8_t cfg,
    696                                      uint8_t* p_cfg_rsp);
    697 extern bool bta_hl_validate_cfg(uint8_t app_idx, uint8_t mcl_idx,
    698                                 uint8_t mdl_idx, uint8_t cfg);
    699 extern bool bta_hl_find_cch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx,
    700                                        uint8_t* p_mcl_idx);
    701 extern bool bta_hl_find_dch_cb_indexes(tBTA_HL_DATA* p_msg, uint8_t* p_app_idx,
    702                                        uint8_t* p_mcl_idx, uint8_t* p_mdl_idx);
    703 extern uint16_t bta_hl_allocate_mdl_id(uint8_t app_idx, uint8_t mcl_idx,
    704                                        uint8_t mdl_idx);
    705 extern bool bta_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle,
    706                                              uint8_t* p_app_idx,
    707                                              uint8_t* p_mcl_idx,
    708                                              uint8_t* p_mdl_idx);
    709 extern bool bta_hl_find_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
    710                                 uint16_t mdl_id, uint8_t* p_mdl_idx);
    711 extern bool bta_hl_find_an_active_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
    712                                           uint8_t* p_mdl_idx);
    713 extern bool bta_hl_find_dch_setup_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
    714                                           uint8_t* p_mdl_idx);
    715 extern bool bta_hl_find_an_in_use_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx);
    716 extern bool bta_hl_find_an_in_use_app_idx(uint8_t* p_app_idx);
    717 extern bool bta_hl_find_app_idx(uint8_t app_id, uint8_t* p_app_idx);
    718 extern bool bta_hl_find_app_idx_using_handle(tBTA_HL_APP_HANDLE app_handle,
    719                                              uint8_t* p_app_idx);
    720 extern bool bta_hl_find_mcl_idx_using_handle(tBTA_HL_MCL_HANDLE mcl_handle,
    721                                              uint8_t* p_app_idx,
    722                                              uint8_t* p_mcl_idx);
    723 extern bool bta_hl_find_mcl_idx(uint8_t app_idx, const RawAddress& p_bd_addr,
    724                                 uint8_t* p_mcl_idx);
    725 extern bool bta_hl_is_the_first_reliable_existed(uint8_t app_idx,
    726                                                  uint8_t mcl_idx);
    727 extern bool bta_hl_find_non_active_mdl_cfg(uint8_t app_idx,
    728                                            uint8_t start_mdl_cfg_idx,
    729                                            uint8_t* p_mdl_cfg_idx);
    730 extern bool bta_hl_find_avail_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx,
    731                                           uint8_t* p_mdl_cfg_idx);
    732 extern bool bta_hl_find_mdl_cfg_idx(uint8_t app_idx, uint8_t mcl_idx,
    733                                     tBTA_HL_MDL_ID mdl_id,
    734                                     uint8_t* p_mdl_cfg_idx);
    735 extern bool bta_hl_get_cur_time(uint8_t app_idx, uint8_t* p_cur_time);
    736 extern void bta_hl_sort_cfg_time_idx(uint8_t app_idx, uint8_t* a, uint8_t n);
    737 extern void bta_hl_compact_mdl_cfg_time(uint8_t app_idx, uint8_t mdep_id);
    738 extern bool bta_hl_is_mdl_exsit_in_mcl(uint8_t app_idx,
    739                                        const RawAddress& bd_addr,
    740                                        tBTA_HL_MDL_ID mdl_id);
    741 extern bool bta_hl_delete_mdl_cfg(uint8_t app_idx, const RawAddress& bd_addr,
    742                                   tBTA_HL_MDL_ID mdl_id);
    743 extern bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id);
    744 extern bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx,
    745                                      tBTA_HL_MDEP_ID local_mdep_id,
    746                                      uint8_t* p_mdep_cfg_idx);
    747 extern void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx,
    748                                        uint16_t* p_rx_apu_size,
    749                                        uint16_t* p_tx_apu_size);
    750 extern bool bta_hl_validate_peer_cfg(uint8_t app_idx, uint8_t mcl_idx,
    751                                      uint8_t mdl_idx,
    752                                      tBTA_HL_MDEP_ID peer_mdep_id,
    753                                      tBTA_HL_MDEP_ROLE peer_mdep_role,
    754                                      uint8_t sdp_idx);
    755 extern tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx,
    756                                            uint8_t mdep_cfg_idx,
    757                                            tBTA_HL_DCH_CFG local_cfg);
    758 
    759 extern bool bta_hl_validate_reconnect_params(
    760     uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_API_DCH_RECONNECT* p_reconnect,
    761     uint8_t* p_mdep_cfg_idx, uint8_t* p_mdl_cfg_idx);
    762 extern bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx);
    763 extern bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx,
    764                                       uint8_t* p_mdl_idx);
    765 extern bool bta_hl_is_a_duplicate_id(uint8_t app_id);
    766 extern bool bta_hl_find_avail_app_idx(uint8_t* p_idx);
    767 extern tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register);
    768 extern tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx);
    769 extern void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA* p_data);
    770 extern void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx,
    771                                 uint8_t mdl_idx);
    772 extern void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx,
    773                                     uint8_t mdl_idx, tBTA_HL_DATA* p_data);
    774 extern bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd,
    775                                  tBTA_HL_L2CAP_CFG_INFO* p_cfg);
    776 extern bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx,
    777                                      uint8_t mdl_idx);
    778 extern bool bta_hl_is_cong_on(uint8_t app_id, const RawAddress& bd_addr,
    779                               tBTA_HL_MDL_ID mdl_id);
    780 extern void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx,
    781                                    tBTA_HL_DATA* p_data, bool check_dch_setup);
    782 extern void bta_hl_clean_app(uint8_t app_idx);
    783 extern void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA* p_data);
    784 extern void bta_hl_check_disable(tBTA_HL_DATA* p_data);
    785 extern void bta_hl_build_abort_ind(tBTA_HL* p_evt_data,
    786                                    tBTA_HL_APP_HANDLE app_handle,
    787                                    tBTA_HL_MCL_HANDLE mcl_handle);
    788 extern void bta_hl_build_abort_cfm(tBTA_HL* p_evt_data,
    789                                    tBTA_HL_APP_HANDLE app_handle,
    790                                    tBTA_HL_MCL_HANDLE mcl_handle,
    791                                    tBTA_HL_STATUS status);
    792 extern void bta_hl_build_dch_close_cfm(tBTA_HL* p_evt_data,
    793                                        tBTA_HL_APP_HANDLE app_handle,
    794                                        tBTA_HL_MCL_HANDLE mcl_handle,
    795                                        tBTA_HL_MDL_HANDLE mdl_handle,
    796                                        tBTA_HL_STATUS status);
    797 extern void bta_hl_build_dch_close_ind(tBTA_HL* p_evt_data,
    798                                        tBTA_HL_APP_HANDLE app_handle,
    799                                        tBTA_HL_MCL_HANDLE mcl_handle,
    800                                        tBTA_HL_MDL_HANDLE mdl_handle,
    801                                        bool intentional);
    802 extern void bta_hl_build_send_data_cfm(tBTA_HL* p_evt_data,
    803                                        tBTA_HL_APP_HANDLE app_handle,
    804                                        tBTA_HL_MCL_HANDLE mcl_handle,
    805                                        tBTA_HL_MDL_HANDLE mdl_handle,
    806                                        tBTA_HL_STATUS status);
    807 extern void bta_hl_build_rcv_data_ind(tBTA_HL* p_evt_data,
    808                                       tBTA_HL_APP_HANDLE app_handle,
    809                                       tBTA_HL_MCL_HANDLE mcl_handle,
    810                                       tBTA_HL_MDL_HANDLE mdl_handle);
    811 extern void bta_hl_build_cch_open_cfm(tBTA_HL* p_evt_data, uint8_t app_id,
    812                                       tBTA_HL_APP_HANDLE app_handle,
    813                                       tBTA_HL_MCL_HANDLE mcl_handle,
    814                                       const RawAddress& bd_addr,
    815                                       tBTA_HL_STATUS status);
    816 extern void bta_hl_build_cch_open_ind(tBTA_HL* p_evt_data,
    817                                       tBTA_HL_APP_HANDLE app_handle,
    818                                       tBTA_HL_MCL_HANDLE mcl_handle,
    819                                       const RawAddress& bd_addr);
    820 extern void bta_hl_build_cch_close_cfm(tBTA_HL* p_evt_data,
    821                                        tBTA_HL_APP_HANDLE app_handle,
    822                                        tBTA_HL_MCL_HANDLE mcl_handle,
    823                                        tBTA_HL_STATUS status);
    824 extern void bta_hl_build_cch_close_ind(tBTA_HL* p_evt_data,
    825                                        tBTA_HL_APP_HANDLE app_handle,
    826                                        tBTA_HL_MCL_HANDLE mcl_handle,
    827                                        bool intentional);
    828 
    829 extern void bta_hl_build_dch_open_cfm(
    830     tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle,
    831     tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_MDL_HANDLE mdl_handle,
    832     tBTA_HL_MDEP_ID local_mdep_id, tBTA_HL_MDL_ID mdl_id,
    833     tBTA_HL_DCH_MODE dch_mode, bool first_reliable, uint16_t mtu,
    834     tBTA_HL_STATUS status);
    835 
    836 extern void bta_hl_build_delete_mdl_cfm(tBTA_HL* p_evt_data,
    837                                         tBTA_HL_APP_HANDLE app_handle,
    838                                         tBTA_HL_MCL_HANDLE mcl_handle,
    839                                         tBTA_HL_MDL_ID mdl_id,
    840                                         tBTA_HL_STATUS status);
    841 extern void bta_hl_build_echo_test_cfm(tBTA_HL* p_evt_data,
    842                                        tBTA_HL_APP_HANDLE app_handle,
    843                                        tBTA_HL_MCL_HANDLE mcl_handle,
    844                                        tBTA_HL_STATUS status);
    845 extern void bta_hl_build_sdp_query_cfm(tBTA_HL* p_evt_data, uint8_t app_id,
    846                                        tBTA_HL_APP_HANDLE app_handle,
    847                                        const RawAddress& bd_addr,
    848                                        tBTA_HL_SDP* p_sdp,
    849                                        tBTA_HL_STATUS status);
    850 
    851 #if (BTA_HL_DEBUG == TRUE)
    852 extern const char* bta_hl_status_code(tBTA_HL_STATUS status);
    853 extern const char* bta_hl_evt_code(tBTA_HL_INT_EVT evt_code);
    854 #endif
    855 
    856 #endif /* BTA_MSE_INT_H */
    857