1 /******************************************************************************
3 * Copyright (C) 2003-2012 Broadcom Corporation
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:
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 ******************************************************************************/
19 /******************************************************************************
21 * This is the private interface file for the BTA device manager.
23 ******************************************************************************/
27 #include "bt_target.h"
29 #if (BLE_INCLUDED == TRUE && (defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
30 #include "bta_gatt_api.h"
35 /*****************************************************************************
36 ** Constants and data types
37 *****************************************************************************/
40 #define BTA_COPY_DEVICE_CLASS(coddst, codsrc) {((UINT8 *)(coddst))[0] = ((UINT8 *)(codsrc))[0]; \
41 ((UINT8 *)(coddst))[1] = ((UINT8 *)(codsrc))[1]; \
42 ((UINT8 *)(coddst))[2] = ((UINT8 *)(codsrc))[2];}
45 #define BTA_DM_MSG_LEN 50
47 #define BTA_SERVICE_ID_TO_SERVICE_MASK(id) (1 << (id))
52 /* device manager local device API events */
53 BTA_DM_API_ENABLE_EVT = BTA_SYS_EVT_START(BTA_ID_DM),
54 BTA_DM_API_DISABLE_EVT,
55 BTA_DM_API_SET_NAME_EVT,
56 BTA_DM_API_SET_VISIBILITY_EVT,
58 BTA_DM_ACL_CHANGE_EVT,
59 BTA_DM_API_ADD_DEVICE_EVT,
60 BTA_DM_API_REMOVE_ACL_EVT,
62 /* security API events */
64 BTA_DM_API_BOND_CANCEL_EVT,
65 BTA_DM_API_PIN_REPLY_EVT,
67 /* power manger events */
68 BTA_DM_PM_BTM_STATUS_EVT,
71 /* simple pairing events */
72 BTA_DM_API_CONFIRM_EVT,
74 BTA_DM_API_SET_ENCRYPTION_EVT,
76 #if (BTM_OOB_INCLUDED == TRUE)
77 BTA_DM_API_LOC_OOB_EVT,
79 BTA_DM_CI_RMT_OOB_EVT,
80 #endif /* BTM_OOB_INCLUDED */
83 #if BLE_INCLUDED == TRUE
84 BTA_DM_API_ADD_BLEKEY_EVT,
85 BTA_DM_API_ADD_BLEDEVICE_EVT,
86 BTA_DM_API_BLE_PASSKEY_REPLY_EVT,
87 BTA_DM_API_BLE_CONFIRM_REPLY_EVT,
88 BTA_DM_API_BLE_SEC_GRANT_EVT,
89 BTA_DM_API_BLE_SET_BG_CONN_TYPE,
90 BTA_DM_API_BLE_CONN_PARAM_EVT,
91 BTA_DM_API_BLE_CONN_SCAN_PARAM_EVT,
92 BTA_DM_API_BLE_SCAN_PARAM_EVT,
93 BTA_DM_API_BLE_OBSERVE_EVT,
94 BTA_DM_API_UPDATE_CONN_PARAM_EVT,
95 #if BLE_PRIVACY_SPT == TRUE
96 BTA_DM_API_LOCAL_PRIVACY_EVT,
98 BTA_DM_API_BLE_ADV_PARAM_EVT,
99 BTA_DM_API_BLE_SET_ADV_CONFIG_EVT,
100 BTA_DM_API_BLE_SET_SCAN_RSP_EVT,
101 BTA_DM_API_BLE_BROADCAST_EVT,
102 BTA_DM_API_SET_DATA_LENGTH_EVT,
104 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
105 BTA_DM_API_CFG_FILTER_COND_EVT,
106 BTA_DM_API_SCAN_FILTER_SETUP_EVT,
107 BTA_DM_API_SCAN_FILTER_ENABLE_EVT,
109 BTA_DM_API_BLE_MULTI_ADV_ENB_EVT,
110 BTA_DM_API_BLE_MULTI_ADV_PARAM_UPD_EVT,
111 BTA_DM_API_BLE_MULTI_ADV_DATA_EVT,
112 BTA_DM_API_BLE_MULTI_ADV_DISABLE_EVT,
113 BTA_DM_API_BLE_SETUP_STORAGE_EVT,
114 BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT,
115 BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT,
116 BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT,
117 BTA_DM_API_BLE_TRACK_ADVERTISER_EVT,
118 BTA_DM_API_BLE_ENERGY_INFO_EVT,
122 BTA_DM_API_ENABLE_TEST_MODE_EVT,
123 BTA_DM_API_DISABLE_TEST_MODE_EVT,
124 BTA_DM_API_EXECUTE_CBACK_EVT,
125 BTA_DM_API_REMOVE_ALL_ACL_EVT,
126 BTA_DM_API_REMOVE_DEVICE_EVT,
131 /* DM search events */
134 /* DM search API events */
135 BTA_DM_API_SEARCH_EVT = BTA_SYS_EVT_START(BTA_ID_DM_SEARCH),
136 BTA_DM_API_SEARCH_CANCEL_EVT,
137 BTA_DM_API_DISCOVER_EVT,
138 BTA_DM_INQUIRY_CMPL_EVT,
139 BTA_DM_REMT_NAME_EVT,
140 BTA_DM_SDP_RESULT_EVT,
141 BTA_DM_SEARCH_CMPL_EVT,
142 BTA_DM_DISCOVERY_RESULT_EVT,
143 BTA_DM_API_DI_DISCOVER_EVT,
144 BTA_DM_DISC_CLOSE_TOUT_EVT
148 /* data type for BTA_DM_API_ENABLE_EVT */
152 tBTA_DM_SEC_CBACK *p_sec_cback;
153 } tBTA_DM_API_ENABLE;
155 /* data type for BTA_DM_API_SET_NAME_EVT */
159 BD_NAME name; /* max 248 bytes name, plus must be Null terminated */
160 } tBTA_DM_API_SET_NAME;
162 /* data type for BTA_DM_API_SET_VISIBILITY_EVT */
166 tBTA_DM_DISC disc_mode;
167 tBTA_DM_CONN conn_mode;
169 UINT8 conn_paired_only;
170 } tBTA_DM_API_SET_VISIBILITY;
174 BTA_DM_RS_NONE, /* straight API call */
175 BTA_DM_RS_OK, /* the role switch result - successful */
176 BTA_DM_RS_FAIL /* the role switch result - failed */
178 typedef UINT8 tBTA_DM_RS_RES;
180 /* data type for BTA_DM_API_SEARCH_EVT */
184 tBTA_DM_INQ inq_params;
185 tBTA_SERVICE_MASK services;
186 tBTA_DM_SEARCH_CBACK * p_cback;
187 tBTA_DM_RS_RES rs_res;
188 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
192 } tBTA_DM_API_SEARCH;
194 /* data type for BTA_DM_API_DISCOVER_EVT */
199 tBTA_SERVICE_MASK services;
200 tBTA_DM_SEARCH_CBACK * p_cback;
202 tBTA_TRANSPORT transport;
203 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
208 } tBTA_DM_API_DISCOVER;
210 /* data type for BTA_DM_API_DI_DISC_EVT */
215 tBTA_DISCOVERY_DB *p_sdp_db;
217 tBTA_DM_SEARCH_CBACK * p_cback;
218 }tBTA_DM_API_DI_DISC;
220 /* data type for BTA_DM_API_BOND_EVT */
225 tBTA_TRANSPORT transport;
228 /* data type for BTA_DM_API_BOND_CANCEL_EVT */
233 tBTA_TRANSPORT transport;
234 } tBTA_DM_API_BOND_CANCEL;
236 /* data type for BTA_DM_API_PIN_REPLY_EVT */
243 UINT8 p_pin[PIN_CODE_LEN];
244 } tBTA_DM_API_PIN_REPLY;
246 /* data type for BTA_DM_API_LOC_OOB_EVT */
250 } tBTA_DM_API_LOC_OOB;
252 /* data type for BTA_DM_API_CONFIRM_EVT */
258 } tBTA_DM_API_CONFIRM;
260 /* data type for BTA_DM_CI_IO_REQ_EVT */
266 tBTA_OOB_DATA oob_data;
267 tBTA_AUTH_REQ auth_req;
270 /* data type for BTA_DM_CI_RMT_OOB_EVT */
278 } tBTA_DM_CI_RMT_OOB;
280 /* data type for BTA_DM_REMT_NAME_EVT */
284 tBTA_DM_SEARCH result;
287 /* data type for tBTA_DM_DISC_RESULT */
291 tBTA_DM_SEARCH result;
292 } tBTA_DM_DISC_RESULT;
295 /* data type for BTA_DM_INQUIRY_CMPL_EVT */
300 } tBTA_DM_INQUIRY_CMPL;
302 /* data type for BTA_DM_SDP_RESULT_EVT */
307 } tBTA_DM_SDP_RESULT;
309 /* data type for BTA_DM_ACL_CHANGE_EVT */
315 UINT8 busy_level_flags;
320 #if BLE_INCLUDED == TRUE
322 tBT_TRANSPORT transport;
324 } tBTA_DM_ACL_CHANGE;
326 /* data type for BTA_DM_PM_BTM_STATUS_EVT */
332 tBTM_PM_STATUS status;
336 } tBTA_DM_PM_BTM_STATUS;
338 /* data type for BTA_DM_PM_TIMER_EVT */
343 tBTA_DM_PM_ACTION pm_request;
347 /* data type for BTA_DM_API_ADD_DEVICE_EVT */
354 tBTA_SERVICE_MASK tm;
358 BOOLEAN link_key_known;
361 UINT8 features[BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)];
363 } tBTA_DM_API_ADD_DEVICE;
365 /* data type for BTA_DM_API_REMOVE_ACL_EVT */
370 } tBTA_DM_API_REMOVE_DEVICE;
372 /* data type for BTA_DM_API_EXECUTE_CBACK_EVT */
377 tBTA_DM_EXEC_CBACK *p_exec_cback;
378 } tBTA_DM_API_EXECUTE_CBACK;
380 /* data type for tBTA_DM_API_SET_ENCRYPTION */
384 tBTA_TRANSPORT transport;
385 tBTA_DM_ENCRYPT_CBACK *p_callback;
386 tBTA_DM_BLE_SEC_ACT sec_act;
388 } tBTA_DM_API_SET_ENCRYPTION;
390 #if BLE_INCLUDED == TRUE
395 tBTA_LE_KEY_VALUE blekey;
396 tBTA_LE_KEY_TYPE key_type;
398 }tBTA_DM_API_ADD_BLEKEY;
404 tBT_DEVICE_TYPE dev_type ;
405 tBLE_ADDR_TYPE addr_type;
407 }tBTA_DM_API_ADD_BLE_DEVICE;
415 }tBTA_DM_API_PASSKEY_REPLY;
421 tBTA_DM_BLE_SEC_GRANT res;
422 }tBTA_DM_API_BLE_SEC_GRANT;
428 tBTA_DM_BLE_CONN_TYPE bg_conn_type;
429 tBTA_DM_BLE_SEL_CBACK *p_select_cback;
430 }tBTA_DM_API_BLE_SET_BG_CONN_TYPE;
432 /* set prefered BLE connection parameters for a device */
439 UINT16 supervision_tout;
440 UINT16 slave_latency;
442 }tBTA_DM_API_BLE_CONN_PARAMS;
448 BOOLEAN privacy_enable;
450 }tBTA_DM_API_ENABLE_PRIVACY;
455 BOOLEAN privacy_enable;
456 }tBTA_DM_API_LOCAL_PRIVACY;
458 /* set scan parameter for BLE connections */
462 tBTA_GATTC_IF client_if;
465 tBLE_SCAN_MODE scan_mode;
466 tBLE_SCAN_PARAM_SETUP_CBACK scan_param_setup_cback;
467 }tBTA_DM_API_BLE_SCAN_PARAMS;
469 /* set scan parameter for BLE connections */
475 } tBTA_DM_API_BLE_CONN_SCAN_PARAMS;
477 /* Data type for start/stop observe */
483 tBTA_DM_SEARCH_CBACK * p_cback;
484 }tBTA_DM_API_BLE_OBSERVE;
490 UINT16 tx_data_length;
491 }tBTA_DM_API_BLE_SET_DATA_LENGTH;
493 /* set adv parameter for BLE advertising */
499 tBLE_BD_ADDR *p_dir_bda;
500 }tBTA_DM_API_BLE_ADV_PARAMS;
507 }tBTA_DM_API_BLE_FEATURE;
509 /* multi adv data structure */
513 tBTA_BLE_MULTI_ADV_CBACK *p_cback;
515 tBTA_BLE_ADV_PARAMS *p_params;
516 }tBTA_DM_API_BLE_MULTI_ADV_ENB;
522 tBTA_BLE_ADV_PARAMS *p_params;
523 }tBTA_DM_API_BLE_MULTI_ADV_PARAM;
530 tBTA_BLE_AD_MASK data_mask;
531 tBTA_BLE_ADV_DATA *p_data;
532 }tBTA_DM_API_BLE_MULTI_ADV_DATA;
538 }tBTA_DM_API_BLE_MULTI_ADV_DISABLE;
544 tBTA_BLE_ADV_DATA *p_adv_cfg;
545 tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback;
546 }tBTA_DM_API_SET_ADV_CONFIG;
551 UINT8 batch_scan_full_max;
552 UINT8 batch_scan_trunc_max;
553 UINT8 batch_scan_notify_threshold;
554 tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback;
555 tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback;
556 tBTA_BLE_SCAN_REP_CBACK *p_read_rep_cback;
557 tBTA_DM_BLE_REF_VALUE ref_value;
558 } tBTA_DM_API_SET_STORAGE_CONFIG;
563 tBTA_BLE_BATCH_SCAN_MODE scan_mode;
566 tBTA_BLE_DISCARD_RULE discard_rule;
567 tBLE_ADDR_TYPE addr_type;
568 tBTA_DM_BLE_REF_VALUE ref_value;
569 } tBTA_DM_API_ENABLE_SCAN;
574 tBTA_DM_BLE_REF_VALUE ref_value;
575 } tBTA_DM_API_DISABLE_SCAN;
580 tBTA_BLE_BATCH_SCAN_MODE scan_type;
581 tBTA_DM_BLE_REF_VALUE ref_value;
582 } tBTA_DM_API_READ_SCAN_REPORTS;
587 tBTA_DM_BLE_REF_VALUE ref_value;
588 tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback;
589 } tBTA_DM_API_TRACK_ADVERTISER;
594 tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback;
595 } tBTA_DM_API_ENERGY_INFO;
597 #endif /* BLE_INCLUDED */
599 /* data type for BTA_DM_API_REMOVE_ACL_EVT */
605 tBTA_TRANSPORT transport;
607 }tBTA_DM_API_REMOVE_ACL;
609 /* data type for BTA_DM_API_REMOVE_ALL_ACL_EVT */
613 tBTA_DM_LINK_TYPE link_type;
615 } tBTA_DM_API_REMOVE_ALL_ACL;
624 }tBTA_DM_API_UPDATE_CONN_PARAM;
626 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
630 tBTA_DM_BLE_SCAN_COND_OP action;
631 tBTA_DM_BLE_PF_COND_TYPE cond_type;
632 tBTA_DM_BLE_PF_FILT_INDEX filt_index;
633 tBTA_DM_BLE_PF_COND_PARAM *p_cond_param;
634 tBTA_DM_BLE_PF_CFG_CBACK *p_filt_cfg_cback;
635 tBTA_DM_BLE_REF_VALUE ref_value;
636 }tBTA_DM_API_CFG_FILTER_COND;
642 tBTA_DM_BLE_PF_STATUS_CBACK *p_filt_status_cback;
643 tBTA_DM_BLE_REF_VALUE ref_value;
644 }tBTA_DM_API_ENABLE_SCAN_FILTER;
650 tBTA_DM_BLE_PF_FILT_INDEX filt_index;
651 tBTA_DM_BLE_PF_FILT_PARAMS filt_params;
652 tBLE_BD_ADDR *p_target;
653 tBTA_DM_BLE_PF_PARAM_CBACK *p_filt_param_cback;
654 tBTA_DM_BLE_REF_VALUE ref_value;
655 }tBTA_DM_API_SCAN_FILTER_PARAM_SETUP;
658 /* union of all data types */
661 /* GKI event buffer header */
663 tBTA_DM_API_ENABLE enable;
665 tBTA_DM_API_SET_NAME set_name;
667 tBTA_DM_API_SET_VISIBILITY set_visibility;
669 tBTA_DM_API_ADD_DEVICE add_dev;
671 tBTA_DM_API_REMOVE_DEVICE remove_dev;
673 tBTA_DM_API_SEARCH search;
675 tBTA_DM_API_DISCOVER discover;
677 tBTA_DM_API_BOND bond;
679 tBTA_DM_API_BOND_CANCEL bond_cancel;
681 tBTA_DM_API_PIN_REPLY pin_reply;
683 tBTA_DM_API_LOC_OOB loc_oob;
684 tBTA_DM_API_CONFIRM confirm;
685 tBTA_DM_CI_IO_REQ ci_io_req;
686 tBTA_DM_CI_RMT_OOB ci_rmt_oob;
688 tBTA_DM_REM_NAME rem_name;
690 tBTA_DM_DISC_RESULT disc_result;
692 tBTA_DM_INQUIRY_CMPL inq_cmpl;
694 tBTA_DM_SDP_RESULT sdp_event;
696 tBTA_DM_ACL_CHANGE acl_change;
698 tBTA_DM_PM_BTM_STATUS pm_status;
700 tBTA_DM_PM_TIMER pm_timer;
702 tBTA_DM_API_DI_DISC di_disc;
704 tBTA_DM_API_EXECUTE_CBACK exec_cback;
706 tBTA_DM_API_SET_ENCRYPTION set_encryption;
708 #if BLE_INCLUDED == TRUE
709 tBTA_DM_API_ADD_BLEKEY add_ble_key;
710 tBTA_DM_API_ADD_BLE_DEVICE add_ble_device;
711 tBTA_DM_API_PASSKEY_REPLY ble_passkey_reply;
712 tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant;
713 tBTA_DM_API_BLE_SET_BG_CONN_TYPE ble_set_bd_conn_type;
714 tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params;
715 tBTA_DM_API_BLE_CONN_SCAN_PARAMS ble_set_conn_scan_params;
716 tBTA_DM_API_BLE_SCAN_PARAMS ble_set_scan_params;
717 tBTA_DM_API_BLE_OBSERVE ble_observe;
718 tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy;
719 tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy;
720 tBTA_DM_API_BLE_ADV_PARAMS ble_set_adv_params;
721 tBTA_DM_API_SET_ADV_CONFIG ble_set_adv_data;
722 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
723 tBTA_DM_API_SCAN_FILTER_PARAM_SETUP ble_scan_filt_param_setup;
724 tBTA_DM_API_CFG_FILTER_COND ble_cfg_filter_cond;
725 tBTA_DM_API_ENABLE_SCAN_FILTER ble_enable_scan_filt;
727 tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params;
728 tBTA_DM_API_BLE_SET_DATA_LENGTH ble_set_data_length;
730 tBTA_DM_API_BLE_MULTI_ADV_ENB ble_multi_adv_enb;
731 tBTA_DM_API_BLE_MULTI_ADV_PARAM ble_multi_adv_param;
732 tBTA_DM_API_BLE_MULTI_ADV_DATA ble_multi_adv_data;
733 tBTA_DM_API_BLE_MULTI_ADV_DISABLE ble_multi_adv_disable;
735 tBTA_DM_API_SET_STORAGE_CONFIG ble_set_storage;
736 tBTA_DM_API_ENABLE_SCAN ble_enable_scan;
737 tBTA_DM_API_READ_SCAN_REPORTS ble_read_reports;
738 tBTA_DM_API_DISABLE_SCAN ble_disable_scan;
739 tBTA_DM_API_TRACK_ADVERTISER ble_track_advert;
740 tBTA_DM_API_ENERGY_INFO ble_energy_info;
743 tBTA_DM_API_REMOVE_ACL remove_acl;
744 tBTA_DM_API_REMOVE_ALL_ACL remove_all_acl;
749 #define BTA_DM_NUM_PEER_DEVICE 7
751 #define BTA_DM_NOT_CONNECTED 0
752 #define BTA_DM_CONNECTED 1
753 #define BTA_DM_UNPAIRING 2
754 typedef UINT8 tBTA_DM_CONN_STATE;
757 #define BTA_DM_DI_NONE 0x00 /* nothing special */
758 #define BTA_DM_DI_USE_SSR 0x10 /* set this bit if ssr is supported for this link */
759 #define BTA_DM_DI_AV_ACTIVE 0x20 /* set this bit if AV is active for this link */
760 #define BTA_DM_DI_SET_SNIFF 0x01 /* set this bit if call BTM_SetPowerMode(sniff) */
761 #define BTA_DM_DI_INT_SNIFF 0x02 /* set this bit if call BTM_SetPowerMode(sniff) & enter sniff mode */
762 #define BTA_DM_DI_ACP_SNIFF 0x04 /* set this bit if peer init sniff */
763 typedef UINT8 tBTA_DM_DEV_INFO;
765 /* set power mode request type */
766 #define BTA_DM_PM_RESTART 1
767 #define BTA_DM_PM_NEW_REQ 2
768 #define BTA_DM_PM_EXECUTE 3
769 typedef UINT8 tBTA_DM_PM_REQ;
775 tBTA_DM_CONN_STATE conn_state;
776 tBTA_PREF_ROLES pref_role;
778 tBTA_DM_DEV_INFO info;
779 tBTA_DM_ENCRYPT_CBACK *p_encrypt_cback;
780 #if (BTM_SSR_INCLUDED == TRUE)
781 tBTM_PM_STATUS prev_low; /* previous low power mode used */
783 tBTA_DM_PM_ACTION pm_mode_attempted;
784 tBTA_DM_PM_ACTION pm_mode_failed;
785 BOOLEAN remove_dev_pending;
786 #if BLE_INCLUDED == TRUE
788 tBT_TRANSPORT transport;
790 } tBTA_DM_PEER_DEVICE;
794 /* structure to store list of
795 active connections */
798 tBTA_DM_PEER_DEVICE peer_device[BTA_DM_NUM_PEER_DEVICE];
800 #if BLE_INCLUDED == TRUE
803 } tBTA_DM_ACTIVE_LINK;
811 tBTA_SYS_CONN_STATUS state;
816 #ifndef BTA_DM_NUM_CONN_SRVS
817 #define BTA_DM_NUM_CONN_SRVS 10
824 tBTA_DM_SRVCS conn_srvc[BTA_DM_NUM_CONN_SRVS];
826 } tBTA_DM_CONNECTED_SRVCS;
830 #define BTA_DM_PM_SNIFF_TIMER_IDX 0
831 #define BTA_DM_PM_PARK_TIMER_IDX 1
832 #define BTA_DM_PM_SUSPEND_TIMER_IDX 2
833 #define BTA_DM_PM_MODE_TIMER_MAX 3
835 * Keep three different timers for PARK, SNIFF and SUSPEND if TBFC is
838 TIMER_LIST_ENT timer[BTA_DM_PM_MODE_TIMER_MAX];
840 UINT8 srvc_id[BTA_DM_PM_MODE_TIMER_MAX];
841 UINT8 pm_action[BTA_DM_PM_MODE_TIMER_MAX];
842 UINT8 active; /* number of active timer */
848 extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs;
850 #define BTA_DM_NUM_PM_TIMER 7
852 /* DM control block */
855 BOOLEAN is_bta_dm_active;
856 tBTA_DM_ACTIVE_LINK device_list;
857 tBTA_DM_SEC_CBACK *p_sec_cback;
858 #if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
859 tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback;
860 tBTA_DM_BLE_PF_CFG_CBACK *p_scan_filt_cfg_cback;
861 tBTA_DM_BLE_PF_STATUS_CBACK *p_scan_filt_status_cback;
862 tBTA_DM_BLE_PF_PARAM_CBACK *p_scan_filt_param_cback;
863 tBTA_BLE_MULTI_ADV_CBACK *p_multi_adv_cback;
864 tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback;
868 TIMER_LIST_ENT disable_timer;
869 UINT32 wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */
870 UINT8 wbt_scn; /* WIDCOMM Extensions SCN */
871 UINT8 num_master_only;
873 tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER];
874 UINT32 role_policy_mask; /* the bits set indicates the modules that wants to remove role switch from the default link policy */
875 UINT16 cur_policy; /* current default link policy */
876 UINT16 rs_event; /* the event waiting for role switch */
877 UINT8 cur_av_count; /* current AV connecions */
878 BOOLEAN disable_pair_mode; /* disable pair mode or not */
879 BOOLEAN conn_paired_only; /* allow connectable to paired device only or not */
880 tBTA_DM_API_SEARCH search_msg;
881 UINT16 page_scan_interval;
882 UINT16 page_scan_window;
883 UINT16 inquiry_scan_interval;
884 UINT16 inquiry_scan_window;
886 /* Storage for pin code request parameters */
888 DEV_CLASS pin_dev_class;
889 tBTA_DM_SEC_EVT pin_evt;
890 UINT32 num_val; /* the numeric value for comparison. If just_works, do not show this number to UI */
891 BOOLEAN just_works; /* TRUE, if "Just Works" association model */
892 #if ( BTA_EIR_CANNED_UUID_LIST != TRUE )
893 /* store UUID list for EIR */
894 TIMER_LIST_ENT app_ready_timer;
895 UINT32 eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE];
896 #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
897 tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID];
903 tBTA_DM_ENCRYPT_CBACK *p_encrypt_cback;
904 TIMER_LIST_ENT switch_delay_timer;
908 #ifndef BTA_DM_SDP_DB_SIZE
909 #define BTA_DM_SDP_DB_SIZE 250
912 /* DM search control block */
916 tBTA_DM_SEARCH_CBACK * p_search_cback;
917 tBTM_INQ_INFO * p_btm_inq_info;
918 tBTA_SERVICE_MASK services;
919 tBTA_SERVICE_MASK services_to_search;
920 tBTA_SERVICE_MASK services_found;
921 tSDP_DISCOVERY_DB * p_sdp_db;
924 BOOLEAN name_discover_done;
926 TIMER_LIST_ENT search_timer;
928 tBTA_DM_MSG * p_search_queue; /* search or discover commands during search cancel stored here */
934 BOOLEAN cancel_pending; /* inquiry cancel is pending */
935 tBTA_TRANSPORT transport;
936 #if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
937 tBTA_DM_SEARCH_CBACK * p_scan_cback;
938 #if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
939 tBTA_GATTC_IF client_if;
941 tBT_UUID *p_srvc_uuid;
942 UINT8 uuid_to_search;
943 BOOLEAN gatt_disc_active;
945 UINT8 * p_ble_rawdata;
948 TIMER_LIST_ENT gatt_close_timer; /* GATT channel close delay timer */
949 BD_ADDR pending_close_bda; /* pending GATT channel remote device address */
956 /* DI control block */
959 tSDP_DISCOVERY_DB * p_di_db; /* pointer to the DI discovery database */
960 UINT8 di_num; /* total local DI record number */
961 UINT32 di_handle[BTA_DI_NUM_MAX]; /* local DI record handle, the first one is primary record */
964 /* DM search state */
969 BTA_DM_SEARCH_ACTIVE,
970 BTA_DM_SEARCH_CANCELLING,
971 BTA_DM_DISCOVER_ACTIVE
979 DEV_CLASS dev_class; /* local device class */
980 UINT16 policy_settings; /* link policy setting hold, sniff, park, MS switch */
981 UINT16 page_timeout; /* timeout for page in slots */
982 UINT16 link_timeout; /* link supervision timeout in slots */
983 BOOLEAN avoid_scatter; /* TRUE to avoid scatternet when av is streaming (be the master) */
987 extern const UINT32 bta_service_id_to_btm_srv_id_lkup_tbl[];
998 extern tBTA_DM_CFG *p_bta_dm_cfg;
999 extern tBTA_DM_RM *p_bta_dm_rm_cfg;
1006 UINT8 spec_idx; /* index of spec table to use */
1014 tBTA_DM_PM_ACTION power_mode;
1022 UINT8 allow_mask; /* mask of sniff/hold/park modes to allow */
1023 #if (BTM_SSR_INCLUDED == TRUE)
1024 UINT8 ssr; /* set SSR on conn open/unpark */
1026 tBTA_DM_PM_ACTN actn_tbl [BTA_DM_PM_NUM_EVTS][2];
1039 UINT16 manufacturer;
1040 UINT16 lmp_sub_version;
1042 }tBTA_DM_LMP_VER_INFO;
1044 extern tBTA_DM_PM_CFG *p_bta_dm_pm_cfg;
1045 extern tBTA_DM_PM_SPEC *p_bta_dm_pm_spec;
1046 extern tBTM_PM_PWR_MD *p_bta_dm_pm_md;
1047 #if (BTM_SSR_INCLUDED == TRUE)
1048 extern tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec;
1051 /* update dynamic BRCM Aware EIR data */
1052 extern const tBTA_DM_EIR_CONF bta_dm_eir_cfg;
1053 extern tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg;
1055 /* DM control block */
1056 #if BTA_DYNAMIC_MEMORY == FALSE
1057 extern tBTA_DM_CB bta_dm_cb;
1059 extern tBTA_DM_CB *bta_dm_cb_ptr;
1060 #define bta_dm_cb (*bta_dm_cb_ptr)
1063 /* DM search control block */
1064 #if BTA_DYNAMIC_MEMORY == FALSE
1065 extern tBTA_DM_SEARCH_CB bta_dm_search_cb;
1067 extern tBTA_DM_SEARCH_CB *bta_dm_search_cb_ptr;
1068 #define bta_dm_search_cb (*bta_dm_search_cb_ptr)
1071 /* DI control block */
1072 #if BTA_DYNAMIC_MEMORY == FALSE
1073 extern tBTA_DM_DI_CB bta_dm_di_cb;
1075 extern tBTA_DM_DI_CB *bta_dm_di_cb_ptr;
1076 #define bta_dm_di_cb (*bta_dm_di_cb_ptr)
1079 extern BOOLEAN bta_dm_sm_execute(BT_HDR *p_msg);
1080 extern void bta_dm_sm_disable( void );
1081 extern BOOLEAN bta_dm_search_sm_execute(BT_HDR *p_msg);
1082 extern void bta_dm_search_sm_disable( void );
1085 extern void bta_dm_enable (tBTA_DM_MSG *p_data);
1086 extern void bta_dm_disable (tBTA_DM_MSG *p_data);
1087 extern void bta_dm_set_dev_name (tBTA_DM_MSG *p_data);
1088 extern void bta_dm_set_visibility (tBTA_DM_MSG *p_data);
1090 extern void bta_dm_set_scan_config(tBTA_DM_MSG *p_data);
1091 extern void bta_dm_vendor_spec_command(tBTA_DM_MSG *p_data);
1092 extern void bta_dm_bond (tBTA_DM_MSG *p_data);
1093 extern void bta_dm_bond_cancel (tBTA_DM_MSG *p_data);
1094 extern void bta_dm_pin_reply (tBTA_DM_MSG *p_data);
1095 extern void bta_dm_acl_change(tBTA_DM_MSG *p_data);
1096 extern void bta_dm_add_device (tBTA_DM_MSG *p_data);
1097 extern void bta_dm_remove_device (tBTA_DM_MSG *p_data);
1098 extern void bta_dm_close_acl(tBTA_DM_MSG *p_data);
1101 extern void bta_dm_pm_btm_status(tBTA_DM_MSG *p_data);
1102 extern void bta_dm_pm_timer(tBTA_DM_MSG *p_data);
1103 extern void bta_dm_add_ampkey (tBTA_DM_MSG *p_data);
1105 #if BLE_INCLUDED == TRUE
1106 extern void bta_dm_add_blekey (tBTA_DM_MSG *p_data);
1107 extern void bta_dm_add_ble_device (tBTA_DM_MSG *p_data);
1108 extern void bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data);
1109 extern void bta_dm_ble_confirm_reply (tBTA_DM_MSG *p_data);
1110 extern void bta_dm_security_grant (tBTA_DM_MSG *p_data);
1111 extern void bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data);
1112 extern void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data);
1113 extern void bta_dm_ble_set_scan_params(tBTA_DM_MSG *p_data);
1114 extern void bta_dm_ble_set_conn_scan_params (tBTA_DM_MSG *p_data);
1115 extern void bta_dm_close_gatt_conn(tBTA_DM_MSG *p_data);
1116 extern void bta_dm_ble_observe (tBTA_DM_MSG *p_data);
1117 extern void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data);
1118 extern void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data);
1119 extern void bta_dm_ble_set_adv_params (tBTA_DM_MSG *p_data);
1120 extern void bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data);
1121 extern void bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data);
1122 extern void bta_dm_ble_broadcast (tBTA_DM_MSG *p_data);
1123 extern void bta_dm_ble_set_data_length(tBTA_DM_MSG *p_data);
1125 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
1126 extern void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data);
1127 extern void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data);
1128 extern void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data);
1130 extern void btm_dm_ble_multi_adv_disable(tBTA_DM_MSG *p_data);
1131 extern void bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data);
1132 extern void bta_dm_ble_multi_adv_upd_param(tBTA_DM_MSG *p_data);
1133 extern void bta_dm_ble_multi_adv_enb(tBTA_DM_MSG *p_data);
1135 extern void bta_dm_ble_setup_storage(tBTA_DM_MSG *p_data);
1136 extern void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG * p_data);
1137 extern void bta_dm_ble_disable_batch_scan(tBTA_DM_MSG * p_data);
1138 extern void bta_dm_ble_read_scan_reports(tBTA_DM_MSG * p_data);
1139 extern void bta_dm_ble_track_advertiser(tBTA_DM_MSG * p_data);
1140 extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data);
1143 extern void bta_dm_set_encryption(tBTA_DM_MSG *p_data);
1144 extern void bta_dm_confirm(tBTA_DM_MSG *p_data);
1145 #if (BTM_OOB_INCLUDED == TRUE)
1146 extern void bta_dm_loc_oob(tBTA_DM_MSG *p_data);
1147 extern void bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data);
1148 extern void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data);
1149 #endif /* BTM_OOB_INCLUDED */
1151 extern void bta_dm_init_pm(void);
1152 extern void bta_dm_disable_pm(void);
1154 extern UINT8 bta_dm_get_av_count(void);
1155 extern void bta_dm_search_start (tBTA_DM_MSG *p_data);
1156 extern void bta_dm_search_cancel (tBTA_DM_MSG *p_data);
1157 extern void bta_dm_discover (tBTA_DM_MSG *p_data);
1158 extern void bta_dm_di_disc (tBTA_DM_MSG *p_data);
1159 extern void bta_dm_inq_cmpl (tBTA_DM_MSG *p_data);
1160 extern void bta_dm_rmt_name (tBTA_DM_MSG *p_data);
1161 extern void bta_dm_sdp_result (tBTA_DM_MSG *p_data);
1162 extern void bta_dm_search_cmpl (tBTA_DM_MSG *p_data);
1163 extern void bta_dm_free_sdp_db (tBTA_DM_MSG *p_data);
1164 extern void bta_dm_disc_result (tBTA_DM_MSG *p_data);
1165 extern void bta_dm_search_result (tBTA_DM_MSG *p_data);
1166 extern void bta_dm_discovery_cmpl (tBTA_DM_MSG *p_data);
1167 extern void bta_dm_queue_search (tBTA_DM_MSG *p_data);
1168 extern void bta_dm_queue_disc (tBTA_DM_MSG *p_data);
1169 extern void bta_dm_search_clear_queue (tBTA_DM_MSG *p_data);
1170 extern void bta_dm_search_cancel_cmpl (tBTA_DM_MSG *p_data);
1171 extern void bta_dm_search_cancel_notify (tBTA_DM_MSG *p_data);
1172 extern void bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG *p_data);
1173 extern void bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data);
1174 extern tBTA_DM_PEER_DEVICE * bta_dm_find_peer_device(BD_ADDR peer_addr);
1176 extern void bta_dm_pm_active(BD_ADDR peer_addr);
1178 void bta_dm_eir_update_uuid(UINT16 uuid16, BOOLEAN adding);
1180 extern void bta_dm_enable_test_mode(tBTA_DM_MSG *p_data);
1181 extern void bta_dm_disable_test_mode(tBTA_DM_MSG *p_data);
1182 extern void bta_dm_execute_callback(tBTA_DM_MSG *p_data);
1185 extern void bta_dm_remove_all_acl(tBTA_DM_MSG *p_data);
1186 #endif /* BTA_DM_INT_H */