1 /****************************************************************************** 2 * 3 * Copyright 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 26 #ifndef BTM_BLE_INT_H 27 #define BTM_BLE_INT_H 28 29 #include "bt_target.h" 30 #include "btm_ble_api.h" 31 #include "btm_ble_int_types.h" 32 #include "btm_int_types.h" 33 #include "smp_api.h" 34 #include "stack/include/hci_error_code.h" 35 #include "types/ble_address_with_type.h" 36 #include "types/raw_address.h" 37 38 void btm_ble_process_periodic_adv_sync_est_evt(uint8_t len, const uint8_t* p); 39 void btm_ble_process_periodic_adv_pkt(uint8_t len, const uint8_t* p); 40 void btm_ble_process_periodic_adv_sync_lost_evt(uint8_t len, uint8_t* p); 41 void btm_send_hci_set_scan_params(uint8_t scan_type, uint16_t scan_int, 42 uint16_t scan_win, 43 tBLE_ADDR_TYPE addr_type_own, 44 uint8_t scan_filter_policy); 45 46 void btm_ble_init(void); 47 void btm_ble_free(); 48 void btm_ble_connected(const RawAddress& bda, uint16_t handle, uint8_t enc_mode, 49 uint8_t role, tBLE_ADDR_TYPE addr_type, 50 bool addr_matched, 51 bool can_read_discoverable_characteristics); 52 53 /* LE security function from btm_sec.cc */ 54 void btm_ble_link_sec_check(const RawAddress& bd_addr, 55 tBTM_LE_AUTH_REQ auth_req, 56 tBTM_BLE_SEC_REQ_ACT* p_sec_req_act); 57 void btm_ble_ltk_request_reply(const RawAddress& bda, bool use_stk, 58 const Octet16& stk); 59 tBTM_STATUS btm_proc_smp_cback(tSMP_EVT event, const RawAddress& bd_addr, 60 const tSMP_EVT_DATA* p_data); 61 tBTM_STATUS btm_ble_set_encryption(const RawAddress& bd_addr, 62 tBTM_BLE_SEC_ACT sec_act, uint8_t link_role); 63 tBTM_STATUS btm_ble_start_encrypt(const RawAddress& bda, bool use_stk, 64 Octet16* p_stk); 65 void btm_ble_link_encrypted(const RawAddress& bd_addr, uint8_t encr_enable); 66 67 /* LE device management functions */ 68 void btm_ble_reset_id(void); 69 70 bool btm_get_local_div(const RawAddress& bd_addr, uint16_t* p_div); 71 bool btm_ble_get_enc_key_type(const RawAddress& bd_addr, uint8_t* p_key_types); 72 73 void btm_sec_save_le_key(const RawAddress& bd_addr, tBTM_LE_KEY_TYPE key_type, 74 tBTM_LE_KEY_VALUE* p_keys, bool pass_to_application); 75 void btm_ble_update_sec_key_size(const RawAddress& bd_addr, 76 uint8_t enc_key_size); 77 uint8_t btm_ble_read_sec_key_size(const RawAddress& bd_addr); 78 79 /* acceptlist function */ 80 void btm_update_scanner_filter_policy(tBTM_BLE_SFP scan_policy); 81 82 /* background connection function */ 83 bool btm_ble_suspend_bg_conn(void); 84 bool btm_ble_resume_bg_conn(void); 85 void btm_ble_update_mode_operation(uint8_t link_role, const RawAddress* bda, 86 tHCI_STATUS status); 87 /* BLE address management */ 88 void btm_gen_resolvable_private_addr( 89 base::Callback<void(const RawAddress& rpa)> cb); 90 91 tBTM_SEC_DEV_REC* btm_ble_resolve_random_addr(const RawAddress& random_bda); 92 void btm_gen_resolve_paddr_low(const RawAddress& address); 93 uint64_t btm_get_next_private_addrress_interval_ms(); 94 95 /* privacy function */ 96 /* BLE address mapping with CS feature */ 97 bool btm_random_pseudo_to_identity_addr(RawAddress* random_pseudo, 98 tBLE_ADDR_TYPE* p_identity_addr_type); 99 void btm_ble_refresh_peer_resolvable_private_addr( 100 const RawAddress& pseudo_bda, const RawAddress& rra, 101 tBTM_SEC_BLE::tADDRESS_TYPE type); 102 bool btm_ble_read_resolving_list_entry(tBTM_SEC_DEV_REC* p_dev_rec); 103 104 bool btm_ble_addr_resolvable(const RawAddress& rpa, 105 tBTM_SEC_DEV_REC* p_dev_rec); 106 107 void btm_ble_resolving_list_load_dev(tBTM_SEC_DEV_REC& p_dev_rec); 108 void btm_ble_resolving_list_remove_dev(tBTM_SEC_DEV_REC* p_dev_rec); 109 void btm_ble_resolving_list_init(uint8_t max_irk_list_sz); 110 111 void btm_ble_adv_init(void); 112 void btm_ble_multi_adv_cleanup(void); 113 void btm_ble_batchscan_init(void); 114 void btm_ble_adv_filter_init(void); 115 bool btm_ble_topology_check(tBTM_BLE_STATE_MASK request); 116 bool btm_ble_clear_topology_mask(tBTM_BLE_STATE_MASK request_state); 117 bool btm_ble_set_topology_mask(tBTM_BLE_STATE_MASK request_state); 118 119 void btm_ble_scanner_init(void); 120 void btm_ble_scanner_cleanup(void); 121 122 #if (BTM_BLE_CONFORMANCE_TESTING == TRUE) 123 void btm_ble_set_no_disc_if_pair_fail(bool disble_disc); 124 void btm_ble_set_test_mac_value(bool enable, uint8_t* p_test_mac_val); 125 void btm_ble_set_test_local_sign_cntr_value(bool enable, 126 uint32_t test_local_sign_cntr); 127 void btm_ble_set_keep_rfu_in_auth_req(bool keep_rfu); 128 #endif 129 130 #endif 131