• 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/callback_forward.h>
23 #include <hardware/bt_common_types.h>
24 #include <vector>
25 
26 #define CHNL_MAP_LEN 5
27 typedef uint8_t tBTM_BLE_CHNL_MAP[CHNL_MAP_LEN];
28 
29 /* 0x00-0x04 only used for set advertising parameter command */
30 #define BTM_BLE_CONNECT_EVT 0x00
31 /* Connectable directed advertising */
32 #define BTM_BLE_CONNECT_DIR_EVT 0x01
33 /* Scannable undirected advertising */
34 #define BTM_BLE_DISCOVER_EVT 0x02
35 /* Non connectable undirected advertising */
36 #define BTM_BLE_NON_CONNECT_EVT 0x03
37 /* Connectable low duty cycle directed advertising  */
38 #define BTM_BLE_CONNECT_LO_DUTY_DIR_EVT 0x04
39 /* 0x00 - 0x05 can be received on adv event type */
40 #define BTM_BLE_SCAN_RSP_EVT 0x04
41 #define BTM_BLE_SCAN_REQ_EVT 0x05
42 #define BTM_BLE_UNKNOWN_EVT 0xff
43 
44 #define BTM_BLE_UNKNOWN_EVT 0xff
45 
46 typedef uint8_t tBTM_BLE_EVT;
47 typedef uint8_t tBTM_BLE_CONN_MODE;
48 
49 typedef uint32_t tBTM_BLE_REF_VALUE;
50 
51 #define BTM_BLE_SCAN_MODE_PASS 0
52 #define BTM_BLE_SCAN_MODE_ACTI 1
53 #define BTM_BLE_SCAN_MODE_NONE 0xff
54 typedef uint8_t tBLE_SCAN_MODE;
55 
56 #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0
57 #define BTM_BLE_BATCH_SCAN_MODE_PASS 1
58 #define BTM_BLE_BATCH_SCAN_MODE_ACTI 2
59 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3
60 
61 typedef uint8_t tBTM_BLE_BATCH_SCAN_MODE;
62 
63 /* advertising channel map */
64 #define BTM_BLE_ADV_CHNL_37 (0x01 << 0)
65 #define BTM_BLE_ADV_CHNL_38 (0x01 << 1)
66 #define BTM_BLE_ADV_CHNL_39 (0x01 << 2)
67 typedef uint8_t tBTM_BLE_ADV_CHNL_MAP;
68 
69 /*d efault advertising channel map */
70 #ifndef BTM_BLE_DEFAULT_ADV_CHNL_MAP
71 #define BTM_BLE_DEFAULT_ADV_CHNL_MAP \
72   (BTM_BLE_ADV_CHNL_37 | BTM_BLE_ADV_CHNL_38 | BTM_BLE_ADV_CHNL_39)
73 #endif
74 
75 /* advertising filter policy */
76 #define AP_SCAN_CONN_ALL 0x00 /* default */
77 #define AP_SCAN_WL_CONN_ALL 0x01
78 #define AP_SCAN_ALL_CONN_WL 0x02
79 #define AP_SCAN_CONN_WL 0x03
80 #define AP_SCAN_CONN_POLICY_MAX 0x04
81 typedef uint8_t tBTM_BLE_AFP;
82 
83 /* default advertising filter policy */
84 #ifndef BTM_BLE_DEFAULT_AFP
85 #define BTM_BLE_DEFAULT_AFP AP_SCAN_CONN_ALL
86 #endif
87 
88 /* scanning filter policy */
89 /* 0: accept adv packet from all, directed adv pkt not directed */
90 /*    to local device is ignored */
91 #define SP_ADV_ALL 0x00
92 /* 1: accept adv packet from device in white list, directed adv */
93 /*    packet not directed to local device is ignored */
94 #define SP_ADV_WL 0x01
95 /* 2: accept adv packet from all, directed adv pkt */
96 /*    not directed to me is ignored except direct adv with RPA */
97 #define SP_ADV_ALL_RPA_DIR_ADV 0x02
98 /* 3: accept adv packet from device in white list, directed */
99 /*    adv pkt not directed to me is ignored except direct adv with RPA */
100 #define SP_ADV_WL_RPA_DIR_ADV 0x03
101 
102 typedef uint8_t tBTM_BLE_SFP;
103 
104 #ifndef BTM_BLE_DEFAULT_SFP
105 #define BTM_BLE_DEFAULT_SFP SP_ADV_ALL
106 #endif
107 
108 /* adv parameter boundary values */
109 #define BTM_BLE_ADV_INT_MIN 0x0020
110 #define BTM_BLE_ADV_INT_MAX 0x4000
111 
112 /* Full scan boundary values */
113 #define BTM_BLE_ADV_SCAN_FULL_MIN 0x00
114 #define BTM_BLE_ADV_SCAN_FULL_MAX 0x64
115 
116 /* Partial scan boundary values */
117 #define BTM_BLE_ADV_SCAN_TRUNC_MIN BTM_BLE_ADV_SCAN_FULL_MIN
118 #define BTM_BLE_ADV_SCAN_TRUNC_MAX BTM_BLE_ADV_SCAN_FULL_MAX
119 
120 /* Threshold values */
121 #define BTM_BLE_ADV_SCAN_THR_MIN BTM_BLE_ADV_SCAN_FULL_MIN
122 #define BTM_BLE_ADV_SCAN_THR_MAX BTM_BLE_ADV_SCAN_FULL_MAX
123 
124 /* connection parameter boundary values */
125 #define BTM_BLE_SCAN_INT_MIN 0x0004
126 #define BTM_BLE_SCAN_INT_MAX 0x4000
127 #define BTM_BLE_SCAN_WIN_MIN 0x0004
128 #define BTM_BLE_SCAN_WIN_MAX 0x4000
129 #define BTM_BLE_EXT_SCAN_INT_MAX 0x00FFFFFF
130 #define BTM_BLE_EXT_SCAN_WIN_MAX 0xFFFF
131 #define BTM_BLE_CONN_INT_MIN 0x0006
132 #define BTM_BLE_CONN_INT_MAX 0x0C80
133 #define BTM_BLE_CONN_LATENCY_MAX 500
134 #define BTM_BLE_CONN_SUP_TOUT_MIN 0x000A
135 #define BTM_BLE_CONN_SUP_TOUT_MAX 0x0C80
136 /* use this value when a specific value not to be overwritten */
137 #define BTM_BLE_CONN_PARAM_UNDEF 0xffff
138 #define BTM_BLE_SCAN_PARAM_UNDEF 0xffff
139 
140 /* default connection parameters if not configured, use GAP recommended value
141  * for auto/selective connection */
142 /* default scan interval */
143 #ifndef BTM_BLE_SCAN_FAST_INT
144 #define BTM_BLE_SCAN_FAST_INT 96 /* 30 ~ 60 ms (use 60)  = 96 *0.625 */
145 #endif
146 /* default scan window for background connection, applicable for auto connection
147  * or selective connection */
148 #ifndef BTM_BLE_SCAN_FAST_WIN
149 #define BTM_BLE_SCAN_FAST_WIN 48 /* 30 ms = 48 *0.625 */
150 #endif
151 
152 /* default scan paramter used in reduced power cycle (background scanning) */
153 #ifndef BTM_BLE_SCAN_SLOW_INT_1
154 #define BTM_BLE_SCAN_SLOW_INT_1 2048 /* 1.28 s   = 2048 *0.625 */
155 #endif
156 #ifndef BTM_BLE_SCAN_SLOW_WIN_1
157 #define BTM_BLE_SCAN_SLOW_WIN_1 48 /* 30 ms = 48 *0.625 */
158 #endif
159 
160 /* default scan paramter used in reduced power cycle (background scanning) */
161 #ifndef BTM_BLE_SCAN_SLOW_INT_2
162 #define BTM_BLE_SCAN_SLOW_INT_2 4096 /* 2.56 s   = 4096 *0.625 */
163 #endif
164 #ifndef BTM_BLE_SCAN_SLOW_WIN_2
165 #define BTM_BLE_SCAN_SLOW_WIN_2 36 /* 22.5 ms = 36 *0.625 */
166 #endif
167 
168 /* default connection interval min */
169 #ifndef BTM_BLE_CONN_INT_MIN_DEF
170 /* recommended min: 30ms  = 24 * 1.25 */
171 #define BTM_BLE_CONN_INT_MIN_DEF 24
172 #endif
173 
174 /* default connectino interval max */
175 #ifndef BTM_BLE_CONN_INT_MAX_DEF
176 /* recommended max: 50 ms = 56 * 1.25 */
177 #define BTM_BLE_CONN_INT_MAX_DEF 40
178 #endif
179 
180 /* default slave latency */
181 #ifndef BTM_BLE_CONN_SLAVE_LATENCY_DEF
182 #define BTM_BLE_CONN_SLAVE_LATENCY_DEF 0 /* 0 */
183 #endif
184 
185 /* default supervision timeout */
186 #ifndef BTM_BLE_CONN_TIMEOUT_DEF
187 #define BTM_BLE_CONN_TIMEOUT_DEF 500
188 #endif
189 
190 /* minimum supervision timeout */
191 #ifndef BTM_BLE_CONN_TIMEOUT_MIN_DEF
192 #define BTM_BLE_CONN_TIMEOUT_MIN_DEF 100
193 #endif
194 
195 /* minimum acceptable connection interval */
196 #ifndef BTM_BLE_CONN_INT_MIN_LIMIT
197 #define BTM_BLE_CONN_INT_MIN_LIMIT 0x0009
198 #endif
199 
200 /* minimum acceptable connection interval when there is bonded Hearing Aid
201  * device */
202 #ifndef BTM_BLE_CONN_INT_MIN_HEARINGAID
203 #define BTM_BLE_CONN_INT_MIN_HEARINGAID 0x0010
204 #endif
205 
206 #define BTM_CMAC_TLEN_SIZE 8 /* 64 bits */
207 #define BTM_BLE_AUTH_SIGN_LEN \
208   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_UKNOWN 0x0000
221 #define BTM_BLE_APPEARANCE_GENERIC_PHONE 0x0040
222 #define BTM_BLE_APPEARANCE_GENERIC_COMPUTER 0x0080
223 #define BTM_BLE_APPEARANCE_GENERIC_WATCH 0x00C0
224 #define BTM_BLE_APPEARANCE_SPORTS_WATCH 0x00C1
225 #define BTM_BLE_APPEARANCE_GENERIC_CLOCK 0x0100
226 #define BTM_BLE_APPEARANCE_GENERIC_DISPLAY 0x0140
227 #define BTM_BLE_APPEARANCE_GENERIC_REMOTE 0x0180
228 #define BTM_BLE_APPEARANCE_GENERIC_EYEGLASSES 0x01C0
229 #define BTM_BLE_APPEARANCE_GENERIC_TAG 0x0200
230 #define BTM_BLE_APPEARANCE_GENERIC_KEYRING 0x0240
231 #define BTM_BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 0x0280
232 #define BTM_BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 0x02C0
233 #define BTM_BLE_APPEARANCE_GENERIC_THERMOMETER 0x0300
234 #define BTM_BLE_APPEARANCE_THERMOMETER_EAR 0x0301
235 #define BTM_BLE_APPEARANCE_GENERIC_HEART_RATE 0x0340
236 #define BTM_BLE_APPEARANCE_HEART_RATE_BELT 0x0341
237 #define BTM_BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 0x0380
238 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_ARM 0x0381
239 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 0x0382
240 #define BTM_BLE_APPEARANCE_GENERIC_HID 0x03C0
241 #define BTM_BLE_APPEARANCE_HID_KEYBOARD 0x03C1
242 #define BTM_BLE_APPEARANCE_HID_MOUSE 0x03C2
243 #define BTM_BLE_APPEARANCE_HID_JOYSTICK 0x03C3
244 #define BTM_BLE_APPEARANCE_HID_GAMEPAD 0x03C4
245 #define BTM_BLE_APPEARANCE_HID_DIGITIZER_TABLET 0x03C5
246 #define BTM_BLE_APPEARANCE_HID_CARD_READER 0x03C6
247 #define BTM_BLE_APPEARANCE_HID_DIGITAL_PEN 0x03C7
248 #define BTM_BLE_APPEARANCE_HID_BARCODE_SCANNER 0x03C8
249 #define BTM_BLE_APPEARANCE_GENERIC_GLUCOSE 0x0400
250 #define BTM_BLE_APPEARANCE_GENERIC_WALKING 0x0440
251 #define BTM_BLE_APPEARANCE_WALKING_IN_SHOE 0x0441
252 #define BTM_BLE_APPEARANCE_WALKING_ON_SHOE 0x0442
253 #define BTM_BLE_APPEARANCE_WALKING_ON_HIP 0x0443
254 #define BTM_BLE_APPEARANCE_GENERIC_CYCLING 0x0480
255 #define BTM_BLE_APPEARANCE_CYCLING_COMPUTER 0x0481
256 #define BTM_BLE_APPEARANCE_CYCLING_SPEED 0x0482
257 #define BTM_BLE_APPEARANCE_CYCLING_CADENCE 0x0483
258 #define BTM_BLE_APPEARANCE_CYCLING_POWER 0x0484
259 #define BTM_BLE_APPEARANCE_CYCLING_SPEED_CADENCE 0x0485
260 #define BTM_BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 0x0C40
261 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 0x0C41
262 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_WRIST 0x0C42
263 #define BTM_BLE_APPEARANCE_GENERIC_WEIGHT 0x0C80
264 #define BTM_BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS 0x1440
265 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION 0x1441
266 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV 0x1442
267 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD 0x1443
268 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV 0x1444
269 
270 /* Structure returned with Rand/Encrypt complete callback */
271 typedef struct {
272   uint8_t status;
273   uint8_t param_len;
274   uint16_t opcode;
275   uint8_t param_buf[OCTET16_LEN];
276 } tBTM_RAND_ENC;
277 
278 /* General callback function for notifying an application that a synchronous
279  * BTM function is complete. The pointer contains the address of any returned
280  * data.
281 */
282 typedef void(tBTM_RAND_ENC_CB)(tBTM_RAND_ENC* p1);
283 
284 #define BTM_BLE_FILTER_TARGET_SCANNER 0x01
285 #define BTM_BLE_FILTER_TARGET_ADVR 0x00
286 
287 #define BTM_BLE_POLICY_BLACK_ALL 0x00  /* relevant to both */
288 #define BTM_BLE_POLICY_ALLOW_SCAN 0x01 /* relevant to advertiser */
289 #define BTM_BLE_POLICY_ALLOW_CONN 0x02 /* relevant to advertiser */
290 #define BTM_BLE_POLICY_WHITE_ALL 0x03  /* relevant to both */
291 
292 /* ADV data flag bit definition used for BTM_BLE_AD_TYPE_FLAG */
293 #define BTM_BLE_LIMIT_DISC_FLAG (0x01 << 0)
294 #define BTM_BLE_GEN_DISC_FLAG (0x01 << 1)
295 #define BTM_BLE_BREDR_NOT_SPT (0x01 << 2)
296 /* 4.1 spec adv flag for simultaneous BR/EDR+LE connection support */
297 #define BTM_BLE_DMT_CONTROLLER_SPT (0x01 << 3)
298 #define BTM_BLE_DMT_HOST_SPT (0x01 << 4)
299 #define BTM_BLE_NON_LIMIT_DISC_FLAG (0x00) /* lowest bit unset */
300 #define BTM_BLE_ADV_FLAG_MASK \
301   (BTM_BLE_LIMIT_DISC_FLAG | BTM_BLE_BREDR_NOT_SPT | BTM_BLE_GEN_DISC_FLAG)
302 #define BTM_BLE_LIMIT_DISC_MASK (BTM_BLE_LIMIT_DISC_FLAG)
303 
304 // TODO(jpawlowski): this should be removed with code that depend on it.
305 #define BTM_BLE_AD_BIT_FLAGS (0x00000001 << 1)
306 
307 #define BTM_BLE_AD_TYPE_FLAG HCI_EIR_FLAGS_TYPE /* 0x01 */
308 #define BTM_BLE_AD_TYPE_16SRV_CMPL          \
309   HCI_EIR_COMPLETE_16BITS_UUID_TYPE /* 0x03 \
310                                        */
311 #define BTM_BLE_AD_TYPE_NAME_SHORT                                         \
312   HCI_EIR_SHORTENED_LOCAL_NAME_TYPE                                /* 0x08 \
313                                                                       */
314 #define BTM_BLE_AD_TYPE_NAME_CMPL HCI_EIR_COMPLETE_LOCAL_NAME_TYPE /* 0x09 */
315 
316 #define BTM_BLE_AD_TYPE_APPEARANCE 0x19
317 
318 /*  Security settings used with L2CAP LE COC */
319 #define BTM_SEC_LE_LINK_ENCRYPTED 0x01
320 #define BTM_SEC_LE_LINK_PAIRED_WITHOUT_MITM 0x02
321 #define BTM_SEC_LE_LINK_PAIRED_WITH_MITM 0x04
322 
323 /*  Min/max Preferred  number of payload octets that the local Controller
324     should include in a single Link Layer Data Channel PDU. */
325 #define BTM_BLE_DATA_SIZE_MAX 0x00fb
326 #define BTM_BLE_DATA_SIZE_MIN 0x001b
327 
328 /*  Preferred maximum number of microseconds that the local Controller
329     should use to transmit a single Link Layer Data Channel PDU. */
330 #define BTM_BLE_DATA_TX_TIME_MIN 0x0148
331 #define BTM_BLE_DATA_TX_TIME_MAX_LEGACY  0x0848
332 #define BTM_BLE_DATA_TX_TIME_MAX         0x4290
333 
334 /* adv tx power in dBm */
335 typedef struct {
336   uint8_t adv_inst_max; /* max adv instance supported in controller */
337   uint8_t rpa_offloading;
338   uint16_t tot_scan_results_strg;
339   uint8_t max_irk_list_sz;
340   uint8_t filter_support;
341   uint8_t max_filter;
342   uint8_t energy_support;
343   bool values_read;
344   uint16_t version_supported;
345   uint16_t total_trackable_advertisers;
346   uint8_t extended_scan_support;
347   uint8_t debug_logging_supported;
348 } tBTM_BLE_VSC_CB;
349 
350 typedef void(tBTM_BLE_ADV_DATA_CMPL_CBACK)(tBTM_STATUS status);
351 
352 #ifndef BTM_BLE_MULTI_ADV_MAX
353 #define BTM_BLE_MULTI_ADV_MAX                           \
354   16 /* controller returned adv_inst_max should be less \
355         than this number */
356 #endif
357 
358 typedef uint8_t tGATT_IF;
359 
360 typedef void(tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value);
361 using tBTM_BLE_SCAN_REP_CBACK =
362     base::Callback<void(uint8_t /* status */, uint8_t /* report_format */,
363                         uint8_t /* num_reports */, std::vector<uint8_t>)>;
364 
365 #ifndef BTM_BLE_BATCH_SCAN_MAX
366 #define BTM_BLE_BATCH_SCAN_MAX 5
367 #endif
368 
369 #ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE
370 #define BTM_BLE_BATCH_REP_MAIN_Q_SIZE 2
371 #endif
372 
373 typedef enum {
374   BTM_BLE_SCAN_INVALID_STATE = 0,
375   BTM_BLE_SCAN_ENABLE_CALLED = 1,
376   BTM_BLE_SCAN_ENABLED_STATE = 2,
377   BTM_BLE_SCAN_DISABLE_CALLED = 3,
378   BTM_BLE_SCAN_DISABLED_STATE = 4
379 } tBTM_BLE_BATCH_SCAN_STATE;
380 
381 enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS };
382 typedef uint8_t tBTM_BLE_DISCARD_RULE;
383 
384 typedef struct {
385   tBTM_BLE_BATCH_SCAN_STATE cur_state;
386   tBTM_BLE_BATCH_SCAN_MODE scan_mode;
387   uint32_t scan_interval;
388   uint32_t scan_window;
389   tBLE_ADDR_TYPE addr_type;
390   tBTM_BLE_DISCARD_RULE discard_rule;
391   tBTM_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback;
392   tBTM_BLE_REF_VALUE ref_value;
393 } tBTM_BLE_BATCH_SCAN_CB;
394 
395 /* filter selection bit index  */
396 #define BTM_BLE_PF_ADDR_FILTER 0
397 #define BTM_BLE_PF_SRVC_DATA 1
398 #define BTM_BLE_PF_SRVC_UUID 2
399 #define BTM_BLE_PF_SRVC_SOL_UUID 3
400 #define BTM_BLE_PF_LOCAL_NAME 4
401 #define BTM_BLE_PF_MANU_DATA 5
402 #define BTM_BLE_PF_SRVC_DATA_PATTERN 6
403 /* when passed in payload filter type all, only clear action is applicable */
404 #define BTM_BLE_PF_TYPE_ALL 7
405 #define BTM_BLE_PF_TYPE_MAX 8
406 
407 /* max number of filter spot for different filter type */
408 #ifndef BTM_BLE_MAX_UUID_FILTER
409 #define BTM_BLE_MAX_UUID_FILTER 8
410 #endif
411 #ifndef BTM_BLE_MAX_ADDR_FILTER
412 #define BTM_BLE_MAX_ADDR_FILTER 8
413 #endif
414 #ifndef BTM_BLE_PF_STR_COND_MAX
415 #define BTM_BLE_PF_STR_COND_MAX 4 /* apply to manu data , or local name */
416 #endif
417 #ifndef BTM_BLE_PF_STR_LEN_MAX
418 #define BTM_BLE_PF_STR_LEN_MAX 29 /* match for first 29 bytes */
419 #endif
420 
421 typedef uint8_t tBTM_BLE_PF_COND_TYPE;
422 
423 #define BTM_BLE_PF_LOGIC_OR 0
424 #define BTM_BLE_PF_LOGIC_AND 1
425 typedef uint8_t tBTM_BLE_PF_LOGIC_TYPE;
426 
427 #define BTM_BLE_PF_ENABLE 1
428 #define BTM_BLE_PF_CONFIG 2
429 typedef uint8_t tBTM_BLE_PF_ACTION;
430 
431 typedef uint8_t tBTM_BLE_PF_FILT_INDEX;
432 
433 typedef uint8_t tBTM_BLE_PF_AVBL_SPACE;
434 
435 enum {
436   BTM_BLE_SCAN_COND_ADD,
437   BTM_BLE_SCAN_COND_DELETE,
438   BTM_BLE_SCAN_COND_CLEAR = 2
439 };
440 typedef uint8_t tBTM_BLE_SCAN_COND_OP;
441 
442 /* BLE adv payload filtering config complete callback */
443 using tBTM_BLE_PF_CFG_CBACK = base::Callback<void(
444     uint8_t /* avbl_space */, uint8_t /* action */, uint8_t /* status */)>;
445 
446 /* BLE adv payload filtering status setup complete callback */
447 using tBTM_BLE_PF_STATUS_CBACK =
448     base::Callback<void(uint8_t /*action*/, tBTM_STATUS /* status */)>;
449 
450 /* BLE adv payload filtering param setup complete callback */
451 using tBTM_BLE_PF_PARAM_CB = base::Callback<void(
452     uint8_t /* avbl_space */, uint8_t /* action */, uint8_t /* status */)>;
453 
454 /* per device filter + one generic filter indexed by 0 */
455 #define BTM_BLE_MAX_FILTER_COUNTER (BTM_BLE_MAX_ADDR_FILTER + 1)
456 
457 #ifndef BTM_CS_IRK_LIST_MAX
458 #define BTM_CS_IRK_LIST_MAX 0x20
459 #endif
460 
461 typedef struct {
462   bool in_use;
463   RawAddress bd_addr;
464   uint8_t pf_counter[BTM_BLE_PF_TYPE_MAX]; /* number of filter indexed by
465                                               tBTM_BLE_PF_COND_TYPE */
466 } tBTM_BLE_PF_COUNT;
467 
468 typedef struct {
469   bool enable;
470   uint8_t op_type;
471   tBTM_BLE_PF_COUNT* p_addr_filter_count; /* per BDA filter array */
472   tBLE_BD_ADDR cur_filter_target;
473 } tBTM_BLE_ADV_FILTER_CB;
474 
475 /* Sub codes */
476 #define BTM_BLE_META_PF_ENABLE 0x00
477 #define BTM_BLE_META_PF_FEAT_SEL 0x01
478 #define BTM_BLE_META_PF_ADDR 0x02
479 #define BTM_BLE_META_PF_UUID 0x03
480 #define BTM_BLE_META_PF_SOL_UUID 0x04
481 #define BTM_BLE_META_PF_LOCAL_NAME 0x05
482 #define BTM_BLE_META_PF_MANU_DATA 0x06
483 #define BTM_BLE_META_PF_SRVC_DATA 0x07
484 #define BTM_BLE_META_PF_ALL 0x08
485 
486 typedef uint8_t BTM_BLE_ADV_STATE;
487 typedef uint8_t BTM_BLE_ADV_INFO_PRESENT;
488 typedef uint8_t BTM_BLE_RSSI_VALUE;
489 typedef uint16_t BTM_BLE_ADV_INFO_TIMESTAMP;
490 
491 #define ADV_INFO_PRESENT 0x00
492 #define NO_ADV_INFO_PRESENT 0x01
493 
494 typedef btgatt_track_adv_info_t tBTM_BLE_TRACK_ADV_DATA;
495 
496 typedef void(tBTM_BLE_TRACK_ADV_CBACK)(
497     tBTM_BLE_TRACK_ADV_DATA* p_track_adv_data);
498 
499 typedef uint8_t tBTM_BLE_TRACK_ADV_EVT;
500 
501 typedef struct {
502   tBTM_BLE_REF_VALUE ref_value;
503   tBTM_BLE_TRACK_ADV_CBACK* p_track_cback;
504 } tBTM_BLE_ADV_TRACK_CB;
505 
506 enum { BTM_BLE_TRACK_ADV_ADD, BTM_BLE_TRACK_ADV_REMOVE };
507 
508 typedef uint8_t tBTM_BLE_TRACK_ADV_ACTION;
509 
510 typedef uint8_t tBTM_BLE_BATCH_SCAN_EVT;
511 
512 typedef uint32_t tBTM_BLE_TX_TIME_MS;
513 typedef uint32_t tBTM_BLE_RX_TIME_MS;
514 typedef uint32_t tBTM_BLE_IDLE_TIME_MS;
515 typedef uint32_t tBTM_BLE_ENERGY_USED;
516 
517 typedef void(tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time,
518                                          tBTM_BLE_RX_TIME_MS rx_time,
519                                          tBTM_BLE_IDLE_TIME_MS idle_time,
520                                          tBTM_BLE_ENERGY_USED energy_used,
521                                          tBTM_STATUS status);
522 
523 typedef struct {
524   tBTM_BLE_ENERGY_INFO_CBACK* p_ener_cback;
525 } tBTM_BLE_ENERGY_INFO_CB;
526 
527 typedef void(tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status);
528 
529 typedef void (*tBLE_SCAN_PARAM_SETUP_CBACK)(tGATT_IF client_if,
530                                             tBTM_STATUS status);
531 
532 #endif  // BTM_BLE_API_TYPES_H
533