1 /****************************************************************************** 2 * 3 * Copyright (C) 1999-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 file contains the main Bluetooth Manager (BTM) internal 22 * definitions. 23 * 24 ******************************************************************************/ 25 #ifndef BTM_INT_H 26 #define BTM_INT_H 27 28 #include "bt_common.h" 29 #include "bt_target.h" 30 #include "hcidefs.h" 31 32 #include "osi/include/alarm.h" 33 #include "osi/include/fixed_queue.h" 34 #include "osi/include/list.h" 35 #include "rfcdefs.h" 36 37 #include "btm_api.h" 38 #include "device/include/esco_parameters.h" 39 40 #include "btm_ble_int.h" 41 #include "btm_int_types.h" 42 #include "smp_api.h" 43 44 extern tBTM_CB btm_cb; 45 46 /* Internal functions provided by btm_main.cc 47 ******************************************* 48 */ 49 extern void btm_init(void); 50 51 /* Internal functions provided by btm_inq.cc 52 ****************************************** 53 */ 54 extern tBTM_STATUS btm_initiate_rem_name(BD_ADDR remote_bda, uint8_t origin, 55 period_ms_t timeout_ms, 56 tBTM_CMPL_CB* p_cb); 57 58 extern void btm_process_remote_name(BD_ADDR bda, BD_NAME name, uint16_t evt_len, 59 uint8_t hci_status); 60 extern void btm_inq_rmt_name_failed(void); 61 extern void btm_inq_remote_name_timer_timeout(void* data); 62 63 /* Inquiry related functions */ 64 extern void btm_clr_inq_db(BD_ADDR p_bda); 65 extern void btm_inq_db_init(void); 66 extern void btm_process_inq_results(uint8_t* p, uint8_t inq_res_mode); 67 extern void btm_process_inq_complete(uint8_t status, uint8_t mode); 68 extern void btm_process_cancel_complete(uint8_t status, uint8_t mode); 69 extern void btm_event_filter_complete(uint8_t* p); 70 extern void btm_inq_stop_on_ssp(void); 71 extern void btm_inq_clear_ssp(void); 72 extern tINQ_DB_ENT* btm_inq_db_find(const BD_ADDR p_bda); 73 extern bool btm_inq_find_bdaddr(BD_ADDR p_bda); 74 75 extern bool btm_lookup_eir(BD_ADDR_PTR p_rem_addr); 76 77 /* Internal functions provided by btm_acl.cc 78 ******************************************* 79 */ 80 extern void btm_acl_init(void); 81 extern void btm_acl_created(BD_ADDR bda, DEV_CLASS dc, BD_NAME bdn, 82 uint16_t hci_handle, uint8_t link_role, 83 tBT_TRANSPORT transport); 84 extern void btm_acl_removed(BD_ADDR bda, tBT_TRANSPORT transport); 85 extern void btm_acl_device_down(void); 86 extern void btm_acl_update_busy_level(tBTM_BLI_EVENT event); 87 88 extern void btm_cont_rswitch(tACL_CONN* p, tBTM_SEC_DEV_REC* p_dev_rec, 89 uint8_t hci_status); 90 91 extern uint8_t btm_handle_to_acl_index(uint16_t hci_handle); 92 extern void btm_read_link_policy_complete(uint8_t* p); 93 94 extern void btm_read_rssi_timeout(void* data); 95 extern void btm_read_rssi_complete(uint8_t* p); 96 97 extern void btm_read_tx_power_timeout(void* data); 98 extern void btm_read_tx_power_complete(uint8_t* p, bool is_ble); 99 100 extern void btm_read_link_quality_timeout(void* data); 101 extern void btm_read_link_quality_complete(uint8_t* p); 102 103 extern tBTM_STATUS btm_set_packet_types(tACL_CONN* p, uint16_t pkt_types); 104 extern void btm_process_clk_off_comp_evt(uint16_t hci_handle, 105 uint16_t clock_offset); 106 extern void btm_acl_role_changed(uint8_t hci_status, BD_ADDR bd_addr, 107 uint8_t new_role); 108 extern void btm_acl_encrypt_change(uint16_t handle, uint8_t status, 109 uint8_t encr_enable); 110 extern uint16_t btm_get_acl_disc_reason_code(void); 111 extern tBTM_STATUS btm_remove_acl(BD_ADDR bd_addr, tBT_TRANSPORT transport); 112 extern void btm_read_remote_features_complete(uint8_t* p); 113 extern void btm_read_remote_ext_features_complete(uint8_t* p); 114 extern void btm_read_remote_ext_features_failed(uint8_t status, 115 uint16_t handle); 116 extern void btm_read_remote_version_complete(uint8_t* p); 117 extern void btm_establish_continue(tACL_CONN* p_acl_cb); 118 119 extern void btm_acl_chk_peer_pkt_type_support(tACL_CONN* p, 120 uint16_t* p_pkt_type); 121 /* Read maximum data packet that can be sent over current connection */ 122 extern uint16_t btm_get_max_packet_size(BD_ADDR addr); 123 extern tACL_CONN* btm_bda_to_acl(const BD_ADDR bda, tBT_TRANSPORT transport); 124 extern bool btm_acl_notif_conn_collision(BD_ADDR bda); 125 extern void btm_acl_update_conn_addr(uint8_t conn_handle, BD_ADDR address); 126 127 extern void btm_pm_reset(void); 128 extern void btm_pm_sm_alloc(uint8_t ind); 129 extern void btm_pm_proc_cmd_status(uint8_t status); 130 extern void btm_pm_proc_mode_change(uint8_t hci_status, uint16_t hci_handle, 131 uint8_t mode, uint16_t interval); 132 extern void btm_pm_proc_ssr_evt(uint8_t* p, uint16_t evt_len); 133 extern tBTM_STATUS btm_read_power_mode_state(BD_ADDR remote_bda, 134 tBTM_PM_STATE* pmState); 135 #if (BTM_SCO_INCLUDED == TRUE) 136 extern void btm_sco_chk_pend_unpark(uint8_t hci_status, uint16_t hci_handle); 137 #else 138 #define btm_sco_chk_pend_unpark(hci_status, hci_handle) 139 #endif /* BTM_SCO_INCLUDED */ 140 141 extern void btm_qos_setup_timeout(void* data); 142 extern void btm_qos_setup_complete(uint8_t status, uint16_t handle, 143 FLOW_SPEC* p_flow); 144 145 /* Internal functions provided by btm_sco.cc 146 ******************************************* 147 */ 148 extern void btm_sco_init(void); 149 extern void btm_sco_connected(uint8_t hci_status, BD_ADDR bda, 150 uint16_t hci_handle, tBTM_ESCO_DATA* p_esco_data); 151 extern void btm_esco_proc_conn_chg(uint8_t status, uint16_t handle, 152 uint8_t tx_interval, uint8_t retrans_window, 153 uint16_t rx_pkt_len, uint16_t tx_pkt_len); 154 extern void btm_sco_conn_req(BD_ADDR bda, DEV_CLASS dev_class, 155 uint8_t link_type); 156 extern void btm_sco_removed(uint16_t hci_handle, uint8_t reason); 157 extern void btm_sco_acl_removed(BD_ADDR bda); 158 extern void btm_route_sco_data(BT_HDR* p_msg); 159 extern bool btm_is_sco_active(uint16_t handle); 160 extern void btm_remove_sco_links(BD_ADDR bda); 161 extern bool btm_is_sco_active_by_bdaddr(BD_ADDR remote_bda); 162 163 extern void btm_read_def_esco_mode(enh_esco_params_t* p_parms); 164 extern uint16_t btm_find_scb_by_handle(uint16_t handle); 165 extern void btm_sco_flush_sco_data(uint16_t sco_inx); 166 167 /* Internal functions provided by btm_devctl.cc 168 ********************************************* 169 */ 170 extern void btm_dev_init(void); 171 extern void btm_read_local_name_timeout(void* data); 172 extern void btm_read_local_name_complete(uint8_t* p, uint16_t evt_len); 173 174 extern void btm_ble_add_2_white_list_complete(uint8_t status); 175 extern void btm_ble_remove_from_white_list_complete(uint8_t* p, 176 uint16_t evt_len); 177 extern void btm_ble_clear_white_list_complete(uint8_t* p, uint16_t evt_len); 178 extern bool btm_ble_addr_resolvable(BD_ADDR rpa, tBTM_SEC_DEV_REC* p_dev_rec); 179 extern tBTM_STATUS btm_ble_read_resolving_list_entry( 180 tBTM_SEC_DEV_REC* p_dev_rec); 181 extern bool btm_ble_resolving_list_load_dev(tBTM_SEC_DEV_REC* p_dev_rec); 182 extern void btm_ble_resolving_list_remove_dev(tBTM_SEC_DEV_REC* p_dev_rec); 183 184 /* Vendor Specific Command complete evt handler */ 185 extern void btm_vsc_complete(uint8_t* p, uint16_t cc_opcode, uint16_t evt_len, 186 tBTM_CMPL_CB* p_vsc_cplt_cback); 187 extern void btm_inq_db_reset(void); 188 extern void btm_vendor_specific_evt(uint8_t* p, uint8_t evt_len); 189 extern void btm_delete_stored_link_key_complete(uint8_t* p); 190 extern void btm_report_device_status(tBTM_DEV_STATUS status); 191 192 /* Internal functions provided by btm_dev.cc 193 ********************************************* 194 */ 195 extern bool btm_dev_support_switch(BD_ADDR bd_addr); 196 197 extern tBTM_SEC_DEV_REC* btm_sec_allocate_dev_rec(void); 198 extern tBTM_SEC_DEV_REC* btm_sec_alloc_dev(BD_ADDR bd_addr); 199 extern void btm_sec_free_dev(tBTM_SEC_DEV_REC* p_dev_rec); 200 extern tBTM_SEC_DEV_REC* btm_find_dev(const BD_ADDR bd_addr); 201 extern tBTM_SEC_DEV_REC* btm_find_or_alloc_dev(BD_ADDR bd_addr); 202 extern tBTM_SEC_DEV_REC* btm_find_dev_by_handle(uint16_t handle); 203 extern tBTM_BOND_TYPE btm_get_bond_type_dev(BD_ADDR bd_addr); 204 extern bool btm_set_bond_type_dev(BD_ADDR bd_addr, tBTM_BOND_TYPE bond_type); 205 206 /* Internal functions provided by btm_sec.cc 207 ********************************************* 208 */ 209 extern bool btm_dev_support_switch(BD_ADDR bd_addr); 210 extern tBTM_STATUS btm_sec_l2cap_access_req(BD_ADDR bd_addr, uint16_t psm, 211 uint16_t handle, 212 CONNECTION_TYPE conn_type, 213 tBTM_SEC_CALLBACK* p_callback, 214 void* p_ref_data); 215 extern tBTM_STATUS btm_sec_mx_access_request( 216 BD_ADDR bd_addr, uint16_t psm, bool is_originator, uint32_t mx_proto_id, 217 uint32_t mx_chan_id, tBTM_SEC_CALLBACK* p_callback, void* p_ref_data); 218 extern void btm_sec_conn_req(uint8_t* bda, uint8_t* dc); 219 extern void btm_create_conn_cancel_complete(uint8_t* p); 220 221 extern void btm_read_inq_tx_power_timeout(void* data); 222 extern void btm_read_inq_tx_power_complete(uint8_t* p); 223 224 extern void btm_sec_init(uint8_t sec_mode); 225 extern void btm_sec_dev_reset(void); 226 extern void btm_sec_abort_access_req(BD_ADDR bd_addr); 227 extern void btm_sec_auth_complete(uint16_t handle, uint8_t status); 228 extern void btm_sec_encrypt_change(uint16_t handle, uint8_t status, 229 uint8_t encr_enable); 230 extern void btm_sec_connected(uint8_t* bda, uint16_t handle, uint8_t status, 231 uint8_t enc_mode); 232 extern tBTM_STATUS btm_sec_disconnect(uint16_t handle, uint8_t reason); 233 extern void btm_sec_disconnected(uint16_t handle, uint8_t reason); 234 extern void btm_sec_rmt_name_request_complete(uint8_t* bd_addr, 235 uint8_t* bd_name, uint8_t status); 236 extern void btm_sec_rmt_host_support_feat_evt(uint8_t* p); 237 extern void btm_io_capabilities_req(uint8_t* p); 238 extern void btm_io_capabilities_rsp(uint8_t* p); 239 extern void btm_proc_sp_req_evt(tBTM_SP_EVT event, uint8_t* p); 240 extern void btm_keypress_notif_evt(uint8_t* p); 241 extern void btm_simple_pair_complete(uint8_t* p); 242 extern void btm_sec_link_key_notification(uint8_t* p_bda, uint8_t* p_link_key, 243 uint8_t key_type); 244 extern void btm_sec_link_key_request(uint8_t* p_bda); 245 extern void btm_sec_pin_code_request(uint8_t* p_bda); 246 extern void btm_sec_update_clock_offset(uint16_t handle, uint16_t clock_offset); 247 extern void btm_sec_dev_rec_cback_event(tBTM_SEC_DEV_REC* p_dev_rec, 248 uint8_t res, bool is_le_trasnport); 249 extern void btm_sec_set_peer_sec_caps(tACL_CONN* p_acl_cb, 250 tBTM_SEC_DEV_REC* p_dev_rec); 251 252 extern void btm_sec_clear_ble_keys(tBTM_SEC_DEV_REC* p_dev_rec); 253 extern bool btm_sec_is_a_bonded_dev(BD_ADDR bda); 254 extern void btm_consolidate_dev(tBTM_SEC_DEV_REC* p_target_rec); 255 extern bool btm_sec_is_le_capable_dev(BD_ADDR bda); 256 extern bool btm_ble_init_pseudo_addr(tBTM_SEC_DEV_REC* p_dev_rec, 257 BD_ADDR new_pseudo_addr); 258 extern tBTM_SEC_SERV_REC* btm_sec_find_first_serv(CONNECTION_TYPE conn_type, 259 uint16_t psm); 260 extern bool btm_ble_start_sec_check(BD_ADDR bd_addr, uint16_t psm, 261 bool is_originator, 262 tBTM_SEC_CALLBACK* p_callback, 263 void* p_ref_data); 264 265 extern tINQ_DB_ENT* btm_inq_db_new(BD_ADDR p_bda); 266 267 extern void btm_rem_oob_req(uint8_t* p); 268 extern void btm_read_local_oob_complete(uint8_t* p); 269 270 extern void btm_acl_resubmit_page(void); 271 extern void btm_acl_reset_paging(void); 272 extern void btm_acl_paging(BT_HDR* p, BD_ADDR dest); 273 extern uint8_t btm_sec_clr_service_by_psm(uint16_t psm); 274 extern void btm_sec_clr_temp_auth_service(BD_ADDR bda); 275 276 #endif 277