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