1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
/******************************************************************************
*
* Copyright 2009-2012 Broadcom Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************/
#pragma once
#include "bta/include/bta_api.h"
#include "bta/include/bta_sec_api.h"
#include "btif_uid.h"
#include "hci/le_rand_callback.h"
#include "internal_include/bt_target.h"
#include "internal_include/bte_appl.h"
#include "stack/include/acl_api_types.h"
#include "types/raw_address.h"
/*******************************************************************************
* Constants & Macros
******************************************************************************/
#define COD_MASK 0x07FF
#define COD_UNCLASSIFIED ((0x1F) << 8)
/* Focus on Major and minor device class*/
#define COD_DEVICE_MASK 0x1FFC
#define COD_HID_KEYBOARD 0x0540
#define COD_HID_POINTING 0x0580
#define COD_HID_COMBO 0x05C0
#define COD_HID_MAJOR 0x0500
#define COD_HID_SUB_MAJOR 0x00C0
#define COD_HID_MASK 0x0700
#define COD_AV_HEADSETS 0x0404
#define COD_AV_HANDSFREE 0x0408
#define COD_AV_HEADPHONES 0x0418
#define COD_AV_PORTABLE_AUDIO 0x041C
#define COD_AV_HIFI_AUDIO 0x0428
#define COD_CLASS_LE_AUDIO (1 << 14)
/*******************************************************************************
* Functions
******************************************************************************/
void btif_dm_init(uid_set_t* set);
void btif_dm_cleanup(void);
/**
* BTIF callback for security events
*/
void btif_dm_sec_evt(tBTA_DM_SEC_EVT event, tBTA_DM_SEC* p_data);
/**
* BTIF callback for ACL up/down and address consolidation events
*/
void btif_dm_acl_evt(tBTA_DM_ACL_EVT event, tBTA_DM_ACL* p_data);
/**
* Notify BT disable being initiated. DM may chose to abort
* pending commands, like pairing
*/
void btif_dm_on_disable(void);
/**
* Callout for handling io_capabilities request
*/
void btif_dm_proc_io_req(tBTM_AUTH_REQ* p_auth_req, bool is_orig);
/**
* Callout for handling io_capabilities response
*/
void btif_dm_proc_io_rsp(const RawAddress& bd_addr, tBTM_IO_CAP io_cap, tBTM_OOB_DATA oob_data,
tBTM_AUTH_REQ auth_req);
/**
* Device Configuration Queries
*/
DEV_CLASS btif_dm_get_local_class_of_device();
/**
* Out-of-band functions
*/
void btif_dm_set_oob_for_io_req(tBTM_OOB_DATA* p_oob_data);
void btif_dm_set_oob_for_le_io_req(const RawAddress& bd_addr, tBTM_OOB_DATA* p_oob_data,
tBTM_LE_AUTH_REQ* p_auth_req);
void btif_dm_load_local_oob(void);
void btif_dm_proc_loc_oob(tBT_TRANSPORT transport, bool is_valid, const Octet16& c,
const Octet16& r);
bool btif_dm_proc_rmt_oob(const RawAddress& bd_addr, Octet16* p_c, Octet16* p_r);
void btif_dm_generate_local_oob_data(tBT_TRANSPORT transport);
void btif_check_device_in_inquiry_db(const RawAddress& address);
bool btif_get_address_type(const RawAddress& bda, tBLE_ADDR_TYPE* p_addr_type);
bool btif_get_device_type(const RawAddress& bda, int* p_device_type);
void btif_dm_clear_event_filter();
void btif_dm_clear_event_mask();
void btif_dm_clear_filter_accept_list();
void btif_dm_disconnect_all_acls();
void btif_dm_disconnect_acl(const RawAddress& bd_addr, tBT_TRANSPORT transport);
void btif_dm_le_rand(bluetooth::hci::LeRandCallback callback);
void btif_dm_set_event_filter_connection_setup_all_devices();
void btif_dm_allow_wake_by_hid(std::vector<RawAddress> classic_addrs,
std::vector<std::pair<RawAddress, uint8_t>> le_addrs);
void btif_dm_restore_filter_accept_list(std::vector<std::pair<RawAddress, uint8_t>> le_devices);
void btif_dm_set_default_event_mask_except(uint64_t mask, uint64_t le_mask);
void btif_dm_set_event_filter_inquiry_result_all_devices();
void btif_dm_metadata_changed(const RawAddress& remote_bd_addr, int key,
std::vector<uint8_t> value);
void btif_dm_hh_open_failed(RawAddress* bdaddr);
bool btif_dm_is_pairing(const RawAddress& bdaddr);
/*callout for reading SMP properties from Text file*/
bool btif_dm_get_smp_config(tBTE_APPL_CFG* p_cfg);
void btif_dm_enable_service(tBTA_SERVICE_ID service_id, bool enable);
void BTIF_dm_disable();
void BTIF_dm_enable();
void BTIF_dm_report_inquiry_status_change(tBTM_INQUIRY_STATE inquiry_state);
typedef struct {
bool is_penc_key_rcvd;
tBTM_LE_PENC_KEYS penc_key; /* received peer encryption key */
bool is_pcsrk_key_rcvd;
tBTM_LE_PCSRK_KEYS pcsrk_key; /* received peer device SRK */
bool is_pid_key_rcvd;
tBTM_LE_PID_KEYS pid_key; /* peer device ID key */
bool is_lenc_key_rcvd;
tBTM_LE_LENC_KEYS lenc_key; /* local encryption reproduction keys LTK = = d1(ER,DIV,0)*/
bool is_lcsrk_key_rcvd;
tBTM_LE_LCSRK_KEYS lcsrk_key; /* local device CSRK = d1(ER,DIV,1)*/
bool is_lidk_key_rcvd; /* local identity key received */
} btif_dm_ble_cb_t;
#define BTIF_DM_LE_LOCAL_KEY_IR (1 << 0)
#define BTIF_DM_LE_LOCAL_KEY_IRK (1 << 1)
#define BTIF_DM_LE_LOCAL_KEY_DHK (1 << 2)
#define BTIF_DM_LE_LOCAL_KEY_ER (1 << 3)
void btif_dm_load_ble_local_keys(void);
void btif_dm_get_ble_local_keys(tBTA_DM_BLE_LOCAL_KEY_MASK* p_key_mask, Octet16* p_er,
tBTA_BLE_LOCAL_ID_KEYS* p_id_keys);
void btif_update_remote_properties(const RawAddress& bd_addr, BD_NAME bd_name, DEV_CLASS dev_class,
tBT_DEVICE_TYPE dev_type);
bool btif_is_interesting_le_service(const bluetooth::Uuid& uuid);
bool btif_check_cod_hid(const RawAddress& bd_addr);
bool btif_check_cod_hid_major(const RawAddress& bd_addr, uint32_t cod);
bool is_device_le_audio_capable(const RawAddress bd_addr);
bool is_le_audio_capable_during_service_discovery(const RawAddress& bd_addr);
namespace bluetooth::legacy::testing {
void bta_energy_info_cb(tBTM_BLE_TX_TIME_MS tx_time, tBTM_BLE_RX_TIME_MS rx_time,
tBTM_BLE_IDLE_TIME_MS idle_time, tBTM_BLE_ENERGY_USED energy_used,
tBTM_CONTRL_STATE ctrl_state, tBTA_STATUS status);
void btif_on_name_read(RawAddress bd_addr, tHCI_ERROR_CODE hci_status, const BD_NAME bd_name,
bool during_device_search);
} // namespace bluetooth::legacy::testing
|