1 /****************************************************************************** 2 * 3 * Copyright (C) 2003-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 interface file for the BTA device manager. 22 * 23 ******************************************************************************/ 24 #ifndef BTA_DM_INT_H 25 #define BTA_DM_INT_H 26 27 #include <memory> 28 #include "bt_target.h" 29 #include "bta_sys.h" 30 31 #include "bta_gatt_api.h" 32 33 /***************************************************************************** 34 * Constants and data types 35 ****************************************************************************/ 36 37 #define BTA_COPY_DEVICE_CLASS(coddst, codsrc) \ 38 { \ 39 ((uint8_t*)(coddst))[0] = ((uint8_t*)(codsrc))[0]; \ 40 ((uint8_t*)(coddst))[1] = ((uint8_t*)(codsrc))[1]; \ 41 ((uint8_t*)(coddst))[2] = ((uint8_t*)(codsrc))[2]; \ 42 } 43 44 #define BTA_DM_MSG_LEN 50 45 46 #define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id)) 47 48 /* DM events */ 49 enum { 50 /* device manager local device API events */ 51 BTA_DM_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_DM), 52 BTA_DM_API_DISABLE_EVT, 53 BTA_DM_API_SET_NAME_EVT, 54 BTA_DM_API_SET_VISIBILITY_EVT, 55 56 BTA_DM_ACL_CHANGE_EVT, 57 BTA_DM_API_ADD_DEVICE_EVT, 58 BTA_DM_API_REMOVE_ACL_EVT, 59 60 /* security API events */ 61 BTA_DM_API_BOND_EVT, 62 BTA_DM_API_BOND_CANCEL_EVT, 63 BTA_DM_API_PIN_REPLY_EVT, 64 65 /* power manger events */ 66 BTA_DM_PM_BTM_STATUS_EVT, 67 BTA_DM_PM_TIMER_EVT, 68 69 /* simple pairing events */ 70 BTA_DM_API_CONFIRM_EVT, 71 72 BTA_DM_API_SET_ENCRYPTION_EVT, 73 74 BTA_DM_API_LOC_OOB_EVT, 75 BTA_DM_CI_IO_REQ_EVT, 76 BTA_DM_CI_RMT_OOB_EVT, 77 78 BTA_DM_API_ADD_BLEKEY_EVT, 79 BTA_DM_API_ADD_BLEDEVICE_EVT, 80 BTA_DM_API_BLE_PASSKEY_REPLY_EVT, 81 BTA_DM_API_BLE_CONFIRM_REPLY_EVT, 82 BTA_DM_API_BLE_SEC_GRANT_EVT, 83 BTA_DM_API_BLE_SET_BG_CONN_TYPE, 84 BTA_DM_API_BLE_CONN_PARAM_EVT, 85 BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT, 86 BTA_DM_API_BLE_OBSERVE_EVT, 87 BTA_DM_API_UPDATE_CONN_PARAM_EVT, 88 #if (BLE_PRIVACY_SPT == TRUE) 89 BTA_DM_API_LOCAL_PRIVACY_EVT, 90 #endif 91 BTA_DM_API_SET_DATA_LENGTH_EVT, 92 BTA_DM_API_BLE_ENERGY_INFO_EVT, 93 94 BTA_DM_API_ENABLE_TEST_MODE_EVT, 95 BTA_DM_API_DISABLE_TEST_MODE_EVT, 96 BTA_DM_API_EXECUTE_CBACK_EVT, 97 BTA_DM_API_REMOVE_ALL_ACL_EVT, 98 BTA_DM_API_REMOVE_DEVICE_EVT, 99 BTA_DM_MAX_EVT 100 }; 101 102 /* DM search events */ 103 enum { 104 /* DM search API events */ 105 BTA_DM_API_SEARCH_EVT = BTA_SYS_EVT_START(BTA_ID_DM_SEARCH), 106 BTA_DM_API_SEARCH_CANCEL_EVT, 107 BTA_DM_API_DISCOVER_EVT, 108 BTA_DM_INQUIRY_CMPL_EVT, 109 BTA_DM_REMT_NAME_EVT, 110 BTA_DM_SDP_RESULT_EVT, 111 BTA_DM_SEARCH_CMPL_EVT, 112 BTA_DM_DISCOVERY_RESULT_EVT, 113 BTA_DM_API_DI_DISCOVER_EVT, 114 BTA_DM_DISC_CLOSE_TOUT_EVT 115 116 }; 117 118 /* data type for BTA_DM_API_ENABLE_EVT */ 119 typedef struct { 120 BT_HDR hdr; 121 tBTA_DM_SEC_CBACK* p_sec_cback; 122 } tBTA_DM_API_ENABLE; 123 124 /* data type for BTA_DM_API_SET_NAME_EVT */ 125 typedef struct { 126 BT_HDR hdr; 127 BD_NAME name; /* max 248 bytes name, plus must be Null terminated */ 128 } tBTA_DM_API_SET_NAME; 129 130 /* data type for BTA_DM_API_SET_VISIBILITY_EVT */ 131 typedef struct { 132 BT_HDR hdr; 133 tBTA_DM_DISC disc_mode; 134 tBTA_DM_CONN conn_mode; 135 uint8_t pair_mode; 136 uint8_t conn_paired_only; 137 } tBTA_DM_API_SET_VISIBILITY; 138 139 enum { 140 BTA_DM_RS_NONE, /* straight API call */ 141 BTA_DM_RS_OK, /* the role switch result - successful */ 142 BTA_DM_RS_FAIL /* the role switch result - failed */ 143 }; 144 typedef uint8_t tBTA_DM_RS_RES; 145 146 /* data type for BTA_DM_API_SEARCH_EVT */ 147 typedef struct { 148 BT_HDR hdr; 149 tBTA_DM_INQ inq_params; 150 tBTA_SERVICE_MASK services; 151 tBTA_DM_SEARCH_CBACK* p_cback; 152 tBTA_DM_RS_RES rs_res; 153 uint8_t num_uuid; 154 tBT_UUID* p_uuid; 155 } tBTA_DM_API_SEARCH; 156 157 /* data type for BTA_DM_API_DISCOVER_EVT */ 158 typedef struct { 159 BT_HDR hdr; 160 BD_ADDR bd_addr; 161 tBTA_SERVICE_MASK services; 162 tBTA_DM_SEARCH_CBACK* p_cback; 163 bool sdp_search; 164 tBTA_TRANSPORT transport; 165 uint8_t num_uuid; 166 tBT_UUID* p_uuid; 167 tSDP_UUID uuid; 168 } tBTA_DM_API_DISCOVER; 169 170 /* data type for BTA_DM_API_DI_DISC_EVT */ 171 typedef struct { 172 BT_HDR hdr; 173 BD_ADDR bd_addr; 174 tBTA_DISCOVERY_DB* p_sdp_db; 175 uint32_t len; 176 tBTA_DM_SEARCH_CBACK* p_cback; 177 } tBTA_DM_API_DI_DISC; 178 179 /* data type for BTA_DM_API_BOND_EVT */ 180 typedef struct { 181 BT_HDR hdr; 182 BD_ADDR bd_addr; 183 tBTA_TRANSPORT transport; 184 } tBTA_DM_API_BOND; 185 186 /* data type for BTA_DM_API_BOND_CANCEL_EVT */ 187 typedef struct { 188 BT_HDR hdr; 189 BD_ADDR bd_addr; 190 tBTA_TRANSPORT transport; 191 } tBTA_DM_API_BOND_CANCEL; 192 193 /* data type for BTA_DM_API_PIN_REPLY_EVT */ 194 typedef struct { 195 BT_HDR hdr; 196 BD_ADDR bd_addr; 197 bool accept; 198 uint8_t pin_len; 199 uint8_t p_pin[PIN_CODE_LEN]; 200 } tBTA_DM_API_PIN_REPLY; 201 202 /* data type for BTA_DM_API_LOC_OOB_EVT */ 203 typedef struct { BT_HDR hdr; } tBTA_DM_API_LOC_OOB; 204 205 /* data type for BTA_DM_API_CONFIRM_EVT */ 206 typedef struct { 207 BT_HDR hdr; 208 BD_ADDR bd_addr; 209 bool accept; 210 } tBTA_DM_API_CONFIRM; 211 212 /* data type for BTA_DM_CI_IO_REQ_EVT */ 213 typedef struct { 214 BT_HDR hdr; 215 BD_ADDR bd_addr; 216 tBTA_IO_CAP io_cap; 217 tBTA_OOB_DATA oob_data; 218 tBTA_AUTH_REQ auth_req; 219 } tBTA_DM_CI_IO_REQ; 220 221 /* data type for BTA_DM_CI_RMT_OOB_EVT */ 222 typedef struct { 223 BT_HDR hdr; 224 BD_ADDR bd_addr; 225 BT_OCTET16 c; 226 BT_OCTET16 r; 227 bool accept; 228 } tBTA_DM_CI_RMT_OOB; 229 230 /* data type for BTA_DM_REMT_NAME_EVT */ 231 typedef struct { 232 BT_HDR hdr; 233 tBTA_DM_SEARCH result; 234 } tBTA_DM_REM_NAME; 235 236 /* data type for tBTA_DM_DISC_RESULT */ 237 typedef struct { 238 BT_HDR hdr; 239 tBTA_DM_SEARCH result; 240 } tBTA_DM_DISC_RESULT; 241 242 /* data type for BTA_DM_INQUIRY_CMPL_EVT */ 243 typedef struct { 244 BT_HDR hdr; 245 uint8_t num; 246 } tBTA_DM_INQUIRY_CMPL; 247 248 /* data type for BTA_DM_SDP_RESULT_EVT */ 249 typedef struct { 250 BT_HDR hdr; 251 uint16_t sdp_result; 252 } tBTA_DM_SDP_RESULT; 253 254 /* data type for BTA_DM_ACL_CHANGE_EVT */ 255 typedef struct { 256 BT_HDR hdr; 257 tBTM_BL_EVENT event; 258 uint8_t busy_level; 259 uint8_t busy_level_flags; 260 bool is_new; 261 uint8_t new_role; 262 BD_ADDR bd_addr; 263 uint8_t hci_status; 264 uint16_t handle; 265 tBT_TRANSPORT transport; 266 } tBTA_DM_ACL_CHANGE; 267 268 /* data type for BTA_DM_PM_BTM_STATUS_EVT */ 269 typedef struct { 270 BT_HDR hdr; 271 BD_ADDR bd_addr; 272 tBTM_PM_STATUS status; 273 uint16_t value; 274 uint8_t hci_status; 275 276 } tBTA_DM_PM_BTM_STATUS; 277 278 /* data type for BTA_DM_PM_TIMER_EVT */ 279 typedef struct { 280 BT_HDR hdr; 281 BD_ADDR bd_addr; 282 tBTA_DM_PM_ACTION pm_request; 283 } tBTA_DM_PM_TIMER; 284 285 /* data type for BTA_DM_API_ADD_DEVICE_EVT */ 286 typedef struct { 287 BT_HDR hdr; 288 BD_ADDR bd_addr; 289 DEV_CLASS dc; 290 LINK_KEY link_key; 291 tBTA_SERVICE_MASK tm; 292 bool is_trusted; 293 uint8_t key_type; 294 tBTA_IO_CAP io_cap; 295 bool link_key_known; 296 bool dc_known; 297 BD_NAME bd_name; 298 uint8_t 299 features[BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)]; 300 uint8_t pin_length; 301 } tBTA_DM_API_ADD_DEVICE; 302 303 /* data type for BTA_DM_API_REMOVE_ACL_EVT */ 304 typedef struct { 305 BT_HDR hdr; 306 BD_ADDR bd_addr; 307 } tBTA_DM_API_REMOVE_DEVICE; 308 309 /* data type for BTA_DM_API_EXECUTE_CBACK_EVT */ 310 typedef struct { 311 BT_HDR hdr; 312 void* p_param; 313 tBTA_DM_EXEC_CBACK* p_exec_cback; 314 } tBTA_DM_API_EXECUTE_CBACK; 315 316 /* data type for tBTA_DM_API_SET_ENCRYPTION */ 317 typedef struct { 318 BT_HDR hdr; 319 tBTA_TRANSPORT transport; 320 tBTA_DM_ENCRYPT_CBACK* p_callback; 321 tBTA_DM_BLE_SEC_ACT sec_act; 322 BD_ADDR bd_addr; 323 } tBTA_DM_API_SET_ENCRYPTION; 324 325 typedef struct { 326 BT_HDR hdr; 327 BD_ADDR bd_addr; 328 tBTA_LE_KEY_VALUE blekey; 329 tBTA_LE_KEY_TYPE key_type; 330 331 } tBTA_DM_API_ADD_BLEKEY; 332 333 typedef struct { 334 BT_HDR hdr; 335 BD_ADDR bd_addr; 336 tBT_DEVICE_TYPE dev_type; 337 tBLE_ADDR_TYPE addr_type; 338 339 } tBTA_DM_API_ADD_BLE_DEVICE; 340 341 typedef struct { 342 BT_HDR hdr; 343 BD_ADDR bd_addr; 344 bool accept; 345 uint32_t passkey; 346 } tBTA_DM_API_PASSKEY_REPLY; 347 348 typedef struct { 349 BT_HDR hdr; 350 BD_ADDR bd_addr; 351 tBTA_DM_BLE_SEC_GRANT res; 352 } tBTA_DM_API_BLE_SEC_GRANT; 353 354 /* set prefered BLE connection parameters for a device */ 355 typedef struct { 356 BT_HDR hdr; 357 BD_ADDR peer_bda; 358 uint16_t conn_int_min; 359 uint16_t conn_int_max; 360 uint16_t supervision_tout; 361 uint16_t slave_latency; 362 363 } tBTA_DM_API_BLE_CONN_PARAMS; 364 365 typedef struct { 366 BT_HDR hdr; 367 BD_ADDR peer_bda; 368 bool privacy_enable; 369 370 } tBTA_DM_API_ENABLE_PRIVACY; 371 372 typedef struct { 373 BT_HDR hdr; 374 bool privacy_enable; 375 } tBTA_DM_API_LOCAL_PRIVACY; 376 377 /* set scan parameter for BLE connections */ 378 typedef struct { 379 BT_HDR hdr; 380 tBTA_GATTC_IF client_if; 381 uint32_t scan_int; 382 uint32_t scan_window; 383 tBLE_SCAN_MODE scan_mode; 384 tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback; 385 } tBTA_DM_API_BLE_SCAN_PARAMS; 386 387 /* set scan parameter for BLE connections */ 388 typedef struct { 389 BT_HDR hdr; 390 uint16_t scan_int; 391 uint16_t scan_window; 392 } tBTA_DM_API_BLE_CONN_SCAN_PARAMS; 393 394 /* Data type for start/stop observe */ 395 typedef struct { 396 BT_HDR hdr; 397 bool start; 398 uint16_t duration; 399 tBTA_DM_SEARCH_CBACK* p_cback; 400 } tBTA_DM_API_BLE_OBSERVE; 401 402 typedef struct { 403 BT_HDR hdr; 404 BD_ADDR remote_bda; 405 uint16_t tx_data_length; 406 } tBTA_DM_API_BLE_SET_DATA_LENGTH; 407 408 /* set adv parameter for BLE advertising */ 409 410 typedef struct { 411 BT_HDR hdr; 412 bool enable; 413 414 } tBTA_DM_API_BLE_FEATURE; 415 416 typedef struct { 417 BT_HDR hdr; 418 tBTA_BLE_ENERGY_INFO_CBACK* p_energy_info_cback; 419 } tBTA_DM_API_ENERGY_INFO; 420 421 /* data type for BTA_DM_API_REMOVE_ACL_EVT */ 422 typedef struct { 423 BT_HDR hdr; 424 BD_ADDR bd_addr; 425 bool remove_dev; 426 tBTA_TRANSPORT transport; 427 428 } tBTA_DM_API_REMOVE_ACL; 429 430 /* data type for BTA_DM_API_REMOVE_ALL_ACL_EVT */ 431 typedef struct { 432 BT_HDR hdr; 433 tBTA_DM_LINK_TYPE link_type; 434 435 } tBTA_DM_API_REMOVE_ALL_ACL; 436 typedef struct { 437 BT_HDR hdr; 438 BD_ADDR bd_addr; 439 uint16_t min_int; 440 uint16_t max_int; 441 uint16_t latency; 442 uint16_t timeout; 443 } tBTA_DM_API_UPDATE_CONN_PARAM; 444 445 /* union of all data types */ 446 typedef union { 447 /* GKI event buffer header */ 448 BT_HDR hdr; 449 tBTA_DM_API_ENABLE enable; 450 451 tBTA_DM_API_SET_NAME set_name; 452 453 tBTA_DM_API_SET_VISIBILITY set_visibility; 454 455 tBTA_DM_API_ADD_DEVICE add_dev; 456 457 tBTA_DM_API_REMOVE_DEVICE remove_dev; 458 459 tBTA_DM_API_SEARCH search; 460 461 tBTA_DM_API_DISCOVER discover; 462 463 tBTA_DM_API_BOND bond; 464 465 tBTA_DM_API_BOND_CANCEL bond_cancel; 466 467 tBTA_DM_API_PIN_REPLY pin_reply; 468 469 tBTA_DM_API_LOC_OOB loc_oob; 470 tBTA_DM_API_CONFIRM confirm; 471 tBTA_DM_CI_IO_REQ ci_io_req; 472 tBTA_DM_CI_RMT_OOB ci_rmt_oob; 473 474 tBTA_DM_REM_NAME rem_name; 475 476 tBTA_DM_DISC_RESULT disc_result; 477 478 tBTA_DM_INQUIRY_CMPL inq_cmpl; 479 480 tBTA_DM_SDP_RESULT sdp_event; 481 482 tBTA_DM_ACL_CHANGE acl_change; 483 484 tBTA_DM_PM_BTM_STATUS pm_status; 485 486 tBTA_DM_PM_TIMER pm_timer; 487 488 tBTA_DM_API_DI_DISC di_disc; 489 490 tBTA_DM_API_EXECUTE_CBACK exec_cback; 491 492 tBTA_DM_API_SET_ENCRYPTION set_encryption; 493 494 tBTA_DM_API_ADD_BLEKEY add_ble_key; 495 tBTA_DM_API_ADD_BLE_DEVICE add_ble_device; 496 tBTA_DM_API_PASSKEY_REPLY ble_passkey_reply; 497 tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant; 498 tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params; 499 tBTA_DM_API_BLE_CONN_SCAN_PARAMS ble_set_conn_scan_params; 500 tBTA_DM_API_BLE_OBSERVE ble_observe; 501 tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy; 502 tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy; 503 tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params; 504 tBTA_DM_API_BLE_SET_DATA_LENGTH ble_set_data_length; 505 506 tBTA_DM_API_ENERGY_INFO ble_energy_info; 507 508 tBTA_DM_API_REMOVE_ACL remove_acl; 509 tBTA_DM_API_REMOVE_ALL_ACL remove_all_acl; 510 511 } tBTA_DM_MSG; 512 513 #define BTA_DM_NUM_PEER_DEVICE 7 514 515 #define BTA_DM_NOT_CONNECTED 0 516 #define BTA_DM_CONNECTED 1 517 #define BTA_DM_UNPAIRING 2 518 typedef uint8_t tBTA_DM_CONN_STATE; 519 520 #define BTA_DM_DI_NONE 0x00 /* nothing special */ 521 #define BTA_DM_DI_USE_SSR \ 522 0x10 /* set this bit if ssr is supported for this link */ 523 #define BTA_DM_DI_AV_ACTIVE \ 524 0x20 /* set this bit if AV is active for this link */ 525 #define BTA_DM_DI_SET_SNIFF \ 526 0x01 /* set this bit if call BTM_SetPowerMode(sniff) */ 527 #define BTA_DM_DI_INT_SNIFF \ 528 0x02 /* set this bit if call BTM_SetPowerMode(sniff) & enter sniff mode */ 529 #define BTA_DM_DI_ACP_SNIFF 0x04 /* set this bit if peer init sniff */ 530 typedef uint8_t tBTA_DM_DEV_INFO; 531 532 /* set power mode request type */ 533 #define BTA_DM_PM_RESTART 1 534 #define BTA_DM_PM_NEW_REQ 2 535 #define BTA_DM_PM_EXECUTE 3 536 typedef uint8_t tBTA_DM_PM_REQ; 537 538 typedef struct { 539 BD_ADDR peer_bdaddr; 540 uint16_t link_policy; 541 tBTA_DM_CONN_STATE conn_state; 542 tBTA_PREF_ROLES pref_role; 543 bool in_use; 544 tBTA_DM_DEV_INFO info; 545 tBTA_DM_ENCRYPT_CBACK* p_encrypt_cback; 546 #if (BTM_SSR_INCLUDED == TRUE) 547 tBTM_PM_STATUS prev_low; /* previous low power mode used */ 548 #endif 549 tBTA_DM_PM_ACTION pm_mode_attempted; 550 tBTA_DM_PM_ACTION pm_mode_failed; 551 bool remove_dev_pending; 552 uint16_t conn_handle; 553 tBT_TRANSPORT transport; 554 } tBTA_DM_PEER_DEVICE; 555 556 /* structure to store list of 557 active connections */ 558 typedef struct { 559 tBTA_DM_PEER_DEVICE peer_device[BTA_DM_NUM_PEER_DEVICE]; 560 uint8_t count; 561 uint8_t le_count; 562 } tBTA_DM_ACTIVE_LINK; 563 564 typedef struct { 565 BD_ADDR peer_bdaddr; 566 tBTA_SYS_ID id; 567 uint8_t app_id; 568 tBTA_SYS_CONN_STATUS state; 569 bool new_request; 570 571 } tBTA_DM_SRVCS; 572 573 #ifndef BTA_DM_NUM_CONN_SRVS 574 #define BTA_DM_NUM_CONN_SRVS 10 575 #endif 576 577 typedef struct { 578 uint8_t count; 579 tBTA_DM_SRVCS conn_srvc[BTA_DM_NUM_CONN_SRVS]; 580 581 } tBTA_DM_CONNECTED_SRVCS; 582 583 typedef struct { 584 #define BTA_DM_PM_SNIFF_TIMER_IDX 0 585 #define BTA_DM_PM_PARK_TIMER_IDX 1 586 #define BTA_DM_PM_SUSPEND_TIMER_IDX 2 587 #define BTA_DM_PM_MODE_TIMER_MAX 3 588 /* 589 * Keep three different timers for PARK, SNIFF and SUSPEND if TBFC is 590 * supported. 591 */ 592 alarm_t* timer[BTA_DM_PM_MODE_TIMER_MAX]; 593 594 uint8_t srvc_id[BTA_DM_PM_MODE_TIMER_MAX]; 595 uint8_t pm_action[BTA_DM_PM_MODE_TIMER_MAX]; 596 uint8_t active; /* number of active timer */ 597 598 BD_ADDR peer_bdaddr; 599 bool in_use; 600 } tBTA_PM_TIMER; 601 602 extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; 603 604 #define BTA_DM_NUM_PM_TIMER 7 605 606 /* DM control block */ 607 typedef struct { 608 bool is_bta_dm_active; 609 tBTA_DM_ACTIVE_LINK device_list; 610 tBTA_DM_SEC_CBACK* p_sec_cback; 611 tBTA_BLE_ENERGY_INFO_CBACK* p_energy_info_cback; 612 uint16_t state; 613 bool disabling; 614 alarm_t* disable_timer; 615 uint32_t wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */ 616 uint8_t wbt_scn; /* WIDCOMM Extensions SCN */ 617 uint8_t num_master_only; 618 uint8_t pm_id; 619 tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER]; 620 uint32_t 621 role_policy_mask; /* the bits set indicates the modules that wants to 622 remove role switch from the default link policy */ 623 uint16_t cur_policy; /* current default link policy */ 624 uint16_t rs_event; /* the event waiting for role switch */ 625 uint8_t cur_av_count; /* current AV connecions */ 626 bool disable_pair_mode; /* disable pair mode or not */ 627 bool conn_paired_only; /* allow connectable to paired device only or not */ 628 tBTA_DM_API_SEARCH search_msg; 629 uint16_t page_scan_interval; 630 uint16_t page_scan_window; 631 uint16_t inquiry_scan_interval; 632 uint16_t inquiry_scan_window; 633 634 /* Storage for pin code request parameters */ 635 BD_ADDR pin_bd_addr; 636 DEV_CLASS pin_dev_class; 637 tBTA_DM_SEC_EVT pin_evt; 638 uint32_t num_val; /* the numeric value for comparison. If just_works, do not 639 show this number to UI */ 640 bool just_works; /* true, if "Just Works" association model */ 641 #if (BTA_EIR_CANNED_UUID_LIST != TRUE) 642 /* store UUID list for EIR */ 643 uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; 644 #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) 645 tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; 646 #endif 647 648 #endif 649 650 tBTA_DM_ENCRYPT_CBACK* p_encrypt_cback; 651 alarm_t* switch_delay_timer; 652 653 } tBTA_DM_CB; 654 655 /* DM search control block */ 656 typedef struct { 657 tBTA_DM_SEARCH_CBACK* p_search_cback; 658 tBTM_INQ_INFO* p_btm_inq_info; 659 tBTA_SERVICE_MASK services; 660 tBTA_SERVICE_MASK services_to_search; 661 tBTA_SERVICE_MASK services_found; 662 tSDP_DISCOVERY_DB* p_sdp_db; 663 uint16_t state; 664 BD_ADDR peer_bdaddr; 665 bool name_discover_done; 666 BD_NAME peer_name; 667 alarm_t* search_timer; 668 uint8_t service_index; 669 tBTA_DM_MSG* p_search_queue; /* search or discover commands during search 670 cancel stored here */ 671 bool wait_disc; 672 bool sdp_results; 673 tSDP_UUID uuid; 674 uint8_t peer_scn; 675 bool sdp_search; 676 bool cancel_pending; /* inquiry cancel is pending */ 677 tBTA_TRANSPORT transport; 678 tBTA_DM_SEARCH_CBACK* p_scan_cback; 679 tBTA_GATTC_IF client_if; 680 uint8_t num_uuid; 681 tBT_UUID* p_srvc_uuid; 682 uint8_t uuid_to_search; 683 bool gatt_disc_active; 684 uint16_t conn_id; 685 uint8_t* p_ble_rawdata; 686 uint32_t ble_raw_size; 687 uint32_t ble_raw_used; 688 alarm_t* gatt_close_timer; /* GATT channel close delay timer */ 689 BD_ADDR pending_close_bda; /* pending GATT channel remote device address */ 690 691 } tBTA_DM_SEARCH_CB; 692 693 /* DI control block */ 694 typedef struct { 695 tSDP_DISCOVERY_DB* p_di_db; /* pointer to the DI discovery database */ 696 uint8_t di_num; /* total local DI record number */ 697 uint32_t di_handle[BTA_DI_NUM_MAX]; /* local DI record handle, the first one 698 is primary record */ 699 } tBTA_DM_DI_CB; 700 701 /* DM search state */ 702 enum { 703 704 BTA_DM_SEARCH_IDLE, 705 BTA_DM_SEARCH_ACTIVE, 706 BTA_DM_SEARCH_CANCELLING, 707 BTA_DM_DISCOVER_ACTIVE 708 709 }; 710 711 typedef struct { 712 DEV_CLASS dev_class; /* local device class */ 713 uint16_t 714 policy_settings; /* link policy setting hold, sniff, park, MS switch */ 715 uint16_t page_timeout; /* timeout for page in slots */ 716 uint16_t link_timeout; /* link supervision timeout in slots */ 717 bool avoid_scatter; /* true to avoid scatternet when av is streaming (be the 718 master) */ 719 720 } tBTA_DM_CFG; 721 722 extern const uint32_t bta_service_id_to_btm_srv_id_lkup_tbl[]; 723 724 typedef struct { 725 uint8_t id; 726 uint8_t app_id; 727 uint8_t cfg; 728 729 } tBTA_DM_RM; 730 731 extern tBTA_DM_CFG* p_bta_dm_cfg; 732 extern tBTA_DM_RM* p_bta_dm_rm_cfg; 733 734 typedef struct { 735 uint8_t id; 736 uint8_t app_id; 737 uint8_t spec_idx; /* index of spec table to use */ 738 739 } tBTA_DM_PM_CFG; 740 741 typedef struct { 742 tBTA_DM_PM_ACTION power_mode; 743 uint16_t timeout; 744 745 } tBTA_DM_PM_ACTN; 746 747 typedef struct { 748 uint8_t allow_mask; /* mask of sniff/hold/park modes to allow */ 749 #if (BTM_SSR_INCLUDED == TRUE) 750 uint8_t ssr; /* set SSR on conn open/unpark */ 751 #endif 752 tBTA_DM_PM_ACTN actn_tbl[BTA_DM_PM_NUM_EVTS][2]; 753 754 } tBTA_DM_PM_SPEC; 755 756 typedef struct { 757 uint16_t max_lat; 758 uint16_t min_rmt_to; 759 uint16_t min_loc_to; 760 } tBTA_DM_SSR_SPEC; 761 762 typedef struct { 763 uint16_t manufacturer; 764 uint16_t lmp_sub_version; 765 uint8_t lmp_version; 766 } tBTA_DM_LMP_VER_INFO; 767 768 extern const uint16_t bta_service_id_to_uuid_lkup_tbl[]; 769 770 extern tBTA_DM_PM_CFG* p_bta_dm_pm_cfg; 771 extern tBTA_DM_PM_SPEC* p_bta_dm_pm_spec; 772 extern tBTM_PM_PWR_MD* p_bta_dm_pm_md; 773 #if (BTM_SSR_INCLUDED == TRUE) 774 extern tBTA_DM_SSR_SPEC* p_bta_dm_ssr_spec; 775 #endif 776 777 /* update dynamic BRCM Aware EIR data */ 778 extern const tBTA_DM_EIR_CONF bta_dm_eir_cfg; 779 extern tBTA_DM_EIR_CONF* p_bta_dm_eir_cfg; 780 781 /* DM control block */ 782 extern tBTA_DM_CB bta_dm_cb; 783 784 /* DM search control block */ 785 extern tBTA_DM_SEARCH_CB bta_dm_search_cb; 786 787 /* DI control block */ 788 extern tBTA_DM_DI_CB bta_dm_di_cb; 789 790 extern bool bta_dm_sm_execute(BT_HDR* p_msg); 791 extern void bta_dm_sm_disable(void); 792 extern bool bta_dm_search_sm_execute(BT_HDR* p_msg); 793 extern void bta_dm_search_sm_disable(void); 794 795 extern void bta_dm_enable(tBTA_DM_MSG* p_data); 796 extern void bta_dm_disable(tBTA_DM_MSG* p_data); 797 extern void bta_dm_init_cb(void); 798 extern void bta_dm_set_dev_name(tBTA_DM_MSG* p_data); 799 extern void bta_dm_set_visibility(tBTA_DM_MSG* p_data); 800 801 extern void bta_dm_set_scan_config(tBTA_DM_MSG* p_data); 802 extern void bta_dm_vendor_spec_command(tBTA_DM_MSG* p_data); 803 extern void bta_dm_bond(tBTA_DM_MSG* p_data); 804 extern void bta_dm_bond_cancel(tBTA_DM_MSG* p_data); 805 extern void bta_dm_pin_reply(tBTA_DM_MSG* p_data); 806 extern void bta_dm_acl_change(tBTA_DM_MSG* p_data); 807 extern void bta_dm_add_device(tBTA_DM_MSG* p_data); 808 extern void bta_dm_remove_device(tBTA_DM_MSG* p_data); 809 extern void bta_dm_close_acl(tBTA_DM_MSG* p_data); 810 811 extern void bta_dm_pm_btm_status(tBTA_DM_MSG* p_data); 812 extern void bta_dm_pm_timer(tBTA_DM_MSG* p_data); 813 extern void bta_dm_add_ampkey(tBTA_DM_MSG* p_data); 814 815 extern void bta_dm_add_blekey(tBTA_DM_MSG* p_data); 816 extern void bta_dm_add_ble_device(tBTA_DM_MSG* p_data); 817 extern void bta_dm_ble_passkey_reply(tBTA_DM_MSG* p_data); 818 extern void bta_dm_ble_confirm_reply(tBTA_DM_MSG* p_data); 819 extern void bta_dm_security_grant(tBTA_DM_MSG* p_data); 820 extern void bta_dm_ble_set_bg_conn_type(tBTA_DM_MSG* p_data); 821 extern void bta_dm_ble_set_conn_params(tBTA_DM_MSG* p_data); 822 extern void bta_dm_ble_set_conn_scan_params(tBTA_DM_MSG* p_data); 823 extern void bta_dm_close_gatt_conn(tBTA_DM_MSG* p_data); 824 extern void bta_dm_ble_observe(tBTA_DM_MSG* p_data); 825 extern void bta_dm_ble_update_conn_params(tBTA_DM_MSG* p_data); 826 extern void bta_dm_ble_config_local_privacy(tBTA_DM_MSG* p_data); 827 extern void bta_dm_ble_set_adv_params(uint16_t adv_int_min, 828 uint16_t adv_int_max, 829 tBLE_BD_ADDR* p_dir_bda); 830 831 extern void bta_dm_ble_set_data_length(tBTA_DM_MSG* p_data); 832 833 extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG* p_data); 834 835 extern void bta_dm_set_encryption(tBTA_DM_MSG* p_data); 836 extern void bta_dm_confirm(tBTA_DM_MSG* p_data); 837 extern void bta_dm_loc_oob(tBTA_DM_MSG* p_data); 838 extern void bta_dm_ci_io_req_act(tBTA_DM_MSG* p_data); 839 extern void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG* p_data); 840 841 extern void bta_dm_init_pm(void); 842 extern void bta_dm_disable_pm(void); 843 844 extern uint8_t bta_dm_get_av_count(void); 845 extern void bta_dm_search_start(tBTA_DM_MSG* p_data); 846 extern void bta_dm_search_cancel(tBTA_DM_MSG* p_data); 847 extern void bta_dm_discover(tBTA_DM_MSG* p_data); 848 extern void bta_dm_di_disc(tBTA_DM_MSG* p_data); 849 extern void bta_dm_inq_cmpl(tBTA_DM_MSG* p_data); 850 extern void bta_dm_rmt_name(tBTA_DM_MSG* p_data); 851 extern void bta_dm_sdp_result(tBTA_DM_MSG* p_data); 852 extern void bta_dm_search_cmpl(tBTA_DM_MSG* p_data); 853 extern void bta_dm_free_sdp_db(tBTA_DM_MSG* p_data); 854 extern void bta_dm_disc_result(tBTA_DM_MSG* p_data); 855 extern void bta_dm_search_result(tBTA_DM_MSG* p_data); 856 extern void bta_dm_discovery_cmpl(tBTA_DM_MSG* p_data); 857 extern void bta_dm_queue_search(tBTA_DM_MSG* p_data); 858 extern void bta_dm_queue_disc(tBTA_DM_MSG* p_data); 859 extern void bta_dm_search_clear_queue(tBTA_DM_MSG* p_data); 860 extern void bta_dm_search_cancel_cmpl(tBTA_DM_MSG* p_data); 861 extern void bta_dm_search_cancel_notify(tBTA_DM_MSG* p_data); 862 extern void bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG* p_data); 863 extern void bta_dm_disc_rmt_name(tBTA_DM_MSG* p_data); 864 extern tBTA_DM_PEER_DEVICE* bta_dm_find_peer_device(const BD_ADDR peer_addr); 865 866 void bta_dm_eir_update_uuid(uint16_t uuid16, bool adding); 867 868 extern void bta_dm_enable_test_mode(tBTA_DM_MSG* p_data); 869 extern void bta_dm_disable_test_mode(tBTA_DM_MSG* p_data); 870 extern void bta_dm_execute_callback(tBTA_DM_MSG* p_data); 871 872 extern void bta_dm_remove_all_acl(tBTA_DM_MSG* p_data); 873 #endif /* BTA_DM_INT_H */ 874