• 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 #ifndef BTM_BLE_API_TYPES_H
20 #define BTM_BLE_API_TYPES_H
21 
22 #include <base/functional/callback_forward.h>
23 #include <bluetooth/log.h>
24 #include <hardware/bt_common_types.h>
25 
26 #include <cstdint>
27 #include <vector>
28 
29 #include "stack/include/bt_octets.h"
30 #include "stack/include/btm_status.h"
31 #include "stack/include/hci_error_code.h"
32 #include "stack/include/ble_appearance.h"
33 #include "types/ble_address_with_type.h"
34 #include "types/raw_address.h"
35 
36 #define CHNL_MAP_LEN 5
37 typedef uint8_t tBTM_BLE_CHNL_MAP[CHNL_MAP_LEN];
38 
39 enum : uint8_t {
40   /* 0x00-0x04 only used for set advertising parameter command */
41   BTM_BLE_CONNECT_EVT = 0x00,
42   /* Connectable directed advertising */
43   BTM_BLE_CONNECT_DIR_EVT = 0x01,
44   /* Scannable undirected advertising */
45   BTM_BLE_DISCOVER_EVT = 0x02,
46   /* Non connectable undirected advertising */
47   BTM_BLE_NON_CONNECT_EVT = 0x03,
48   /* Connectable low duty cycle directed advertising  */
49   BTM_BLE_CONNECT_LO_DUTY_DIR_EVT = 0x04,
50 };
51 
52 /* 0x00 - 0x04 can be received on adv event type */
53 typedef enum : uint8_t {
54   BTM_BLE_ADV_IND_EVT = 0x00,
55   BTM_BLE_ADV_DIRECT_IND_EVT = 0x01,
56   BTM_BLE_ADV_SCAN_IND_EVT = 0x02,
57   BTM_BLE_ADV_NONCONN_IND_EVT = 0x03,
58   BTM_BLE_SCAN_RSP_EVT = 0x04,
59 } tBTM_BLE_EVT;
60 
61 typedef uint32_t tBTM_BLE_REF_VALUE;
62 
63 #define BTM_BLE_SCAN_MODE_PASS 0
64 #define BTM_BLE_SCAN_MODE_ACTI 1
65 #define BTM_BLE_SCAN_MODE_NONE 0xff
66 typedef uint8_t tBLE_SCAN_MODE;
67 
68 #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0
69 #define BTM_BLE_BATCH_SCAN_MODE_PASS 1
70 #define BTM_BLE_BATCH_SCAN_MODE_ACTI 2
71 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3
72 
73 typedef uint8_t tBTM_BLE_BATCH_SCAN_MODE;
74 
75 /* advertising channel map */
76 #define BTM_BLE_ADV_CHNL_37 (0x01 << 0)
77 #define BTM_BLE_ADV_CHNL_38 (0x01 << 1)
78 #define BTM_BLE_ADV_CHNL_39 (0x01 << 2)
79 typedef uint8_t tBTM_BLE_ADV_CHNL_MAP;
80 
81 /*d efault advertising channel map */
82 #ifndef BTM_BLE_DEFAULT_ADV_CHNL_MAP
83 #define BTM_BLE_DEFAULT_ADV_CHNL_MAP \
84   (BTM_BLE_ADV_CHNL_37 | BTM_BLE_ADV_CHNL_38 | BTM_BLE_ADV_CHNL_39)
85 #endif
86 
87 /* advertising filter policy */
88 #define AP_SCAN_CONN_ALL 0x00 /* default */
89 #define AP_SCAN_WL_CONN_ALL 0x01
90 #define AP_SCAN_ALL_CONN_WL 0x02
91 #define AP_SCAN_CONN_WL 0x03
92 #define AP_SCAN_CONN_POLICY_MAX 0x04
93 typedef uint8_t tBTM_BLE_AFP;
94 
95 /* default advertising filter policy */
96 #ifndef BTM_BLE_DEFAULT_AFP
97 #define BTM_BLE_DEFAULT_AFP AP_SCAN_CONN_ALL
98 #endif
99 
100 /* scanning filter policy */
101 /* 0: accept adv packet from all, directed adv pkt not directed */
102 /*    to local device is ignored */
103 #define SP_ADV_ALL 0x00
104 
105 typedef uint8_t tBTM_BLE_SFP;
106 
107 #ifndef BTM_BLE_DEFAULT_SFP
108 #define BTM_BLE_DEFAULT_SFP SP_ADV_ALL
109 #endif
110 
111 /* Full scan boundary values */
112 #define BTM_BLE_ADV_SCAN_FULL_MIN 0x00
113 #define BTM_BLE_ADV_SCAN_FULL_MAX 0x64
114 
115 /* Partial scan boundary values */
116 #define BTM_BLE_ADV_SCAN_TRUNC_MAX BTM_BLE_ADV_SCAN_FULL_MAX
117 
118 /* Threshold values */
119 #define BTM_BLE_ADV_SCAN_THR_MAX BTM_BLE_ADV_SCAN_FULL_MAX
120 
121 /* connection parameter boundary values */
122 #define BTM_BLE_SCAN_INT_MIN 0x0004
123 #define BTM_BLE_SCAN_INT_MAX 0x4000
124 #define BTM_BLE_SCAN_WIN_MIN 0x0004
125 #define BTM_BLE_SCAN_WIN_MAX 0x4000
126 #define BTM_BLE_EXT_SCAN_INT_MAX 0x00FFFFFF
127 #define BTM_BLE_EXT_SCAN_WIN_MAX 0xFFFF
128 #define BTM_BLE_CONN_INT_MIN 0x0006
129 #define BTM_BLE_CONN_INT_MAX 0x0C80
130 #define BTM_BLE_CONN_LATENCY_MAX 500
131 #define BTM_BLE_CONN_SUP_TOUT_MIN 0x000A
132 #define BTM_BLE_CONN_SUP_TOUT_MAX 0x0C80
133 /* use this value when a specific value not to be overwritten */
134 #define BTM_BLE_CONN_PARAM_UNDEF 0xffff
135 #define BTM_BLE_SCAN_PARAM_UNDEF 0xffff
136 
137 /* default connection parameters if not configured, use GAP recommended value
138  * for auto/selective connection */
139 /* default scan interval */
140 #ifndef BTM_BLE_SCAN_FAST_INT
141 #define BTM_BLE_SCAN_FAST_INT 96 /* 30 ~ 60 ms (use 60)  = 96 *0.625 */
142 #endif
143 /* default scan window for background connection, applicable for auto connection
144  * or selective connection */
145 #ifndef BTM_BLE_SCAN_FAST_WIN
146 #define BTM_BLE_SCAN_FAST_WIN 48 /* 30 ms = 48 *0.625 */
147 #endif
148 
149 /* default scan paramter used in reduced power cycle (background scanning) */
150 #ifndef BTM_BLE_SCAN_SLOW_INT_1
151 #define BTM_BLE_SCAN_SLOW_INT_1 2048 /* 1.28 s   = 2048 *0.625 */
152 #endif
153 #ifndef BTM_BLE_SCAN_SLOW_WIN_1
154 #define BTM_BLE_SCAN_SLOW_WIN_1 48 /* 30 ms = 48 *0.625 */
155 #endif
156 
157 /* default scan paramter used in reduced power cycle (background scanning) */
158 #ifndef BTM_BLE_SCAN_SLOW_INT_2
159 #define BTM_BLE_SCAN_SLOW_INT_2 4096 /* 2.56 s   = 4096 *0.625 */
160 #endif
161 #ifndef BTM_BLE_SCAN_SLOW_WIN_2
162 #define BTM_BLE_SCAN_SLOW_WIN_2 36 /* 22.5 ms = 36 *0.625 */
163 #endif
164 
165 /* default connection interval min */
166 #ifndef BTM_BLE_CONN_INT_MIN_DEF
167 /* recommended min: 30ms  = 24 * 1.25 */
168 #ifndef BTM_BLE_CONN_INT_MIN_DEF
169 #define BTM_BLE_CONN_INT_MIN_DEF 24
170 #endif
171 #endif
172 
173 /* default connectino interval max */
174 #ifndef BTM_BLE_CONN_INT_MAX_DEF
175 /* recommended max: 50 ms = 56 * 1.25 */
176 #ifndef BTM_BLE_CONN_INT_MAX_DEF
177 #define BTM_BLE_CONN_INT_MAX_DEF 40
178 #endif
179 #endif
180 
181 /* default peripheral latency */
182 #ifndef BTM_BLE_CONN_PERIPHERAL_LATENCY_DEF
183 #define BTM_BLE_CONN_PERIPHERAL_LATENCY_DEF 0 /* 0 */
184 #endif
185 
186 /* default supervision timeout */
187 #ifndef BTM_BLE_CONN_TIMEOUT_DEF
188 #define BTM_BLE_CONN_TIMEOUT_DEF 500
189 #endif
190 
191 /* minimum supervision timeout */
192 #ifndef BTM_BLE_CONN_TIMEOUT_MIN_DEF
193 #define BTM_BLE_CONN_TIMEOUT_MIN_DEF 100
194 #endif
195 
196 /* minimum acceptable connection interval */
197 #ifndef BTM_BLE_CONN_INT_MIN_LIMIT
198 #define BTM_BLE_CONN_INT_MIN_LIMIT 0x0009
199 #endif
200 
201 /* minimum acceptable connection interval when there is bonded Hearing Aid
202  * device */
203 #ifndef BTM_BLE_CONN_INT_MIN_HEARINGAID
204 #define BTM_BLE_CONN_INT_MIN_HEARINGAID 0x0010
205 #endif
206 
207 #define BTM_CMAC_TLEN_SIZE 8     /* 64 bits */
208 #define BTM_BLE_AUTH_SIGN_LEN 12 /* BLE data signature length 8 Bytes + 4 bytes counter*/
209 typedef uint8_t BLE_SIGNATURE[BTM_BLE_AUTH_SIGN_LEN]; /* Device address */
210 
211 #ifndef BTM_BLE_HOST_SUPPORT
212 #define BTM_BLE_HOST_SUPPORT 0x01
213 #endif
214 
215 #ifndef BTM_BLE_SIMULTANEOUS_HOST
216 #define BTM_BLE_SIMULTANEOUS_HOST 0x01
217 #endif
218 
219 /* Appearance Values Reported with BTM_BLE_AD_TYPE_APPEARANCE */
220 #define BTM_BLE_APPEARANCE_UNKNOWN BLE_APPEARANCE_UNKNOWN
221 #define BTM_BLE_APPEARANCE_GENERIC_PHONE BLE_APPEARANCE_GENERIC_PHONE
222 #define BTM_BLE_APPEARANCE_GENERIC_COMPUTER BLE_APPEARANCE_GENERIC_COMPUTER
223 #define BTM_BLE_APPEARANCE_GENERIC_WATCH BLE_APPEARANCE_GENERIC_WATCH
224 #define BTM_BLE_APPEARANCE_SPORTS_WATCH BLE_APPEARANCE_SPORTS_WATCH
225 #define BTM_BLE_APPEARANCE_GENERIC_CLOCK BLE_APPEARANCE_GENERIC_CLOCK
226 #define BTM_BLE_APPEARANCE_GENERIC_DISPLAY BLE_APPEARANCE_GENERIC_DISPLAY
227 #define BTM_BLE_APPEARANCE_GENERIC_REMOTE BLE_APPEARANCE_GENERIC_REMOTE
228 #define BTM_BLE_APPEARANCE_GENERIC_EYEGLASSES BLE_APPEARANCE_GENERIC_EYEGLASSES
229 #define BTM_BLE_APPEARANCE_GENERIC_TAG BLE_APPEARANCE_GENERIC_TAG
230 #define BTM_BLE_APPEARANCE_GENERIC_KEYRING BLE_APPEARANCE_GENERIC_KEYRING
231 #define BTM_BLE_APPEARANCE_GENERIC_MEDIA_PLAYER BLE_APPEARANCE_GENERIC_MEDIA_PLAYER
232 #define BTM_BLE_APPEARANCE_GENERIC_BARCODE_SCANNER BLE_APPEARANCE_GENERIC_BARCODE_SCANNER
233 #define BTM_BLE_APPEARANCE_GENERIC_THERMOMETER BLE_APPEARANCE_GENERIC_THERMOMETER
234 #define BTM_BLE_APPEARANCE_THERMOMETER_EAR BLE_APPEARANCE_THERMOMETER_EAR
235 #define BTM_BLE_APPEARANCE_GENERIC_HEART_RATE BLE_APPEARANCE_GENERIC_HEART_RATE
236 #define BTM_BLE_APPEARANCE_HEART_RATE_BELT BLE_APPEARANCE_HEART_RATE_BELT
237 #define BTM_BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE
238 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_ARM BLE_APPEARANCE_BLOOD_PRESSURE_ARM
239 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_WRIST BLE_APPEARANCE_BLOOD_PRESSURE_WRIST
240 #define BTM_BLE_APPEARANCE_GENERIC_HID BLE_APPEARANCE_GENERIC_HID
241 #define BTM_BLE_APPEARANCE_HID_KEYBOARD BLE_APPEARANCE_HID_KEYBOARD
242 #define BTM_BLE_APPEARANCE_HID_MOUSE BLE_APPEARANCE_HID_MOUSE
243 #define BTM_BLE_APPEARANCE_HID_JOYSTICK BLE_APPEARANCE_HID_JOYSTICK
244 #define BTM_BLE_APPEARANCE_HID_GAMEPAD BLE_APPEARANCE_HID_GAMEPAD
245 #define BTM_BLE_APPEARANCE_HID_DIGITIZER_TABLET BLE_APPEARANCE_HID_DIGITIZER_TABLET
246 #define BTM_BLE_APPEARANCE_HID_CARD_READER BLE_APPEARANCE_HID_CARD_READER
247 #define BTM_BLE_APPEARANCE_HID_DIGITAL_PEN BLE_APPEARANCE_HID_DIGITAL_PEN
248 #define BTM_BLE_APPEARANCE_HID_BARCODE_SCANNER BLE_APPEARANCE_HID_BARCODE_SCANNER
249 #define BTM_BLE_APPEARANCE_GENERIC_GLUCOSE BLE_APPEARANCE_GENERIC_GLUCOSE
250 #define BTM_BLE_APPEARANCE_GENERIC_WALKING BLE_APPEARANCE_GENERIC_WALKING
251 #define BTM_BLE_APPEARANCE_WALKING_IN_SHOE BLE_APPEARANCE_WALKING_IN_SHOE
252 #define BTM_BLE_APPEARANCE_WALKING_ON_SHOE BLE_APPEARANCE_WALKING_ON_SHOE
253 #define BTM_BLE_APPEARANCE_WALKING_ON_HIP BLE_APPEARANCE_WALKING_ON_HIP
254 #define BTM_BLE_APPEARANCE_GENERIC_CYCLING BLE_APPEARANCE_GENERIC_CYCLING
255 #define BTM_BLE_APPEARANCE_CYCLING_COMPUTER BLE_APPEARANCE_CYCLING_COMPUTER
256 #define BTM_BLE_APPEARANCE_CYCLING_SPEED BLE_APPEARANCE_CYCLING_SPEED
257 #define BTM_BLE_APPEARANCE_CYCLING_CADENCE BLE_APPEARANCE_CYCLING_CADENCE
258 #define BTM_BLE_APPEARANCE_CYCLING_POWER BLE_APPEARANCE_CYCLING_POWER
259 #define BTM_BLE_APPEARANCE_CYCLING_SPEED_CADENCE BLE_APPEARANCE_CYCLING_SPEED_CADENCE
260 #define BTM_BLE_APPEARANCE_GENERIC_WEARABLE_AUDIO_DEVICE \
261                 BLE_APPEARANCE_GENERIC_WEARABLE_AUDIO_DEVICE
262 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_EARBUD \
263                 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_EARBUD
264 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADSET \
265                 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADSET
266 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADPHONES \
267                 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADPHONES
268 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_NECK_BAND \
269                 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_NECK_BAND
270 #define BTM_BLE_APPEARANCE_GENERIC_PULSE_OXIMETER BLE_APPEARANCE_GENERIC_PULSE_OXIMETER
271 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP
272 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_WRIST BLE_APPEARANCE_PULSE_OXIMETER_WRIST
273 #define BTM_BLE_APPEARANCE_GENERIC_WEIGHT BLE_APPEARANCE_GENERIC_WEIGHT
274 #define BTM_BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS \
275                 BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS
276 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION \
277                 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION
278 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV \
279                 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV
280 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD \
281                 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD
282 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV \
283                 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV
284 
285 /* Structure returned with Rand/Encrypt complete callback */
286 typedef struct {
287   uint8_t status;
288   uint8_t param_len;
289   uint16_t opcode;
290   uint8_t param_buf[OCTET16_LEN];
291 } tBTM_RAND_ENC;
292 
293 /* General callback function for notifying an application that a synchronous
294  * BTM function is complete. The pointer contains the address of any returned
295  * data.
296  */
297 typedef void(tBTM_RAND_ENC_CB)(tBTM_RAND_ENC* p1);
298 
299 /* ADV data flag bit definition used for BTM_BLE_AD_TYPE_FLAG */
300 #define BTM_BLE_LIMIT_DISC_FLAG (0x01 << 0)
301 #define BTM_BLE_GEN_DISC_FLAG (0x01 << 1)
302 #define BTM_BLE_BREDR_NOT_SPT (0x01 << 2)
303 /* 4.1 spec adv flag for simultaneous BR/EDR+LE connection support */
304 #define BTM_BLE_DMT_CONTROLLER_SPT (0x01 << 3)
305 #define BTM_BLE_DMT_HOST_SPT (0x01 << 4)
306 
307 // TODO(jpawlowski): this should be removed with code that depend on it.
308 #define BTM_BLE_AD_BIT_FLAGS (0x00000001 << 1)
309 
310 #define BTM_BLE_AD_TYPE_FLAG HCI_EIR_FLAGS_TYPE /* 0x01 */
311 #define BTM_BLE_AD_TYPE_16SRV_CMPL                                          \
312   HCI_EIR_COMPLETE_16BITS_UUID_TYPE                                 /* 0x03 \
313                                                                      */
314 #define BTM_BLE_AD_TYPE_SERVICE_DATA_TYPE HCI_EIR_SERVICE_DATA_TYPE /* 0x16 */
315 #define BTM_BLE_AD_TYPE_APPEARANCE 0x19
316 #define BTM_BLE_AD_TYPE_RSI HCI_EIR_RSI_TYPE /* 0x2E */
317 #define BTM_BLE_AD_TYPE_BROADCAST_NAME 0x30
318 
319 /*  Min/max Preferred  number of payload octets that the local Controller
320     should include in a single Link Layer Data Channel PDU. */
321 #define BTM_BLE_DATA_SIZE_MAX 0x00fb
322 #define BTM_BLE_DATA_SIZE_MIN 0x001b
323 
324 /*  Preferred maximum number of microseconds that the local Controller
325     should use to transmit a single Link Layer Data Channel PDU. */
326 #define BTM_BLE_DATA_TX_TIME_MAX_LEGACY 0x0848
327 #define BTM_BLE_DATA_TX_TIME_MAX 0x4290
328 
329 /* adv tx power in dBm */
330 typedef struct {
331   uint8_t adv_inst_max; /* max adv instance supported in controller */
332   uint8_t rpa_offloading;
333   uint16_t tot_scan_results_strg;
334   uint8_t max_irk_list_sz;
335   uint8_t filter_support;
336   uint8_t max_filter;
337   uint8_t energy_support;
338   bool values_read;
339   uint16_t version_supported;
340   uint16_t total_trackable_advertisers;
341   uint8_t extended_scan_support;
342   uint8_t debug_logging_supported;
343   uint8_t le_address_generation_offloading_support;
344   uint32_t a2dp_source_offload_capability_mask;
345   uint8_t quality_report_support;
346   uint32_t dynamic_audio_buffer_support;
347   uint16_t adv_filter_extended_features_mask;
348   uint8_t a2dp_offload_v2_support;
349 } tBTM_BLE_VSC_CB;
350 
351 /* Stored the default/maximum/minimum buffer time for dynamic audio buffer.
352  * For A2DP offload usage, the unit is millisecond.
353  * For A2DP legacy usage, the unit is buffer queue size*/
354 typedef struct {
355   uint16_t default_buffer_time;
356   uint16_t maximum_buffer_time;
357   uint16_t minimum_buffer_time;
358 } tBTM_BT_DYNAMIC_AUDIO_BUFFER_CB;
359 
360 typedef void(tBTM_BLE_ADV_DATA_CMPL_CBACK)(tBTM_STATUS status);
361 
362 #ifndef BTM_BLE_MULTI_ADV_MAX
363 #define BTM_BLE_MULTI_ADV_MAX                           \
364   16 /* controller returned adv_inst_max should be less \
365         than this number */
366 #endif
367 
368 typedef uint16_t tCONN_ID;
369 typedef uint8_t tGATT_IF;
370 typedef uint8_t tTCB_IDX;
371 
372 inline constexpr tGATT_IF GATT_IF_INVALID = static_cast<tGATT_IF>(0);
373 // 0xF1 ~ 0xFF are reserved for special use cases.
374 inline constexpr tGATT_IF GATT_IF_MAX = static_cast<tGATT_IF>(0xf8);
375 /* connection manager doesn't generate its own IDs. Instead, all GATT clients
376  * use their gatt_if to identify against connection manager. When stack tries to
377  * create l2cap connection, it will use this fixed ID. */
378 inline constexpr tGATT_IF CONN_MGR_ID_L2CAP = static_cast<tGATT_IF>(0xf9);
379 
380 typedef enum : uint8_t {
381   BTM_BLE_DIRECT_CONNECTION = 0x00,
382   BTM_BLE_BKG_CONNECT_ALLOW_LIST = 0x01,
383   BTM_BLE_BKG_CONNECT_TARGETED_ANNOUNCEMENTS = 0x02,
384 } tBTM_BLE_CONN_TYPE;
385 
386 typedef void(tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value);
387 using tBTM_BLE_SCAN_REP_CBACK =
388         base::Callback<void(tBTM_STATUS /* status */, uint8_t /* report_format */,
389                             uint8_t /* num_reports */, std::vector<uint8_t>)>;
390 
391 #ifndef BTM_BLE_BATCH_SCAN_MAX
392 #define BTM_BLE_BATCH_SCAN_MAX 5
393 #endif
394 
395 #ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE
396 #define BTM_BLE_BATCH_REP_MAIN_Q_SIZE 2
397 #endif
398 
399 typedef enum {
400   BTM_BLE_SCAN_INVALID_STATE = 0,
401   BTM_BLE_SCAN_ENABLE_CALLED = 1,
402   BTM_BLE_SCAN_ENABLED_STATE = 2,
403   BTM_BLE_SCAN_DISABLE_CALLED = 3,
404   BTM_BLE_SCAN_DISABLED_STATE = 4
405 } tBTM_BLE_BATCH_SCAN_STATE;
406 
407 enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS };
408 typedef uint8_t tBTM_BLE_DISCARD_RULE;
409 
410 typedef struct {
411   tBTM_BLE_BATCH_SCAN_STATE cur_state;
412   tBTM_BLE_BATCH_SCAN_MODE scan_mode;
413   uint32_t scan_interval;
414   uint32_t scan_window;
415   tBLE_ADDR_TYPE addr_type;
416   tBTM_BLE_DISCARD_RULE discard_rule;
417   tBTM_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback;
418   tBTM_BLE_REF_VALUE ref_value;
419 } tBTM_BLE_BATCH_SCAN_CB;
420 
421 /* filter selection bit index  */
422 #define BTM_BLE_PF_ADDR_FILTER 0
423 #define BTM_BLE_PF_SRVC_DATA 1
424 #define BTM_BLE_PF_SRVC_UUID 2
425 #define BTM_BLE_PF_SRVC_SOL_UUID 3
426 #define BTM_BLE_PF_LOCAL_NAME 4
427 #define BTM_BLE_PF_MANU_DATA 5
428 #define BTM_BLE_PF_SRVC_DATA_PATTERN 6
429 /* when passed in payload filter type all, only clear action is applicable */
430 #define BTM_BLE_PF_TYPE_ALL 7
431 #define BTM_BLE_PF_TYPE_MAX 8
432 
433 /* max number of filter spot for different filter type */
434 #ifndef BTM_BLE_MAX_UUID_FILTER
435 #define BTM_BLE_MAX_UUID_FILTER 8
436 #endif
437 #ifndef BTM_BLE_MAX_ADDR_FILTER
438 #define BTM_BLE_MAX_ADDR_FILTER 8
439 #endif
440 #ifndef BTM_BLE_PF_STR_COND_MAX
441 #define BTM_BLE_PF_STR_COND_MAX 4 /* apply to manu data , or local name */
442 #endif
443 #ifndef BTM_BLE_PF_STR_LEN_MAX
444 #define BTM_BLE_PF_STR_LEN_MAX 29 /* match for first 29 bytes */
445 #endif
446 
447 typedef uint8_t tBTM_BLE_PF_COND_TYPE;
448 
449 #define BTM_BLE_PF_LOGIC_OR 0
450 #define BTM_BLE_PF_LOGIC_AND 1
451 typedef uint8_t tBTM_BLE_PF_LOGIC_TYPE;
452 
453 #define BTM_BLE_PF_ENABLE 1
454 #define BTM_BLE_PF_CONFIG 2
455 
456 typedef uint8_t tBTM_BLE_PF_FILT_INDEX;
457 
458 enum { BTM_BLE_SCAN_COND_ADD, BTM_BLE_SCAN_COND_DELETE, BTM_BLE_SCAN_COND_CLEAR = 2 };
459 typedef uint8_t tBTM_BLE_SCAN_COND_OP;
460 
461 /* BLE adv payload filtering config complete callback */
462 using tBTM_BLE_PF_CFG_CBACK =
463         base::Callback<void(uint8_t /* avbl_space */, tBTM_BLE_SCAN_COND_OP /* action */,
464                             tBTM_STATUS /* btm_status */)>;
465 
466 /* BLE adv payload filtering status setup complete callback */
467 using tBTM_BLE_PF_STATUS_CBACK =
468         base::Callback<void(tBTM_BLE_SCAN_COND_OP /*action*/, tBTM_STATUS /* btm_status */)>;
469 
470 /* BLE adv payload filtering param setup complete callback */
471 using tBTM_BLE_PF_PARAM_CB =
472         base::Callback<void(uint8_t /* avbl_space */, tBTM_BLE_SCAN_COND_OP /* action */,
473                             tBTM_STATUS /* btm_status */)>;
474 
475 #ifndef BTM_CS_IRK_LIST_MAX
476 #define BTM_CS_IRK_LIST_MAX 0x20
477 #endif
478 
479 typedef struct {
480   bool in_use;
481   RawAddress bd_addr;
482   uint8_t pf_counter[BTM_BLE_PF_TYPE_MAX]; /* number of filter indexed by
483                                               tBTM_BLE_PF_COND_TYPE */
484 } tBTM_BLE_PF_COUNT;
485 
486 typedef struct {
487   bool enable;
488   uint8_t op_type;
489   tBTM_BLE_PF_COUNT* p_addr_filter_count; /* per BDA filter array */
490   tBLE_BD_ADDR cur_filter_target;
491 } tBTM_BLE_ADV_FILTER_CB;
492 
493 /* Sub codes */
494 #define BTM_BLE_META_PF_ENABLE 0x00
495 #define BTM_BLE_META_PF_FEAT_SEL 0x01
496 #define BTM_BLE_META_PF_ADDR 0x02
497 #define BTM_BLE_META_PF_UUID 0x03
498 #define BTM_BLE_META_PF_SOL_UUID 0x04
499 #define BTM_BLE_META_PF_LOCAL_NAME 0x05
500 #define BTM_BLE_META_PF_MANU_DATA 0x06
501 #define BTM_BLE_META_PF_SRVC_DATA 0x07
502 #define BTM_BLE_META_PF_ALL 0x08
503 
504 #define ADV_INFO_PRESENT 0x00
505 #define NO_ADV_INFO_PRESENT 0x01
506 
507 typedef btgatt_track_adv_info_t tBTM_BLE_TRACK_ADV_DATA;
508 
509 typedef void(tBTM_BLE_TRACK_ADV_CBACK)(tBTM_BLE_TRACK_ADV_DATA* p_track_adv_data);
510 
511 typedef struct {
512   tBTM_BLE_REF_VALUE ref_value;
513   tBTM_BLE_TRACK_ADV_CBACK* p_track_cback;
514 } tBTM_BLE_ADV_TRACK_CB;
515 
516 typedef uint32_t tBTM_BLE_TX_TIME_MS;
517 typedef uint32_t tBTM_BLE_RX_TIME_MS;
518 typedef uint32_t tBTM_BLE_IDLE_TIME_MS;
519 typedef uint32_t tBTM_BLE_ENERGY_USED;
520 
521 typedef void(tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time, tBTM_BLE_RX_TIME_MS rx_time,
522                                          tBTM_BLE_IDLE_TIME_MS idle_time,
523                                          tBTM_BLE_ENERGY_USED energy_used, tHCI_STATUS status);
524 
525 typedef struct {
526   tBTM_BLE_ENERGY_INFO_CBACK* p_ener_cback;
527 } tBTM_BLE_ENERGY_INFO_CB;
528 
529 typedef void(tBTM_BLE_CTRL_FEATURES_CBACK)(tHCI_STATUS status);
530 
531 namespace std {
532 template <>
533 struct formatter<tBTM_BLE_CONN_TYPE> : enum_formatter<tBTM_BLE_CONN_TYPE> {};
534 }  // namespace std
535 
536 #endif  // BTM_BLE_API_TYPES_H
537