1 /****************************************************************************** 2 * 3 * Copyright (C) 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 BD_ADDR 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 BD_ADDR 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 BD_ADDR 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, BD_ADDR 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, BD_ADDR bd_addr, 739 tBTA_HL_MDL_ID mdl_id); 740 extern bool bta_hl_delete_mdl_cfg(uint8_t app_idx, BD_ADDR bd_addr, 741 tBTA_HL_MDL_ID mdl_id); 742 extern bool bta_hl_is_mdl_value_valid(tBTA_HL_MDL_ID mdl_id); 743 extern bool bta_hl_find_mdep_cfg_idx(uint8_t app_idx, 744 tBTA_HL_MDEP_ID local_mdep_id, 745 uint8_t* p_mdep_cfg_idx); 746 extern void bta_hl_find_rxtx_apdu_size(uint8_t app_idx, uint8_t mdep_cfg_idx, 747 uint16_t* p_rx_apu_size, 748 uint16_t* p_tx_apu_size); 749 extern bool bta_hl_validate_peer_cfg(uint8_t app_idx, uint8_t mcl_idx, 750 uint8_t mdl_idx, 751 tBTA_HL_MDEP_ID peer_mdep_id, 752 tBTA_HL_MDEP_ROLE peer_mdep_role, 753 uint8_t sdp_idx); 754 extern tBTA_HL_STATUS bta_hl_chk_local_cfg(uint8_t app_idx, uint8_t mcl_idx, 755 uint8_t mdep_cfg_idx, 756 tBTA_HL_DCH_CFG local_cfg); 757 758 extern bool bta_hl_validate_reconnect_params( 759 uint8_t app_idx, uint8_t mcl_idx, tBTA_HL_API_DCH_RECONNECT* p_reconnect, 760 uint8_t* p_mdep_cfg_idx, uint8_t* p_mdl_cfg_idx); 761 extern bool bta_hl_find_avail_mcl_idx(uint8_t app_idx, uint8_t* p_mcl_idx); 762 extern bool bta_hl_find_avail_mdl_idx(uint8_t app_idx, uint8_t mcl_idx, 763 uint8_t* p_mdl_idx); 764 extern bool bta_hl_is_a_duplicate_id(uint8_t app_id); 765 extern bool bta_hl_find_avail_app_idx(uint8_t* p_idx); 766 extern tBTA_HL_STATUS bta_hl_app_update(uint8_t app_id, bool is_register); 767 extern tBTA_HL_STATUS bta_hl_app_registration(uint8_t app_idx); 768 extern void bta_hl_discard_data(uint16_t event, tBTA_HL_DATA* p_data); 769 extern void bta_hl_save_mdl_cfg(uint8_t app_idx, uint8_t mcl_idx, 770 uint8_t mdl_idx); 771 extern void bta_hl_set_dch_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, 772 uint8_t mdl_idx, tBTA_HL_DATA* p_data); 773 extern bool bta_hl_get_l2cap_cfg(tBTA_HL_MDL_HANDLE mdl_hnd, 774 tBTA_HL_L2CAP_CFG_INFO* p_cfg); 775 extern bool bta_hl_validate_chan_cfg(uint8_t app_idx, uint8_t mcl_idx, 776 uint8_t mdl_idx); 777 extern bool bta_hl_is_cong_on(uint8_t app_id, BD_ADDR bd_addr, 778 tBTA_HL_MDL_ID mdl_id); 779 extern void bta_hl_check_cch_close(uint8_t app_idx, uint8_t mcl_idx, 780 tBTA_HL_DATA* p_data, bool check_dch_setup); 781 extern void bta_hl_clean_app(uint8_t app_idx); 782 extern void bta_hl_check_deregistration(uint8_t app_idx, tBTA_HL_DATA* p_data); 783 extern void bta_hl_check_disable(tBTA_HL_DATA* p_data); 784 extern void bta_hl_build_abort_ind(tBTA_HL* p_evt_data, 785 tBTA_HL_APP_HANDLE app_handle, 786 tBTA_HL_MCL_HANDLE mcl_handle); 787 extern void bta_hl_build_abort_cfm(tBTA_HL* p_evt_data, 788 tBTA_HL_APP_HANDLE app_handle, 789 tBTA_HL_MCL_HANDLE mcl_handle, 790 tBTA_HL_STATUS status); 791 extern void bta_hl_build_dch_close_cfm(tBTA_HL* p_evt_data, 792 tBTA_HL_APP_HANDLE app_handle, 793 tBTA_HL_MCL_HANDLE mcl_handle, 794 tBTA_HL_MDL_HANDLE mdl_handle, 795 tBTA_HL_STATUS status); 796 extern void bta_hl_build_dch_close_ind(tBTA_HL* p_evt_data, 797 tBTA_HL_APP_HANDLE app_handle, 798 tBTA_HL_MCL_HANDLE mcl_handle, 799 tBTA_HL_MDL_HANDLE mdl_handle, 800 bool intentional); 801 extern void bta_hl_build_send_data_cfm(tBTA_HL* p_evt_data, 802 tBTA_HL_APP_HANDLE app_handle, 803 tBTA_HL_MCL_HANDLE mcl_handle, 804 tBTA_HL_MDL_HANDLE mdl_handle, 805 tBTA_HL_STATUS status); 806 extern void bta_hl_build_rcv_data_ind(tBTA_HL* p_evt_data, 807 tBTA_HL_APP_HANDLE app_handle, 808 tBTA_HL_MCL_HANDLE mcl_handle, 809 tBTA_HL_MDL_HANDLE mdl_handle); 810 extern void bta_hl_build_cch_open_cfm(tBTA_HL* p_evt_data, uint8_t app_id, 811 tBTA_HL_APP_HANDLE app_handle, 812 tBTA_HL_MCL_HANDLE mcl_handle, 813 BD_ADDR bd_addr, tBTA_HL_STATUS status); 814 extern void bta_hl_build_cch_open_ind(tBTA_HL* p_evt_data, 815 tBTA_HL_APP_HANDLE app_handle, 816 tBTA_HL_MCL_HANDLE mcl_handle, 817 BD_ADDR bd_addr); 818 extern void bta_hl_build_cch_close_cfm(tBTA_HL* p_evt_data, 819 tBTA_HL_APP_HANDLE app_handle, 820 tBTA_HL_MCL_HANDLE mcl_handle, 821 tBTA_HL_STATUS status); 822 extern void bta_hl_build_cch_close_ind(tBTA_HL* p_evt_data, 823 tBTA_HL_APP_HANDLE app_handle, 824 tBTA_HL_MCL_HANDLE mcl_handle, 825 bool intentional); 826 827 extern void bta_hl_build_dch_open_cfm( 828 tBTA_HL* p_evt_data, tBTA_HL_APP_HANDLE app_handle, 829 tBTA_HL_MCL_HANDLE mcl_handle, tBTA_HL_MDL_HANDLE mdl_handle, 830 tBTA_HL_MDEP_ID local_mdep_id, tBTA_HL_MDL_ID mdl_id, 831 tBTA_HL_DCH_MODE dch_mode, bool first_reliable, uint16_t mtu, 832 tBTA_HL_STATUS status); 833 834 extern void bta_hl_build_delete_mdl_cfm(tBTA_HL* p_evt_data, 835 tBTA_HL_APP_HANDLE app_handle, 836 tBTA_HL_MCL_HANDLE mcl_handle, 837 tBTA_HL_MDL_ID mdl_id, 838 tBTA_HL_STATUS status); 839 extern void bta_hl_build_echo_test_cfm(tBTA_HL* p_evt_data, 840 tBTA_HL_APP_HANDLE app_handle, 841 tBTA_HL_MCL_HANDLE mcl_handle, 842 tBTA_HL_STATUS status); 843 extern void bta_hl_build_sdp_query_cfm(tBTA_HL* p_evt_data, uint8_t app_id, 844 tBTA_HL_APP_HANDLE app_handle, 845 BD_ADDR bd_addr, tBTA_HL_SDP* p_sdp, 846 tBTA_HL_STATUS status); 847 848 #if (BTA_HL_DEBUG == TRUE) 849 extern const char* bta_hl_status_code(tBTA_HL_STATUS status); 850 extern const char* bta_hl_evt_code(tBTA_HL_INT_EVT evt_code); 851 #endif 852 853 #endif /* BTA_MSE_INT_H */ 854