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,
57 BTA_DM_API_SET_AFH_CHANNELS_EVT,
58 BTA_API_DM_SIG_STRENGTH_EVT,
59 BTA_DM_API_VENDOR_SPECIFIC_COMMAND_EVT,
60 BTA_DM_API_TX_INQPWR_EVT,
61 BTA_DM_ACL_CHANGE_EVT,
62 BTA_DM_API_ADD_DEVICE_EVT,
63 BTA_DM_API_REMOVE_ACL_EVT,
65 /* security API events */
67 BTA_DM_API_BOND_CANCEL_EVT,
68 BTA_DM_API_PIN_REPLY_EVT,
69 BTA_DM_API_LINK_POLICY_EVT,
70 BTA_DM_API_AUTH_REPLY_EVT,
72 /* power manger events */
73 BTA_DM_PM_BTM_STATUS_EVT,
76 /* simple pairing events */
77 BTA_DM_API_CONFIRM_EVT,
79 BTA_DM_API_SET_ENCRYPTION_EVT,
82 #if (BTM_LOCAL_IO_CAPS != BTM_IO_CAP_NONE)
83 BTA_DM_API_PASKY_CANCEL_EVT,
85 #if (BTM_OOB_INCLUDED == TRUE)
86 BTA_DM_API_LOC_OOB_EVT,
88 BTA_DM_CI_RMT_OOB_EVT,
89 #endif /* BTM_OOB_INCLUDED */
91 BTA_DM_API_REMOVE_DEVICE_EVT,
93 #if BLE_INCLUDED == TRUE
94 BTA_DM_API_ADD_BLEKEY_EVT,
95 BTA_DM_API_ADD_BLEDEVICE_EVT,
96 BTA_DM_API_BLE_PASSKEY_REPLY_EVT,
97 BTA_DM_API_BLE_SEC_GRANT_EVT,
98 BTA_DM_API_BLE_SET_BG_CONN_TYPE,
99 BTA_DM_API_BLE_CONN_PARAM_EVT,
100 BTA_DM_API_BLE_SCAN_PARAM_EVT,
101 BTA_DM_API_BLE_OBSERVE_EVT,
102 BTA_DM_API_UPDATE_CONN_PARAM_EVT,
103 #if BLE_PRIVACY_SPT == TRUE
104 BTA_DM_API_LOCAL_PRIVACY_EVT,
106 BTA_DM_API_BLE_ADV_PARAM_EVT,
107 BTA_DM_API_BLE_SET_ADV_CONFIG_EVT,
108 BTA_DM_API_BLE_SET_SCAN_RSP_EVT,
109 BTA_DM_API_BLE_BROADCAST_EVT,
111 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
112 BTA_DM_API_CFG_FILTER_COND_EVT,
113 BTA_DM_API_SCAN_FILTER_SETUP_EVT,
114 BTA_DM_API_SCAN_FILTER_ENABLE_EVT,
116 BTA_DM_API_BLE_MULTI_ADV_ENB_EVT,
117 BTA_DM_API_BLE_MULTI_ADV_PARAM_UPD_EVT,
118 BTA_DM_API_BLE_MULTI_ADV_DATA_EVT,
119 BTA_DM_API_BLE_MULTI_ADV_DISABLE_EVT,
120 BTA_DM_API_BLE_SETUP_STORAGE_EVT,
121 BTA_DM_API_BLE_ENABLE_BATCH_SCAN_EVT,
122 BTA_DM_API_BLE_DISABLE_BATCH_SCAN_EVT,
123 BTA_DM_API_BLE_READ_SCAN_REPORTS_EVT,
124 BTA_DM_API_BLE_TRACK_ADVERTISER_EVT,
125 BTA_DM_API_BLE_ENERGY_INFO_EVT,
128 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
129 BTA_DM_API_UPDATE_EIR_UUID_EVT,
131 #if (BTM_EIR_SERVER_INCLUDED == TRUE)
132 BTA_DM_API_SET_EIR_CONFIG_EVT,
135 BTA_DM_API_ENABLE_TEST_MODE_EVT,
136 BTA_DM_API_DISABLE_TEST_MODE_EVT,
137 BTA_DM_API_EXECUTE_CBACK_EVT,
138 BTA_DM_API_SET_AFH_CHANNEL_ASSESMENT_EVT,
143 /* DM search events */
146 /* DM search API events */
147 BTA_DM_API_SEARCH_EVT = BTA_SYS_EVT_START(BTA_ID_DM_SEARCH),
148 BTA_DM_API_SEARCH_CANCEL_EVT,
149 BTA_DM_API_DISCOVER_EVT,
150 BTA_DM_INQUIRY_CMPL_EVT,
151 BTA_DM_REMT_NAME_EVT,
152 BTA_DM_SDP_RESULT_EVT,
153 BTA_DM_SEARCH_CMPL_EVT,
154 BTA_DM_DISCOVERY_RESULT_EVT,
155 BTA_DM_API_DI_DISCOVER_EVT,
156 BTA_DM_DISC_CLOSE_TOUT_EVT
159 /* data type for BTA_DM_API_ENABLE_EVT */
163 tBTA_DM_SEC_CBACK *p_sec_cback;
164 } tBTA_DM_API_ENABLE;
166 /* data type for BTA_DM_API_SET_NAME_EVT */
170 BD_NAME name; /* max 248 bytes name, plus must be Null terminated */
171 } tBTA_DM_API_SET_NAME;
173 /* data type for BTA_DM_API_SET_VISIBILITY_EVT */
177 tBTA_DM_DISC disc_mode;
178 tBTA_DM_CONN conn_mode;
180 UINT8 conn_paired_only;
181 } tBTA_DM_API_SET_VISIBILITY;
183 /* data type for BTA_DM_API_SET_AFH_CHANNELS_EVT */
189 } tBTA_DM_API_SET_AFH_CHANNELS_EVT;
191 /* data type for BTA_DM_API_VENDOR_SPECIFIC_COMMAND_EVT */
198 tBTA_VENDOR_CMPL_CBACK *p_cback;
200 } tBTA_DM_API_VENDOR_SPECIFIC_COMMAND;
204 BTA_DM_RS_NONE, /* straight API call */
205 BTA_DM_RS_OK, /* the role switch result - successful */
206 BTA_DM_RS_FAIL /* the role switch result - failed */
208 typedef UINT8 tBTA_DM_RS_RES;
210 /* data type for BTA_DM_API_SEARCH_EVT */
214 tBTA_DM_INQ inq_params;
215 tBTA_SERVICE_MASK services;
216 tBTA_DM_SEARCH_CBACK * p_cback;
217 tBTA_DM_RS_RES rs_res;
218 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
222 } tBTA_DM_API_SEARCH;
224 /* data type for BTA_DM_API_DISCOVER_EVT */
229 tBTA_SERVICE_MASK services;
230 tBTA_DM_SEARCH_CBACK * p_cback;
232 tBTA_TRANSPORT transport;
233 #if BLE_INCLUDED == TRUE && BTA_GATT_INCLUDED == TRUE
238 } tBTA_DM_API_DISCOVER;
240 /* data type for BTA_DM_API_DI_DISC_EVT */
245 tBTA_DISCOVERY_DB *p_sdp_db;
247 tBTA_DM_SEARCH_CBACK * p_cback;
248 }tBTA_DM_API_DI_DISC;
250 /* data type for BTA_DM_API_BOND_EVT */
255 tBTA_TRANSPORT transport;
258 /* data type for BTA_DM_API_BOND_CANCEL_EVT */
263 tBTA_TRANSPORT transport;
264 } tBTA_DM_API_BOND_CANCEL;
266 /* data type for BTA_DM_API_PIN_REPLY_EVT */
273 UINT8 p_pin[PIN_CODE_LEN];
274 } tBTA_DM_API_PIN_REPLY;
276 /* data type for BTA_DM_API_LINK_POLICY_EVT */
283 } tBTA_DM_API_LINK_POLICY;
285 /* data type for BTA_DM_API_AUTH_REPLY_EVT */
290 tBTA_SERVICE_ID service;
291 tBTA_AUTH_RESP response;
292 } tBTA_DM_API_AUTH_REPLY;
294 /* data type for BTA_DM_API_LOC_OOB_EVT */
298 } tBTA_DM_API_LOC_OOB;
300 /* data type for BTA_DM_API_CONFIRM_EVT */
306 } tBTA_DM_API_CONFIRM;
308 /* data type for BTA_DM_API_PASKY_CANCEL_EVT*/
313 } tBTA_DM_API_PASKY_CANCEL;
315 /* data type for BTA_DM_CI_IO_REQ_EVT */
321 tBTA_OOB_DATA oob_data;
322 tBTA_AUTH_REQ auth_req;
325 /* data type for BTA_DM_CI_RMT_OOB_EVT */
333 } tBTA_DM_CI_RMT_OOB;
335 /* data type for BTA_DM_REMT_NAME_EVT */
339 tBTA_DM_SEARCH result;
342 /* data type for tBTA_DM_DISC_RESULT */
346 tBTA_DM_SEARCH result;
347 } tBTA_DM_DISC_RESULT;
350 /* data type for BTA_DM_INQUIRY_CMPL_EVT */
355 } tBTA_DM_INQUIRY_CMPL;
357 /* data type for BTA_DM_SDP_RESULT_EVT */
362 } tBTA_DM_SDP_RESULT;
364 /* data type for BTA_API_DM_SIG_STRENGTH_EVT */
368 tBTA_SIG_STRENGTH_MASK mask;
371 } tBTA_API_DM_SIG_STRENGTH;
373 /* data type for tBTA_API_DM_TX_INQPWR */
378 }tBTA_API_DM_TX_INQPWR;
380 /* data type for BTA_DM_ACL_CHANGE_EVT */
386 UINT8 busy_level_flags;
391 #if BLE_INCLUDED == TRUE
393 tBT_TRANSPORT transport;
395 } tBTA_DM_ACL_CHANGE;
397 /* data type for BTA_DM_PM_BTM_STATUS_EVT */
403 tBTM_PM_STATUS status;
407 } tBTA_DM_PM_BTM_STATUS;
409 /* data type for BTA_DM_PM_TIMER_EVT */
418 /* data type for BTA_DM_API_ADD_DEVICE_EVT */
425 tBTA_SERVICE_MASK tm;
429 BOOLEAN link_key_known;
432 UINT8 features[BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)];
433 } tBTA_DM_API_ADD_DEVICE;
435 /* data type for BTA_DM_API_REMOVE_ACL_EVT */
440 } tBTA_DM_API_REMOVE_DEVICE;
442 /* data type for BTA_DM_API_EXECUTE_CBACK_EVT */
447 tBTA_DM_EXEC_CBACK *p_exec_cback;
448 } tBTA_DM_API_EXECUTE_CBACK;
450 /* data type for tBTA_DM_API_SET_ENCRYPTION */
454 tBTA_TRANSPORT transport;
455 tBTA_DM_ENCRYPT_CBACK *p_callback;
456 tBTA_DM_BLE_SEC_ACT sec_act;
458 } tBTA_DM_API_SET_ENCRYPTION;
460 #if BLE_INCLUDED == TRUE
465 tBTA_LE_KEY_VALUE blekey;
466 tBTA_LE_KEY_TYPE key_type;
468 }tBTA_DM_API_ADD_BLEKEY;
474 tBT_DEVICE_TYPE dev_type ;
475 tBLE_ADDR_TYPE addr_type;
477 }tBTA_DM_API_ADD_BLE_DEVICE;
485 }tBTA_DM_API_PASSKEY_REPLY;
491 tBTA_DM_BLE_SEC_GRANT res;
492 }tBTA_DM_API_BLE_SEC_GRANT;
498 tBTA_DM_BLE_CONN_TYPE bg_conn_type;
499 tBTA_DM_BLE_SEL_CBACK *p_select_cback;
500 }tBTA_DM_API_BLE_SET_BG_CONN_TYPE;
502 /* set prefered BLE connection parameters for a device */
509 UINT16 supervision_tout;
510 UINT16 slave_latency;
512 }tBTA_DM_API_BLE_CONN_PARAMS;
518 BOOLEAN privacy_enable;
520 }tBTA_DM_API_ENABLE_PRIVACY;
525 BOOLEAN privacy_enable;
526 }tBTA_DM_API_LOCAL_PRIVACY;
528 /* set scan parameter for BLE connections */
534 }tBTA_DM_API_BLE_SCAN_PARAMS;
536 /* Data type for start/stop observe */
542 tBTA_DM_SEARCH_CBACK * p_cback;
543 }tBTA_DM_API_BLE_OBSERVE;
545 /* set adv parameter for BLE advertising */
551 tBLE_BD_ADDR *p_dir_bda;
552 }tBTA_DM_API_BLE_ADV_PARAMS;
559 }tBTA_DM_API_BLE_FEATURE;
561 /* multi adv data structure */
565 tBTA_BLE_MULTI_ADV_CBACK *p_cback;
567 tBTA_BLE_ADV_PARAMS *p_params;
568 }tBTA_DM_API_BLE_MULTI_ADV_ENB;
574 tBTA_BLE_ADV_PARAMS *p_params;
575 }tBTA_DM_API_BLE_MULTI_ADV_PARAM;
582 tBTA_BLE_AD_MASK data_mask;
583 tBTA_BLE_ADV_DATA *p_data;
584 }tBTA_DM_API_BLE_MULTI_ADV_DATA;
590 }tBTA_DM_API_BLE_MULTI_ADV_DISABLE;
596 tBTA_BLE_ADV_DATA *p_adv_cfg;
597 tBTA_SET_ADV_DATA_CMPL_CBACK *p_adv_data_cback;
598 }tBTA_DM_API_SET_ADV_CONFIG;
603 UINT8 batch_scan_full_max;
604 UINT8 batch_scan_trunc_max;
605 UINT8 batch_scan_notify_threshold;
606 tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback;
607 tBTA_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback;
608 tBTA_BLE_SCAN_REP_CBACK *p_read_rep_cback;
609 tBTA_DM_BLE_REF_VALUE ref_value;
610 } tBTA_DM_API_SET_STORAGE_CONFIG;
615 tBTA_BLE_SCAN_MODE scan_mode;
618 tBTA_BLE_DISCARD_RULE discard_rule;
619 tBLE_ADDR_TYPE addr_type;
620 tBTA_DM_BLE_REF_VALUE ref_value;
621 } tBTA_DM_API_ENABLE_SCAN;
626 tBTA_DM_BLE_REF_VALUE ref_value;
627 } tBTA_DM_API_DISABLE_SCAN;
632 tBTA_BLE_SCAN_MODE scan_type;
633 tBTA_DM_BLE_REF_VALUE ref_value;
634 } tBTA_DM_API_READ_SCAN_REPORTS;
639 tBTA_DM_BLE_REF_VALUE ref_value;
640 tBTA_BLE_TRACK_ADV_CBACK *p_track_adv_cback;
641 } tBTA_DM_API_TRACK_ADVERTISER;
646 tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback;
647 } tBTA_DM_API_ENERGY_INFO;
649 #endif /* BLE_INCLUDED */
654 BOOLEAN enable_or_disable;
655 }tBTA_DM_API_SET_AFH_CHANNEL_ASSESSMENT;
657 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
658 /* data type for BTA_DM_API_UPDATE_EIR_UUID_EVT */
664 }tBTA_DM_API_UPDATE_EIR_UUID;
667 #if (BTM_EIR_SERVER_INCLUDED == TRUE)
668 /* data type for BTA_DM_API_SET_EIR_CONFIG_EVT */
672 tBTA_DM_EIR_CONF *p_eir_cfg;
673 }tBTA_DM_API_SET_EIR_CONFIG;
676 /* data type for BTA_DM_API_REMOVE_ACL_EVT */
682 tBTA_TRANSPORT transport;
684 }tBTA_DM_API_REMOVE_ACL;
693 }tBTA_DM_API_UPDATE_CONN_PARAM;
695 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
699 tBTA_DM_BLE_SCAN_COND_OP action;
700 tBTA_DM_BLE_PF_COND_TYPE cond_type;
701 tBTA_DM_BLE_PF_FILT_INDEX filt_index;
702 tBTA_DM_BLE_PF_COND_PARAM *p_cond_param;
703 tBTA_DM_BLE_PF_CFG_CBACK *p_filt_cfg_cback;
704 tBTA_DM_BLE_REF_VALUE ref_value;
705 }tBTA_DM_API_CFG_FILTER_COND;
711 tBTA_DM_BLE_PF_STATUS_CBACK *p_filt_status_cback;
712 tBTA_DM_BLE_REF_VALUE ref_value;
713 }tBTA_DM_API_ENABLE_SCAN_FILTER;
719 tBTA_DM_BLE_PF_FILT_INDEX filt_index;
720 tBTA_DM_BLE_PF_FILT_PARAMS *p_filt_params;
721 tBLE_BD_ADDR *p_target;
722 tBTA_DM_BLE_PF_PARAM_CBACK *p_filt_param_cback;
723 tBTA_DM_BLE_REF_VALUE ref_value;
724 }tBTA_DM_API_SCAN_FILTER_PARAM_SETUP;
727 /* union of all data types */
730 /* GKI event buffer header */
732 tBTA_DM_API_ENABLE enable;
734 tBTA_DM_API_SET_NAME set_name;
736 tBTA_DM_API_SET_VISIBILITY set_visibility;
738 tBTA_DM_API_SET_AFH_CHANNELS_EVT set_afhchannels;
740 tBTA_DM_API_VENDOR_SPECIFIC_COMMAND vendor_command;
742 tBTA_DM_API_ADD_DEVICE add_dev;
744 tBTA_DM_API_REMOVE_DEVICE remove_dev;
746 tBTA_DM_API_SEARCH search;
748 tBTA_DM_API_DISCOVER discover;
750 tBTA_DM_API_BOND bond;
752 tBTA_DM_API_BOND_CANCEL bond_cancel;
754 tBTA_DM_API_PIN_REPLY pin_reply;
755 tBTA_DM_API_LINK_POLICY link_policy;
757 tBTA_DM_API_LOC_OOB loc_oob;
758 tBTA_DM_API_CONFIRM confirm;
759 tBTA_DM_API_PASKY_CANCEL passkey_cancel;
760 tBTA_DM_CI_IO_REQ ci_io_req;
761 tBTA_DM_CI_RMT_OOB ci_rmt_oob;
763 tBTA_DM_API_AUTH_REPLY auth_reply;
765 tBTA_DM_REM_NAME rem_name;
767 tBTA_DM_DISC_RESULT disc_result;
769 tBTA_DM_INQUIRY_CMPL inq_cmpl;
771 tBTA_DM_SDP_RESULT sdp_event;
773 tBTA_API_DM_SIG_STRENGTH sig_strength;
775 tBTA_API_DM_TX_INQPWR tx_inq_pwr;
777 tBTA_DM_ACL_CHANGE acl_change;
779 tBTA_DM_PM_BTM_STATUS pm_status;
781 tBTA_DM_PM_TIMER pm_timer;
783 tBTA_DM_API_DI_DISC di_disc;
785 tBTA_DM_API_EXECUTE_CBACK exec_cback;
787 tBTA_DM_API_SET_ENCRYPTION set_encryption;
789 #if BLE_INCLUDED == TRUE
790 tBTA_DM_API_ADD_BLEKEY add_ble_key;
791 tBTA_DM_API_ADD_BLE_DEVICE add_ble_device;
792 tBTA_DM_API_PASSKEY_REPLY ble_passkey_reply;
793 tBTA_DM_API_BLE_SEC_GRANT ble_sec_grant;
794 tBTA_DM_API_BLE_SET_BG_CONN_TYPE ble_set_bd_conn_type;
795 tBTA_DM_API_BLE_CONN_PARAMS ble_set_conn_params;
796 tBTA_DM_API_BLE_SCAN_PARAMS ble_set_scan_params;
797 tBTA_DM_API_BLE_OBSERVE ble_observe;
798 tBTA_DM_API_ENABLE_PRIVACY ble_remote_privacy;
799 tBTA_DM_API_LOCAL_PRIVACY ble_local_privacy;
800 tBTA_DM_API_BLE_ADV_PARAMS ble_set_adv_params;
801 tBTA_DM_API_SET_ADV_CONFIG ble_set_adv_data;
802 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
803 tBTA_DM_API_SCAN_FILTER_PARAM_SETUP ble_scan_filt_param_setup;
804 tBTA_DM_API_CFG_FILTER_COND ble_cfg_filter_cond;
805 tBTA_DM_API_ENABLE_SCAN_FILTER ble_enable_scan_filt;
807 tBTA_DM_API_UPDATE_CONN_PARAM ble_update_conn_params;
808 tBTA_DM_API_BLE_MULTI_ADV_ENB ble_multi_adv_enb;
809 tBTA_DM_API_BLE_MULTI_ADV_PARAM ble_multi_adv_param;
810 tBTA_DM_API_BLE_MULTI_ADV_DATA ble_multi_adv_data;
811 tBTA_DM_API_BLE_MULTI_ADV_DISABLE ble_multi_adv_disable;
813 tBTA_DM_API_SET_STORAGE_CONFIG ble_set_storage;
814 tBTA_DM_API_ENABLE_SCAN ble_enable_scan;
815 tBTA_DM_API_READ_SCAN_REPORTS ble_read_reports;
816 tBTA_DM_API_DISABLE_SCAN ble_disable_scan;
817 tBTA_DM_API_TRACK_ADVERTISER ble_track_advert;
818 tBTA_DM_API_ENERGY_INFO ble_energy_info;
821 tBTA_DM_API_SET_AFH_CHANNEL_ASSESSMENT set_afh_channel_assessment;
823 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
824 tBTA_DM_API_UPDATE_EIR_UUID update_eir_uuid;
826 #if (BTM_EIR_SERVER_INCLUDED == TRUE)
827 tBTA_DM_API_SET_EIR_CONFIG set_eir_cfg;
829 tBTA_DM_API_REMOVE_ACL remove_acl;
834 #define BTA_DM_NUM_PEER_DEVICE 7
836 #define BTA_DM_NOT_CONNECTED 0
837 #define BTA_DM_CONNECTED 1
838 #define BTA_DM_UNPAIRING 2
839 typedef UINT8 tBTA_DM_CONN_STATE;
842 #define BTA_DM_DI_NONE 0x00 /* nothing special */
843 #define BTA_DM_DI_USE_SSR 0x10 /* set this bit if ssr is supported for this link */
844 #define BTA_DM_DI_AV_ACTIVE 0x20 /* set this bit if AV is active for this link */
845 #define BTA_DM_DI_SET_SNIFF 0x01 /* set this bit if call BTM_SetPowerMode(sniff) */
846 #define BTA_DM_DI_INT_SNIFF 0x02 /* set this bit if call BTM_SetPowerMode(sniff) & enter sniff mode */
847 #define BTA_DM_DI_ACP_SNIFF 0x04 /* set this bit if peer init sniff */
848 typedef UINT8 tBTA_DM_DEV_INFO;
854 tBTA_DM_CONN_STATE conn_state;
855 tBTA_PREF_ROLES pref_role;
857 tBTA_DM_DEV_INFO info;
858 tBTA_DM_ENCRYPT_CBACK *p_encrypt_cback;
859 #if (BTM_SSR_INCLUDED == TRUE)
860 tBTM_PM_STATUS prev_low; /* previous low power mode used */
862 tBTA_DM_PM_ACTTION pm_mode_attempted;
863 tBTA_DM_PM_ACTTION pm_mode_failed;
864 BOOLEAN remove_dev_pending;
866 tBT_TRANSPORT transport;
867 } tBTA_DM_PEER_DEVICE;
871 /* structure to store list of
872 active connections */
875 tBTA_DM_PEER_DEVICE peer_device[BTA_DM_NUM_PEER_DEVICE];
877 #if BLE_INCLUDED == TRUE
880 } tBTA_DM_ACTIVE_LINK;
888 tBTA_SYS_CONN_STATUS state;
893 #define BTA_DM_NUM_CONN_SRVS 5
899 tBTA_DM_SRVCS conn_srvc[BTA_DM_NUM_CONN_SRVS];
901 } tBTA_DM_CONNECTED_SRVCS;
905 TIMER_LIST_ENT timer;
911 extern tBTA_DM_CONNECTED_SRVCS bta_dm_conn_srvcs;
913 #define BTA_DM_NUM_PM_TIMER 3
915 /* DM control block */
918 BOOLEAN is_bta_dm_active;
919 tBTA_DM_ACTIVE_LINK device_list;
920 tBTA_DM_SEC_CBACK *p_sec_cback;
921 #if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
922 tBTA_BLE_SCAN_SETUP_CBACK *p_setup_cback;
923 tBTA_DM_BLE_PF_CFG_CBACK *p_scan_filt_cfg_cback;
924 tBTA_DM_BLE_PF_STATUS_CBACK *p_scan_filt_status_cback;
925 tBTA_DM_BLE_PF_PARAM_CBACK *p_scan_filt_param_cback;
926 tBTA_BLE_MULTI_ADV_CBACK *p_multi_adv_cback;
928 tBTA_BLE_ENERGY_INFO_CBACK *p_energy_info_cback;
929 TIMER_LIST_ENT signal_strength_timer;
930 tBTA_SIG_STRENGTH_MASK signal_strength_mask;
932 UINT16 signal_strength_period;
934 TIMER_LIST_ENT disable_timer;
935 UINT32 wbt_sdp_handle; /* WIDCOMM Extensions SDP record handle */
936 UINT8 wbt_scn; /* WIDCOMM Extensions SCN */
937 UINT8 num_master_only;
939 tBTA_PM_TIMER pm_timer[BTA_DM_NUM_PM_TIMER];
940 UINT32 role_policy_mask; /* the bits set indicates the modules that wants to remove role switch from the default link policy */
941 UINT16 cur_policy; /* current default link policy */
942 UINT16 rs_event; /* the event waiting for role switch */
943 UINT8 cur_av_count; /* current AV connecions */
944 BOOLEAN disable_pair_mode; /* disable pair mode or not */
945 BOOLEAN conn_paired_only; /* allow connectable to paired device only or not */
946 tBTA_DM_API_SEARCH search_msg;
947 UINT16 page_scan_interval;
948 UINT16 page_scan_window;
949 UINT16 inquiry_scan_interval;
950 UINT16 inquiry_scan_window;
952 /* Storage for pin code request parameters */
954 DEV_CLASS pin_dev_class;
955 tBTA_DM_SEC_EVT pin_evt;
956 UINT32 num_val; /* the numeric value for comparison. If just_works, do not show this number to UI */
957 BOOLEAN just_works; /* TRUE, if "Just Works" association model */
958 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )
959 /* store UUID list for EIR */
960 TIMER_LIST_ENT app_ready_timer;
961 UINT32 eir_uuid[BTM_EIR_SERVICE_ARRAY_SIZE];
962 #if (BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
963 tBT_UUID custom_uuid[BTA_EIR_SERVER_NUM_CUSTOM_UUID];
968 TIMER_LIST_ENT switch_delay_timer;
972 #ifndef BTA_DM_SDP_DB_SIZE
973 #define BTA_DM_SDP_DB_SIZE 250
976 /* DM search control block */
980 tBTA_DM_SEARCH_CBACK * p_search_cback;
981 tBTM_INQ_INFO * p_btm_inq_info;
982 tBTA_SERVICE_MASK services;
983 tBTA_SERVICE_MASK services_to_search;
984 tBTA_SERVICE_MASK services_found;
985 tSDP_DISCOVERY_DB * p_sdp_db;
988 BOOLEAN name_discover_done;
990 TIMER_LIST_ENT search_timer;
992 tBTA_DM_MSG * p_search_queue; /* search or discover commands during search cancel stored here */
998 tBTA_TRANSPORT transport;
999 #if ((defined BLE_INCLUDED) && (BLE_INCLUDED == TRUE))
1000 tBTA_DM_SEARCH_CBACK * p_scan_cback;
1001 #if ((defined BTA_GATT_INCLUDED) && (BTA_GATT_INCLUDED == TRUE))
1002 tBTA_GATTC_IF client_if;
1004 tBT_UUID *p_srvc_uuid;
1005 UINT8 uuid_to_search;
1006 BOOLEAN gatt_disc_active;
1008 UINT8 * p_ble_rawdata;
1009 UINT32 ble_raw_size;
1010 UINT32 ble_raw_used;
1011 TIMER_LIST_ENT gatt_close_timer;
1012 BD_ADDR pending_close_bda;
1017 } tBTA_DM_SEARCH_CB;
1019 /* DI control block */
1022 tSDP_DISCOVERY_DB * p_di_db; /* pointer to the DI discovery database */
1023 UINT8 di_num; /* total local DI record number */
1024 UINT32 di_handle[BTA_DI_NUM_MAX]; /* local DI record handle, the first one is primary record */
1027 /* DM search state */
1032 BTA_DM_SEARCH_ACTIVE,
1033 BTA_DM_SEARCH_CANCELLING,
1034 BTA_DM_DISCOVER_ACTIVE
1042 DEV_CLASS dev_class; /* local device class */
1043 UINT16 policy_settings; /* link policy setting hold, sniff, park, MS switch */
1044 UINT16 page_timeout; /* timeout for page in slots */
1045 UINT16 link_timeout; /* link supervision timeout in slots */
1046 BOOLEAN avoid_scatter; /* TRUE to avoid scatternet when av is streaming (be the master) */
1050 extern const UINT32 bta_service_id_to_btm_srv_id_lkup_tbl[];
1052 extern const tBTA_DM_CFG bta_dm_cfg;
1063 extern tBTA_DM_CFG *p_bta_dm_cfg;
1064 extern tBTA_DM_RM *p_bta_dm_rm_cfg;
1071 UINT8 spec_idx; /* index of spec table to use */
1079 tBTA_DM_PM_ACTTION power_mode;
1087 UINT8 allow_mask; /* mask of sniff/hold/park modes to allow */
1088 #if (BTM_SSR_INCLUDED == TRUE)
1089 UINT8 ssr; /* set SSR on conn open/unpark */
1091 tBTA_DM_PM_ACTN actn_tbl [BTA_DM_PM_NUM_EVTS][2];
1104 UINT16 manufacturer;
1105 UINT16 lmp_sub_version;
1107 }tBTA_DM_LMP_VER_INFO;
1109 extern tBTA_DM_PM_CFG *p_bta_dm_pm_cfg;
1110 extern tBTA_DM_PM_SPEC *p_bta_dm_pm_spec;
1111 extern tBTM_PM_PWR_MD *p_bta_dm_pm_md;
1112 #if (BTM_SSR_INCLUDED == TRUE)
1113 extern tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec;
1116 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )
1117 /* update dynamic BRCM Aware EIR data */
1118 extern const tBTA_DM_EIR_CONF bta_dm_eir_cfg;
1119 extern tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg;
1122 /* DM control block */
1123 #if BTA_DYNAMIC_MEMORY == FALSE
1124 extern tBTA_DM_CB bta_dm_cb;
1126 extern tBTA_DM_CB *bta_dm_cb_ptr;
1127 #define bta_dm_cb (*bta_dm_cb_ptr)
1130 /* DM search control block */
1131 #if BTA_DYNAMIC_MEMORY == FALSE
1132 extern tBTA_DM_SEARCH_CB bta_dm_search_cb;
1134 extern tBTA_DM_SEARCH_CB *bta_dm_search_cb_ptr;
1135 #define bta_dm_search_cb (*bta_dm_search_cb_ptr)
1138 /* DI control block */
1139 #if BTA_DYNAMIC_MEMORY == FALSE
1140 extern tBTA_DM_DI_CB bta_dm_di_cb;
1142 extern tBTA_DM_DI_CB *bta_dm_di_cb_ptr;
1143 #define bta_dm_di_cb (*bta_dm_di_cb_ptr)
1146 extern BOOLEAN bta_dm_sm_execute(BT_HDR *p_msg);
1147 extern void bta_dm_sm_disable( void );
1148 extern BOOLEAN bta_dm_search_sm_execute(BT_HDR *p_msg);
1149 extern void bta_dm_search_sm_disable( void );
1152 extern void bta_dm_enable (tBTA_DM_MSG *p_data);
1153 extern void bta_dm_disable (tBTA_DM_MSG *p_data);
1154 extern void bta_dm_set_dev_name (tBTA_DM_MSG *p_data);
1155 extern void bta_dm_set_visibility (tBTA_DM_MSG *p_data);
1156 extern void bta_dm_set_afhchannels (tBTA_DM_MSG *p_data);
1157 extern void bta_dm_vendor_spec_command(tBTA_DM_MSG *p_data);
1158 extern void bta_dm_bond (tBTA_DM_MSG *p_data);
1159 extern void bta_dm_bond_cancel (tBTA_DM_MSG *p_data);
1160 extern void bta_dm_pin_reply (tBTA_DM_MSG *p_data);
1161 extern void bta_dm_link_policy (tBTA_DM_MSG *p_data);
1162 extern void bta_dm_auth_reply (tBTA_DM_MSG *p_data);
1163 extern void bta_dm_signal_strength(tBTA_DM_MSG *p_data);
1164 extern void bta_dm_tx_inqpower(tBTA_DM_MSG *p_data);
1165 extern void bta_dm_acl_change(tBTA_DM_MSG *p_data);
1166 extern void bta_dm_add_device (tBTA_DM_MSG *p_data);
1167 extern void bta_dm_remove_device (tBTA_DM_MSG *p_data);
1168 extern void bta_dm_close_acl(tBTA_DM_MSG *p_data);
1171 extern void bta_dm_pm_btm_status(tBTA_DM_MSG *p_data);
1172 extern void bta_dm_pm_timer(tBTA_DM_MSG *p_data);
1173 extern void bta_dm_add_ampkey (tBTA_DM_MSG *p_data);
1175 #if BLE_INCLUDED == TRUE
1176 extern void bta_dm_add_blekey (tBTA_DM_MSG *p_data);
1177 extern void bta_dm_add_ble_device (tBTA_DM_MSG *p_data);
1178 extern void bta_dm_ble_passkey_reply (tBTA_DM_MSG *p_data);
1179 extern void bta_dm_security_grant (tBTA_DM_MSG *p_data);
1180 extern void bta_dm_ble_set_bg_conn_type (tBTA_DM_MSG *p_data);
1181 extern void bta_dm_ble_set_conn_params (tBTA_DM_MSG *p_data);
1182 extern void bta_dm_ble_set_scan_params (tBTA_DM_MSG *p_data);
1183 extern void bta_dm_close_gatt_conn(tBTA_DM_MSG *p_data);
1184 extern void bta_dm_ble_observe (tBTA_DM_MSG *p_data);
1185 extern void bta_dm_ble_update_conn_params (tBTA_DM_MSG *p_data);
1186 extern void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data);
1187 extern void bta_dm_ble_set_adv_params (tBTA_DM_MSG *p_data);
1188 extern void bta_dm_ble_set_adv_config (tBTA_DM_MSG *p_data);
1189 extern void bta_dm_ble_set_scan_rsp (tBTA_DM_MSG *p_data);
1190 extern void bta_dm_ble_broadcast (tBTA_DM_MSG *p_data);
1192 #if BLE_ANDROID_CONTROLLER_SCAN_FILTER == TRUE
1193 extern void bta_dm_cfg_filter_cond (tBTA_DM_MSG *p_data);
1194 extern void bta_dm_scan_filter_param_setup (tBTA_DM_MSG *p_data);
1195 extern void bta_dm_enable_scan_filter(tBTA_DM_MSG *p_data);
1197 extern void btm_dm_ble_multi_adv_disable(tBTA_DM_MSG *p_data);
1198 extern void bta_dm_ble_multi_adv_data(tBTA_DM_MSG *p_data);
1199 extern void bta_dm_ble_multi_adv_upd_param(tBTA_DM_MSG *p_data);
1200 extern void bta_dm_ble_multi_adv_enb(tBTA_DM_MSG *p_data);
1202 extern void bta_dm_ble_setup_storage(tBTA_DM_MSG *p_data);
1203 extern void bta_dm_ble_enable_batch_scan(tBTA_DM_MSG * p_data);
1204 extern void bta_dm_ble_disable_batch_scan(tBTA_DM_MSG * p_data);
1205 extern void bta_dm_ble_read_scan_reports(tBTA_DM_MSG * p_data);
1206 extern void bta_dm_ble_track_advertiser(tBTA_DM_MSG * p_data);
1207 extern void bta_dm_ble_get_energy_info(tBTA_DM_MSG *p_data);
1210 extern void bta_dm_set_encryption(tBTA_DM_MSG *p_data);
1211 extern void bta_dm_confirm(tBTA_DM_MSG *p_data);
1212 extern void bta_dm_passkey_cancel(tBTA_DM_MSG *p_data);
1213 #if (BTM_OOB_INCLUDED == TRUE)
1214 extern void bta_dm_loc_oob(tBTA_DM_MSG *p_data);
1215 extern void bta_dm_ci_io_req_act(tBTA_DM_MSG *p_data);
1216 extern void bta_dm_ci_rmt_oob_act(tBTA_DM_MSG *p_data);
1217 #endif /* BTM_OOB_INCLUDED */
1219 extern void bta_dm_init_pm(void);
1220 extern void bta_dm_disable_pm(void);
1222 extern void bta_dm_search_start (tBTA_DM_MSG *p_data);
1223 extern void bta_dm_search_cancel (tBTA_DM_MSG *p_data);
1224 extern void bta_dm_discover (tBTA_DM_MSG *p_data);
1225 extern void bta_dm_di_disc (tBTA_DM_MSG *p_data);
1226 extern void bta_dm_inq_cmpl (tBTA_DM_MSG *p_data);
1227 extern void bta_dm_rmt_name (tBTA_DM_MSG *p_data);
1228 extern void bta_dm_sdp_result (tBTA_DM_MSG *p_data);
1229 extern void bta_dm_search_cmpl (tBTA_DM_MSG *p_data);
1230 extern void bta_dm_free_sdp_db (tBTA_DM_MSG *p_data);
1231 extern void bta_dm_disc_result (tBTA_DM_MSG *p_data);
1232 extern void bta_dm_search_result (tBTA_DM_MSG *p_data);
1233 extern void bta_dm_discovery_cmpl (tBTA_DM_MSG *p_data);
1234 extern void bta_dm_queue_search (tBTA_DM_MSG *p_data);
1235 extern void bta_dm_queue_disc (tBTA_DM_MSG *p_data);
1236 extern void bta_dm_search_clear_queue (tBTA_DM_MSG *p_data);
1237 extern void bta_dm_search_cancel_cmpl (tBTA_DM_MSG *p_data);
1238 extern void bta_dm_search_cancel_notify (tBTA_DM_MSG *p_data);
1239 extern void bta_dm_search_cancel_transac_cmpl(tBTA_DM_MSG *p_data);
1240 extern void bta_dm_disc_rmt_name (tBTA_DM_MSG *p_data);
1241 extern tBTA_DM_PEER_DEVICE * bta_dm_find_peer_device(BD_ADDR peer_addr);
1243 extern void bta_dm_ble_config_local_privacy (tBTA_DM_MSG *p_data);
1245 extern void bta_dm_pm_active(BD_ADDR peer_addr);
1247 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )
1248 void bta_dm_eir_update_uuid(UINT16 uuid16, BOOLEAN adding);
1250 #define bta_dm_eir_update_uuid(x, y)
1253 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )&&( BTA_EIR_CANNED_UUID_LIST != TRUE )&&(BTA_EIR_SERVER_NUM_CUSTOM_UUID > 0)
1254 extern void bta_dm_update_eir_uuid (tBTA_DM_MSG *p_data);
1256 #if (BTM_EIR_SERVER_INCLUDED == TRUE)
1257 extern void bta_dm_set_eir_config (tBTA_DM_MSG *p_data);
1259 extern void bta_dm_enable_test_mode(tBTA_DM_MSG *p_data);
1260 extern void bta_dm_disable_test_mode(tBTA_DM_MSG *p_data);
1261 extern void bta_dm_execute_callback(tBTA_DM_MSG *p_data);
1263 extern void bta_dm_set_afh_channel_assesment(tBTA_DM_MSG *p_data);
1265 #endif /* BTA_DM_INT_H */