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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress bd_addr; 323 } tBTA_DM_API_SET_ENCRYPTION; 324 325 typedef struct { 326 BT_HDR hdr; 327 RawAddress 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 RawAddress 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 RawAddress bd_addr; 344 bool accept; 345 uint32_t passkey; 346 } tBTA_DM_API_PASSKEY_REPLY; 347 348 typedef struct { 349 BT_HDR hdr; 350 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress 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 RawAddress bd_addr; 425 bool remove_dev; 426 tBTA_TRANSPORT transport; 427 } tBTA_DM_API_REMOVE_ACL; 428 429 /* data type for BTA_DM_API_REMOVE_ALL_ACL_EVT */ 430 typedef struct { 431 BT_HDR hdr; 432 tBTA_DM_LINK_TYPE link_type; 433 434 } tBTA_DM_API_REMOVE_ALL_ACL; 435 typedef struct { 436 BT_HDR hdr; 437 RawAddress bd_addr; 438 uint16_t min_int; 439 uint16_t max_int; 440 uint16_t latency; 441 uint16_t timeout; 442 } tBTA_DM_API_UPDATE_CONN_PARAM; 443 444 /* union of all data types */ 445 typedef union { 446 /* GKI event buffer header */ 447 BT_HDR hdr; 448 tBTA_DM_API_ENABLE enable; 449 450 tBTA_DM_API_SET_NAME set_name; 451 452 tBTA_DM_API_SET_VISIBILITY set_visibility; 453 454 tBTA_DM_API_ADD_DEVICE add_dev; 455 456 tBTA_DM_API_REMOVE_DEVICE remove_dev; 457 458 tBTA_DM_API_SEARCH search; 459 460 tBTA_DM_API_DISCOVER discover; 461 462 tBTA_DM_API_BOND bond; 463 464 tBTA_DM_API_BOND_CANCEL bond_cancel; 465 466 tBTA_DM_API_PIN_REPLY pin_reply; 467 468 tBTA_DM_API_LOC_OOB loc_oob; 469 tBTA_DM_API_CONFIRM confirm; 470 tBTA_DM_CI_IO_REQ ci_io_req; 471 tBTA_DM_CI_RMT_OOB ci_rmt_oob; 472 473 tBTA_DM_REM_NAME rem_name; 474 475 tBTA_DM_DISC_RESULT disc_result; 476 477 tBTA_DM_INQUIRY_CMPL inq_cmpl; 478 479 tBTA_DM_SDP_RESULT sdp_event; 480 481 tBTA_DM_ACL_CHANGE acl_change; 482 483 tBTA_DM_PM_BTM_STATUS pm_status; 484 485 tBTA_DM_PM_TIMER pm_timer; 486 487 tBTA_DM_API_DI_DISC di_disc; 488 489 tBTA_DM_API_EXECUTE_CBACK exec_cback; 490 491 tBTA_DM_API_SET_ENCRYPTION set_encryption; 492 493 tBTA_DM_API_ADD_BLEKEY add_ble_key; 494 tBTA_DM_API_ADD_BLE_DEVICE add_ble_device; 495 tBTA_DM_API_PASSKEY_REPLY ble_passkey_reply; 496 tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant; 497 tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params; 498 tBTA_DM_API_BLE_CONN_SCAN_PARAMS ble_set_conn_scan_params; 499 tBTA_DM_API_BLE_OBSERVE ble_observe; 500 tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy; 501 tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy; 502 tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params; 503 tBTA_DM_API_BLE_SET_DATA_LENGTH ble_set_data_length; 504 505 tBTA_DM_API_ENERGY_INFO ble_energy_info; 506 507 tBTA_DM_API_REMOVE_ACL remove_acl; 508 tBTA_DM_API_REMOVE_ALL_ACL remove_all_acl; 509 510 } tBTA_DM_MSG; 511 512 #define BTA_DM_NUM_PEER_DEVICE 7 513 514 #define BTA_DM_NOT_CONNECTED 0 515 #define BTA_DM_CONNECTED 1 516 #define BTA_DM_UNPAIRING 2 517 typedef uint8_t tBTA_DM_CONN_STATE; 518 519 #define BTA_DM_DI_NONE 0x00 /* nothing special */ 520 #define BTA_DM_DI_USE_SSR \ 521 0x10 /* set this bit if ssr is supported for this link */ 522 #define BTA_DM_DI_AV_ACTIVE \ 523 0x20 /* set this bit if AV is active for this link */ 524 #define BTA_DM_DI_SET_SNIFF \ 525 0x01 /* set this bit if call BTM_SetPowerMode(sniff) */ 526 #define BTA_DM_DI_INT_SNIFF \ 527 0x02 /* set this bit if call BTM_SetPowerMode(sniff) & enter sniff mode */ 528 #define BTA_DM_DI_ACP_SNIFF 0x04 /* set this bit if peer init sniff */ 529 typedef uint8_t tBTA_DM_DEV_INFO; 530 531 /* set power mode request type */ 532 #define BTA_DM_PM_RESTART 1 533 #define BTA_DM_PM_NEW_REQ 2 534 #define BTA_DM_PM_EXECUTE 3 535 typedef uint8_t tBTA_DM_PM_REQ; 536 537 typedef struct { 538 RawAddress peer_bdaddr; 539 uint16_t link_policy; 540 tBTA_DM_CONN_STATE conn_state; 541 tBTA_PREF_ROLES pref_role; 542 bool in_use; 543 tBTA_DM_DEV_INFO info; 544 tBTA_DM_ENCRYPT_CBACK* p_encrypt_cback; 545 #if (BTM_SSR_INCLUDED == TRUE) 546 tBTM_PM_STATUS prev_low; /* previous low power mode used */ 547 #endif 548 tBTA_DM_PM_ACTION pm_mode_attempted; 549 tBTA_DM_PM_ACTION pm_mode_failed; 550 bool remove_dev_pending; 551 uint16_t conn_handle; 552 tBT_TRANSPORT transport; 553 } tBTA_DM_PEER_DEVICE; 554 555 /* structure to store list of 556 active connections */ 557 typedef struct { 558 tBTA_DM_PEER_DEVICE peer_device[BTA_DM_NUM_PEER_DEVICE]; 559 uint8_t count; 560 uint8_t le_count; 561 } tBTA_DM_ACTIVE_LINK; 562 563 typedef struct { 564 RawAddress peer_bdaddr; 565 tBTA_SYS_ID id; 566 uint8_t app_id; 567 tBTA_SYS_CONN_STATUS state; 568 bool new_request; 569 570 } tBTA_DM_SRVCS; 571 572 #ifndef BTA_DM_NUM_CONN_SRVS 573 #define BTA_DM_NUM_CONN_SRVS 10 574 #endif 575 576 typedef struct { 577 uint8_t count; 578 tBTA_DM_SRVCS conn_srvc[BTA_DM_NUM_CONN_SRVS]; 579 580 } tBTA_DM_CONNECTED_SRVCS; 581 582 typedef struct { 583 #define BTA_DM_PM_SNIFF_TIMER_IDX 0 584 #define BTA_DM_PM_PARK_TIMER_IDX 1 585 #define BTA_DM_PM_SUSPEND_TIMER_IDX 2 586 #define BTA_DM_PM_MODE_TIMER_MAX 3 587 /* 588 * Keep three different timers for PARK, SNIFF and SUSPEND if TBFC is 589 * supported. 590 */ 591 alarm_t* timer[BTA_DM_PM_MODE_TIMER_MAX]; 592 593 uint8_t srvc_id[BTA_DM_PM_MODE_TIMER_MAX]; 594 uint8_t pm_action[BTA_DM_PM_MODE_TIMER_MAX]; 595 uint8_t active; /* number of active timer */ 596 597 RawAddress peer_bdaddr; 598 bool in_use; 599 } tBTA_PM_TIMER; 600 601 extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs; 602 603 #define BTA_DM_NUM_PM_TIMER 7 604 605 /* DM control block */ 606 typedef struct { 607 bool is_bta_dm_active; 608 tBTA_DM_ACTIVE_LINK device_list; 609 tBTA_DM_SEC_CBACK* p_sec_cback; 610 tBTA_BLE_ENERGY_INFO_CBACK* p_energy_info_cback; 611 uint16_t state; 612 bool disabling; 613 alarm_t* disable_timer; 614 uint32_t wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */ 615 uint8_t wbt_scn; /* WIDCOMM Extensions SCN */ 616 uint8_t num_master_only; 617 uint8_t pm_id; 618 tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER]; 619 uint32_t 620 role_policy_mask; /* the bits set indicates the modules that wants to 621 remove role switch from the default link policy */ 622 uint16_t cur_policy; /* current default link policy */ 623 uint16_t rs_event; /* the event waiting for role switch */ 624 uint8_t cur_av_count; /* current AV connecions */ 625 bool disable_pair_mode; /* disable pair mode or not */ 626 bool conn_paired_only; /* allow connectable to paired device only or not */ 627 tBTA_DM_API_SEARCH search_msg; 628 uint16_t page_scan_interval; 629 uint16_t page_scan_window; 630 uint16_t inquiry_scan_interval; 631 uint16_t inquiry_scan_window; 632 633 /* Storage for pin code request parameters */ 634 RawAddress pin_bd_addr; 635 DEV_CLASS pin_dev_class; 636 tBTA_DM_SEC_EVT pin_evt; 637 uint32_t num_val; /* the numeric value for comparison. If just_works, do not 638 show this number to UI */ 639 bool just_works; /* true, if "Just Works" association model */ 640 #if (BTA_EIR_CANNED_UUID_LIST != TRUE) 641 /* store UUID list for EIR */ 642 uint32_t eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE]; 643 #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0) 644 tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID]; 645 #endif 646 647 #endif 648 649 tBTA_DM_ENCRYPT_CBACK* p_encrypt_cback; 650 alarm_t* switch_delay_timer; 651 652 } tBTA_DM_CB; 653 654 /* DM search control block */ 655 typedef struct { 656 tBTA_DM_SEARCH_CBACK* p_search_cback; 657 tBTM_INQ_INFO* p_btm_inq_info; 658 tBTA_SERVICE_MASK services; 659 tBTA_SERVICE_MASK services_to_search; 660 tBTA_SERVICE_MASK services_found; 661 tSDP_DISCOVERY_DB* p_sdp_db; 662 uint16_t state; 663 RawAddress peer_bdaddr; 664 bool name_discover_done; 665 BD_NAME peer_name; 666 alarm_t* search_timer; 667 uint8_t service_index; 668 tBTA_DM_MSG* p_search_queue; /* search or discover commands during search 669 cancel stored here */ 670 bool wait_disc; 671 bool sdp_results; 672 tSDP_UUID uuid; 673 uint8_t peer_scn; 674 bool sdp_search; 675 bool cancel_pending; /* inquiry cancel is pending */ 676 tBTA_TRANSPORT transport; 677 tBTA_DM_SEARCH_CBACK* p_scan_cback; 678 tBTA_GATTC_IF client_if; 679 uint8_t num_uuid; 680 tBT_UUID* p_srvc_uuid; 681 uint8_t uuid_to_search; 682 bool gatt_disc_active; 683 uint16_t conn_id; 684 uint8_t* p_ble_rawdata; 685 uint32_t ble_raw_size; 686 uint32_t ble_raw_used; 687 alarm_t* gatt_close_timer; /* GATT channel close delay timer */ 688 RawAddress pending_close_bda; /* pending GATT channel remote device address */ 689 690 } tBTA_DM_SEARCH_CB; 691 692 /* DI control block */ 693 typedef struct { 694 tSDP_DISCOVERY_DB* p_di_db; /* pointer to the DI discovery database */ 695 uint8_t di_num; /* total local DI record number */ 696 uint32_t di_handle[BTA_DI_NUM_MAX]; /* local DI record handle, the first one 697 is primary record */ 698 } tBTA_DM_DI_CB; 699 700 /* DM search state */ 701 enum { 702 703 BTA_DM_SEARCH_IDLE, 704 BTA_DM_SEARCH_ACTIVE, 705 BTA_DM_SEARCH_CANCELLING, 706 BTA_DM_DISCOVER_ACTIVE 707 708 }; 709 710 typedef struct { 711 DEV_CLASS dev_class; /* local device class */ 712 uint16_t 713 policy_settings; /* link policy setting hold, sniff, park, MS switch */ 714 uint16_t page_timeout; /* timeout for page in slots */ 715 uint16_t link_timeout; /* link supervision timeout in slots */ 716 bool avoid_scatter; /* true to avoid scatternet when av is streaming (be the 717 master) */ 718 719 } tBTA_DM_CFG; 720 721 extern const uint32_t bta_service_id_to_btm_srv_id_lkup_tbl[]; 722 723 typedef struct { 724 uint8_t id; 725 uint8_t app_id; 726 uint8_t cfg; 727 728 } tBTA_DM_RM; 729 730 extern tBTA_DM_CFG* p_bta_dm_cfg; 731 extern tBTA_DM_RM* p_bta_dm_rm_cfg; 732 733 typedef struct { 734 uint8_t id; 735 uint8_t app_id; 736 uint8_t spec_idx; /* index of spec table to use */ 737 738 } tBTA_DM_PM_CFG; 739 740 typedef struct { 741 tBTA_DM_PM_ACTION power_mode; 742 uint16_t timeout; 743 744 } tBTA_DM_PM_ACTN; 745 746 typedef struct { 747 uint8_t allow_mask; /* mask of sniff/hold/park modes to allow */ 748 #if (BTM_SSR_INCLUDED == TRUE) 749 uint8_t ssr; /* set SSR on conn open/unpark */ 750 #endif 751 tBTA_DM_PM_ACTN actn_tbl[BTA_DM_PM_NUM_EVTS][2]; 752 753 } tBTA_DM_PM_SPEC; 754 755 typedef struct { 756 uint16_t max_lat; 757 uint16_t min_rmt_to; 758 uint16_t min_loc_to; 759 } tBTA_DM_SSR_SPEC; 760 761 typedef struct { 762 uint16_t manufacturer; 763 uint16_t lmp_sub_version; 764 uint8_t lmp_version; 765 } tBTA_DM_LMP_VER_INFO; 766 767 extern const uint16_t bta_service_id_to_uuid_lkup_tbl[]; 768 769 extern tBTA_DM_PM_CFG* p_bta_dm_pm_cfg; 770 extern tBTA_DM_PM_SPEC* p_bta_dm_pm_spec; 771 extern tBTM_PM_PWR_MD* p_bta_dm_pm_md; 772 #if (BTM_SSR_INCLUDED == TRUE) 773 extern tBTA_DM_SSR_SPEC* p_bta_dm_ssr_spec; 774 #endif 775 776 /* update dynamic BRCM Aware EIR data */ 777 extern const tBTA_DM_EIR_CONF bta_dm_eir_cfg; 778 extern tBTA_DM_EIR_CONF* p_bta_dm_eir_cfg; 779 780 /* DM control block */ 781 extern tBTA_DM_CB bta_dm_cb; 782 783 /* DM search control block */ 784 extern tBTA_DM_SEARCH_CB bta_dm_search_cb; 785 786 /* DI control block */ 787 extern tBTA_DM_DI_CB bta_dm_di_cb; 788 789 extern bool bta_dm_sm_execute(BT_HDR* p_msg); 790 extern void bta_dm_sm_disable(void); 791 extern bool bta_dm_search_sm_execute(BT_HDR* p_msg); 792 extern void bta_dm_search_sm_disable(void); 793 794 extern void bta_dm_enable(tBTA_DM_MSG* p_data); 795 extern void bta_dm_disable(tBTA_DM_MSG* p_data); 796 extern void bta_dm_init_cb(void); 797 extern void bta_dm_set_dev_name(tBTA_DM_MSG* p_data); 798 extern void bta_dm_set_visibility(tBTA_DM_MSG* p_data); 799 800 extern void bta_dm_set_scan_config(tBTA_DM_MSG* p_data); 801 extern void bta_dm_vendor_spec_command(tBTA_DM_MSG* p_data); 802 extern void bta_dm_bond(tBTA_DM_MSG* p_data); 803 extern void bta_dm_bond_cancel(tBTA_DM_MSG* p_data); 804 extern void bta_dm_pin_reply(tBTA_DM_MSG* p_data); 805 extern void bta_dm_acl_change(tBTA_DM_MSG* p_data); 806 extern void bta_dm_add_device(tBTA_DM_MSG* p_data); 807 extern void bta_dm_remove_device(tBTA_DM_MSG* p_data); 808 extern void bta_dm_close_acl(tBTA_DM_MSG* p_data); 809 810 extern void bta_dm_pm_btm_status(tBTA_DM_MSG* p_data); 811 extern void bta_dm_pm_timer(tBTA_DM_MSG* p_data); 812 extern void bta_dm_add_ampkey(tBTA_DM_MSG* p_data); 813 814 extern void bta_dm_add_blekey(tBTA_DM_MSG* p_data); 815 extern void bta_dm_add_ble_device(tBTA_DM_MSG* p_data); 816 extern void bta_dm_ble_passkey_reply(tBTA_DM_MSG* p_data); 817 extern void bta_dm_ble_confirm_reply(tBTA_DM_MSG* p_data); 818 extern void bta_dm_security_grant(tBTA_DM_MSG* p_data); 819 extern void bta_dm_ble_set_bg_conn_type(tBTA_DM_MSG* p_data); 820 extern void bta_dm_ble_set_conn_params(tBTA_DM_MSG* p_data); 821 extern void bta_dm_ble_set_conn_scan_params(tBTA_DM_MSG* p_data); 822 extern void bta_dm_close_gatt_conn(tBTA_DM_MSG* p_data); 823 extern void bta_dm_ble_observe(tBTA_DM_MSG* p_data); 824 extern void bta_dm_ble_update_conn_params(tBTA_DM_MSG* p_data); 825 extern void bta_dm_ble_config_local_privacy(tBTA_DM_MSG* p_data); 826 extern void bta_dm_ble_set_adv_params(uint16_t adv_int_min, 827 uint16_t adv_int_max, 828 tBLE_BD_ADDR* p_dir_bda); 829 830 extern void bta_dm_ble_set_data_length(tBTA_DM_MSG* p_data); 831 832 extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG* p_data); 833 834 extern void bta_dm_set_encryption(tBTA_DM_MSG* p_data); 835 extern void bta_dm_confirm(tBTA_DM_MSG* p_data); 836 extern void bta_dm_loc_oob(tBTA_DM_MSG* p_data); 837 extern void bta_dm_ci_io_req_act(tBTA_DM_MSG* p_data); 838 extern void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG* p_data); 839 840 extern void bta_dm_init_pm(void); 841 extern void bta_dm_disable_pm(void); 842 843 extern uint8_t bta_dm_get_av_count(void); 844 extern void bta_dm_search_start(tBTA_DM_MSG* p_data); 845 extern void bta_dm_search_cancel(tBTA_DM_MSG* p_data); 846 extern void bta_dm_discover(tBTA_DM_MSG* p_data); 847 extern void bta_dm_di_disc(tBTA_DM_MSG* p_data); 848 extern void bta_dm_inq_cmpl(tBTA_DM_MSG* p_data); 849 extern void bta_dm_rmt_name(tBTA_DM_MSG* p_data); 850 extern void bta_dm_sdp_result(tBTA_DM_MSG* p_data); 851 extern void bta_dm_search_cmpl(tBTA_DM_MSG* p_data); 852 extern void bta_dm_free_sdp_db(tBTA_DM_MSG* p_data); 853 extern void bta_dm_disc_result(tBTA_DM_MSG* p_data); 854 extern void bta_dm_search_result(tBTA_DM_MSG* p_data); 855 extern void bta_dm_discovery_cmpl(tBTA_DM_MSG* p_data); 856 extern void bta_dm_queue_search(tBTA_DM_MSG* p_data); 857 extern void bta_dm_queue_disc(tBTA_DM_MSG* p_data); 858 extern void bta_dm_search_clear_queue(tBTA_DM_MSG* p_data); 859 extern void bta_dm_search_cancel_cmpl(tBTA_DM_MSG* p_data); 860 extern void bta_dm_search_cancel_notify(tBTA_DM_MSG* p_data); 861 extern void bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG* p_data); 862 extern void bta_dm_disc_rmt_name(tBTA_DM_MSG* p_data); 863 extern tBTA_DM_PEER_DEVICE* bta_dm_find_peer_device( 864 const RawAddress& 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