• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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