1/******************************************************************************
2 *
3 *  Copyright (C) 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
27typedef 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
46typedef uint8_t tBTM_BLE_EVT;
47typedef uint8_t tBTM_BLE_CONN_MODE;
48
49typedef 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
54typedef 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
61typedef 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)
67typedef 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
81typedef 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
102typedef 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 0xffffffff
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#define BTM_BLE_DIR_CONN_FALLBACK_UNDIR 1
201#define BTM_BLE_DIR_CONN_FALLBACK_NO_ADV 2
202
203#ifndef BTM_BLE_DIR_CONN_FALLBACK
204#define BTM_BLE_DIR_CONN_FALLBACK BTM_BLE_DIR_CONN_FALLBACK_UNDIR
205#endif
206
207#define BTM_CMAC_TLEN_SIZE 8 /* 64 bits */
208#define BTM_BLE_AUTH_SIGN_LEN \
209  12 /* BLE data signature length 8 Bytes + 4 bytes counter*/
210typedef uint8_t BLE_SIGNATURE[BTM_BLE_AUTH_SIGN_LEN]; /* Device address */
211
212#ifndef BTM_BLE_HOST_SUPPORT
213#define BTM_BLE_HOST_SUPPORT 0x01
214#endif
215
216#ifndef BTM_BLE_SIMULTANEOUS_HOST
217#define BTM_BLE_SIMULTANEOUS_HOST 0x01
218#endif
219
220/* Appearance Values Reported with BTM_BLE_AD_TYPE_APPEARANCE */
221#define BTM_BLE_APPEARANCE_UKNOWN 0x0000
222#define BTM_BLE_APPEARANCE_GENERIC_PHONE 0x0040
223#define BTM_BLE_APPEARANCE_GENERIC_COMPUTER 0x0080
224#define BTM_BLE_APPEARANCE_GENERIC_WATCH 0x00C0
225#define BTM_BLE_APPEARANCE_SPORTS_WATCH 0x00C1
226#define BTM_BLE_APPEARANCE_GENERIC_CLOCK 0x0100
227#define BTM_BLE_APPEARANCE_GENERIC_DISPLAY 0x0140
228#define BTM_BLE_APPEARANCE_GENERIC_REMOTE 0x0180
229#define BTM_BLE_APPEARANCE_GENERIC_EYEGLASSES 0x01C0
230#define BTM_BLE_APPEARANCE_GENERIC_TAG 0x0200
231#define BTM_BLE_APPEARANCE_GENERIC_KEYRING 0x0240
232#define BTM_BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 0x0280
233#define BTM_BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 0x02C0
234#define BTM_BLE_APPEARANCE_GENERIC_THERMOMETER 0x0300
235#define BTM_BLE_APPEARANCE_THERMOMETER_EAR 0x0301
236#define BTM_BLE_APPEARANCE_GENERIC_HEART_RATE 0x0340
237#define BTM_BLE_APPEARANCE_HEART_RATE_BELT 0x0341
238#define BTM_BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 0x0380
239#define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_ARM 0x0381
240#define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 0x0382
241#define BTM_BLE_APPEARANCE_GENERIC_HID 0x03C0
242#define BTM_BLE_APPEARANCE_HID_KEYBOARD 0x03C1
243#define BTM_BLE_APPEARANCE_HID_MOUSE 0x03C2
244#define BTM_BLE_APPEARANCE_HID_JOYSTICK 0x03C3
245#define BTM_BLE_APPEARANCE_HID_GAMEPAD 0x03C4
246#define BTM_BLE_APPEARANCE_HID_DIGITIZER_TABLET 0x03C5
247#define BTM_BLE_APPEARANCE_HID_CARD_READER 0x03C6
248#define BTM_BLE_APPEARANCE_HID_DIGITAL_PEN 0x03C7
249#define BTM_BLE_APPEARANCE_HID_BARCODE_SCANNER 0x03C8
250#define BTM_BLE_APPEARANCE_GENERIC_GLUCOSE 0x0400
251#define BTM_BLE_APPEARANCE_GENERIC_WALKING 0x0440
252#define BTM_BLE_APPEARANCE_WALKING_IN_SHOE 0x0441
253#define BTM_BLE_APPEARANCE_WALKING_ON_SHOE 0x0442
254#define BTM_BLE_APPEARANCE_WALKING_ON_HIP 0x0443
255#define BTM_BLE_APPEARANCE_GENERIC_CYCLING 0x0480
256#define BTM_BLE_APPEARANCE_CYCLING_COMPUTER 0x0481
257#define BTM_BLE_APPEARANCE_CYCLING_SPEED 0x0482
258#define BTM_BLE_APPEARANCE_CYCLING_CADENCE 0x0483
259#define BTM_BLE_APPEARANCE_CYCLING_POWER 0x0484
260#define BTM_BLE_APPEARANCE_CYCLING_SPEED_CADENCE 0x0485
261#define BTM_BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 0x0C40
262#define BTM_BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 0x0C41
263#define BTM_BLE_APPEARANCE_PULSE_OXIMETER_WRIST 0x0C42
264#define BTM_BLE_APPEARANCE_GENERIC_WEIGHT 0x0C80
265#define BTM_BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS 0x1440
266#define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION 0x1441
267#define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV 0x1442
268#define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD 0x1443
269#define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV 0x1444
270
271/* Structure returned with Rand/Encrypt complete callback */
272typedef struct {
273  uint8_t status;
274  uint8_t param_len;
275  uint16_t opcode;
276  uint8_t param_buf[BT_OCTET16_LEN];
277} tBTM_RAND_ENC;
278
279/* General callback function for notifying an application that a synchronous
280 * BTM function is complete. The pointer contains the address of any returned
281 * data.
282*/
283typedef void(tBTM_RAND_ENC_CB)(tBTM_RAND_ENC* p1);
284
285#define BTM_BLE_FILTER_TARGET_SCANNER 0x01
286#define BTM_BLE_FILTER_TARGET_ADVR 0x00
287
288#define BTM_BLE_POLICY_BLACK_ALL 0x00  /* relevant to both */
289#define BTM_BLE_POLICY_ALLOW_SCAN 0x01 /* relevant to advertiser */
290#define BTM_BLE_POLICY_ALLOW_CONN 0x02 /* relevant to advertiser */
291#define BTM_BLE_POLICY_WHITE_ALL 0x03  /* relevant to both */
292
293/* ADV data flag bit definition used for BTM_BLE_AD_TYPE_FLAG */
294#define BTM_BLE_LIMIT_DISC_FLAG (0x01 << 0)
295#define BTM_BLE_GEN_DISC_FLAG (0x01 << 1)
296#define BTM_BLE_BREDR_NOT_SPT (0x01 << 2)
297/* 4.1 spec adv flag for simultaneous BR/EDR+LE connection support */
298#define BTM_BLE_DMT_CONTROLLER_SPT (0x01 << 3)
299#define BTM_BLE_DMT_HOST_SPT (0x01 << 4)
300#define BTM_BLE_NON_LIMIT_DISC_FLAG (0x00) /* lowest bit unset */
301#define BTM_BLE_ADV_FLAG_MASK \
302  (BTM_BLE_LIMIT_DISC_FLAG | BTM_BLE_BREDR_NOT_SPT | BTM_BLE_GEN_DISC_FLAG)
303#define BTM_BLE_LIMIT_DISC_MASK (BTM_BLE_LIMIT_DISC_FLAG)
304
305// TODO(jpawlowski): this should be removed with code that depend on it.
306#define BTM_BLE_AD_BIT_FLAGS (0x00000001 << 1)
307
308#define BTM_BLE_AD_TYPE_FLAG HCI_EIR_FLAGS_TYPE /* 0x01 */
309#define BTM_BLE_AD_TYPE_16SRV_CMPL          \
310  HCI_EIR_COMPLETE_16BITS_UUID_TYPE /* 0x03 \
311                                       */
312#define BTM_BLE_AD_TYPE_NAME_SHORT                                         \
313  HCI_EIR_SHORTENED_LOCAL_NAME_TYPE                                /* 0x08 \
314                                                                      */
315#define BTM_BLE_AD_TYPE_NAME_CMPL HCI_EIR_COMPLETE_LOCAL_NAME_TYPE /* 0x09 */
316
317#define BTM_BLE_AD_TYPE_APPEARANCE 0x19
318
319/*  Security settings used with L2CAP LE COC */
320#define BTM_SEC_LE_LINK_ENCRYPTED 0x01
321#define BTM_SEC_LE_LINK_PAIRED_WITHOUT_MITM 0x02
322#define BTM_SEC_LE_LINK_PAIRED_WITH_MITM 0x04
323
324/*  Min/max Preferred  number of payload octets that the local Controller
325    should include in a single Link Layer Data Channel PDU. */
326#define BTM_BLE_DATA_SIZE_MAX 0x00fb
327#define BTM_BLE_DATA_SIZE_MIN 0x001b
328
329/*  Preferred maximum number of microseconds that the local Controller
330    should use to transmit a single Link Layer Data Channel PDU. */
331#define BTM_BLE_DATA_TX_TIME_MIN 0x0148
332#define BTM_BLE_DATA_TX_TIME_MAX 0x0848
333
334/* adv tx power level */
335#define BTM_BLE_ADV_TX_POWER_MIN 0   /* minimum tx power */
336#define BTM_BLE_ADV_TX_POWER_LOW 1   /* low tx power     */
337#define BTM_BLE_ADV_TX_POWER_MID 2   /* middle tx power  */
338#define BTM_BLE_ADV_TX_POWER_UPPER 3 /* upper tx power   */
339#define BTM_BLE_ADV_TX_POWER_MAX 4   /* maximum tx power */
340typedef uint8_t tBTM_BLE_ADV_TX_POWER;
341
342/* adv tx power in dBm */
343typedef struct {
344  uint8_t adv_inst_max; /* max adv instance supported in controller */
345  uint8_t rpa_offloading;
346  uint16_t tot_scan_results_strg;
347  uint8_t max_irk_list_sz;
348  uint8_t filter_support;
349  uint8_t max_filter;
350  uint8_t energy_support;
351  bool values_read;
352  uint16_t version_supported;
353  uint16_t total_trackable_advertisers;
354  uint8_t extended_scan_support;
355  uint8_t debug_logging_supported;
356} tBTM_BLE_VSC_CB;
357
358typedef void(tBTM_BLE_ADV_DATA_CMPL_CBACK)(tBTM_STATUS status);
359
360#ifndef BTM_BLE_MULTI_ADV_MAX
361#define BTM_BLE_MULTI_ADV_MAX                           \
362  16 /* controller returned adv_inst_max should be less \
363        than this number */
364#endif
365
366typedef uint8_t tGATT_IF;
367
368typedef void(tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value);
369using tBTM_BLE_SCAN_REP_CBACK =
370    base::Callback<void(uint8_t /* status */, uint8_t /* report_format */,
371                        uint8_t /* num_reports */, std::vector<uint8_t>)>;
372
373#ifndef BTM_BLE_BATCH_SCAN_MAX
374#define BTM_BLE_BATCH_SCAN_MAX 5
375#endif
376
377#ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE
378#define BTM_BLE_BATCH_REP_MAIN_Q_SIZE 2
379#endif
380
381typedef enum {
382  BTM_BLE_SCAN_INVALID_STATE = 0,
383  BTM_BLE_SCAN_ENABLE_CALLED = 1,
384  BTM_BLE_SCAN_ENABLED_STATE = 2,
385  BTM_BLE_SCAN_DISABLE_CALLED = 3,
386  BTM_BLE_SCAN_DISABLED_STATE = 4
387} tBTM_BLE_BATCH_SCAN_STATE;
388
389enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS };
390typedef uint8_t tBTM_BLE_DISCARD_RULE;
391
392typedef struct {
393  tBTM_BLE_BATCH_SCAN_STATE cur_state;
394  tBTM_BLE_BATCH_SCAN_MODE scan_mode;
395  uint32_t scan_interval;
396  uint32_t scan_window;
397  tBLE_ADDR_TYPE addr_type;
398  tBTM_BLE_DISCARD_RULE discard_rule;
399  tBTM_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback;
400  tBTM_BLE_REF_VALUE ref_value;
401} tBTM_BLE_BATCH_SCAN_CB;
402
403/* filter selection bit index  */
404#define BTM_BLE_PF_ADDR_FILTER 0
405#define BTM_BLE_PF_SRVC_DATA 1
406#define BTM_BLE_PF_SRVC_UUID 2
407#define BTM_BLE_PF_SRVC_SOL_UUID 3
408#define BTM_BLE_PF_LOCAL_NAME 4
409#define BTM_BLE_PF_MANU_DATA 5
410#define BTM_BLE_PF_SRVC_DATA_PATTERN 6
411/* when passed in payload filter type all, only clear action is applicable */
412#define BTM_BLE_PF_TYPE_ALL 7
413#define BTM_BLE_PF_TYPE_MAX 8
414
415/* max number of filter spot for different filter type */
416#ifndef BTM_BLE_MAX_UUID_FILTER
417#define BTM_BLE_MAX_UUID_FILTER 8
418#endif
419#ifndef BTM_BLE_MAX_ADDR_FILTER
420#define BTM_BLE_MAX_ADDR_FILTER 8
421#endif
422#ifndef BTM_BLE_PF_STR_COND_MAX
423#define BTM_BLE_PF_STR_COND_MAX 4 /* apply to manu data , or local name */
424#endif
425#ifndef BTM_BLE_PF_STR_LEN_MAX
426#define BTM_BLE_PF_STR_LEN_MAX 29 /* match for first 29 bytes */
427#endif
428
429typedef uint8_t tBTM_BLE_PF_COND_TYPE;
430
431#define BTM_BLE_PF_LOGIC_OR 0
432#define BTM_BLE_PF_LOGIC_AND 1
433typedef uint8_t tBTM_BLE_PF_LOGIC_TYPE;
434
435#define BTM_BLE_PF_ENABLE 1
436#define BTM_BLE_PF_CONFIG 2
437typedef uint8_t tBTM_BLE_PF_ACTION;
438
439typedef uint8_t tBTM_BLE_PF_FILT_INDEX;
440
441typedef uint8_t tBTM_BLE_PF_AVBL_SPACE;
442
443enum {
444  BTM_BLE_SCAN_COND_ADD,
445  BTM_BLE_SCAN_COND_DELETE,
446  BTM_BLE_SCAN_COND_CLEAR = 2
447};
448typedef uint8_t tBTM_BLE_SCAN_COND_OP;
449
450/* BLE adv payload filtering config complete callback */
451using tBTM_BLE_PF_CFG_CBACK = base::Callback<void(
452    uint8_t /* avbl_space */, uint8_t /* action */, uint8_t /* status */)>;
453
454/* BLE adv payload filtering status setup complete callback */
455using tBTM_BLE_PF_STATUS_CBACK =
456    base::Callback<void(uint8_t /*action*/, tBTM_STATUS /* status */)>;
457
458/* BLE adv payload filtering param setup complete callback */
459using tBTM_BLE_PF_PARAM_CB = base::Callback<void(
460    uint8_t /* avbl_space */, uint8_t /* action */, uint8_t /* status */)>;
461
462typedef union {
463  uint16_t uuid16_mask;
464  uint32_t uuid32_mask;
465  uint8_t uuid128_mask[LEN_UUID_128];
466} tBTM_BLE_PF_COND_MASK;
467
468/* per device filter + one generic filter indexed by 0 */
469#define BTM_BLE_MAX_FILTER_COUNTER (BTM_BLE_MAX_ADDR_FILTER + 1)
470
471#ifndef BTM_CS_IRK_LIST_MAX
472#define BTM_CS_IRK_LIST_MAX 0x20
473#endif
474
475typedef struct {
476  bool in_use;
477  RawAddress bd_addr;
478  uint8_t pf_counter[BTM_BLE_PF_TYPE_MAX]; /* number of filter indexed by
479                                              tBTM_BLE_PF_COND_TYPE */
480} tBTM_BLE_PF_COUNT;
481
482typedef struct {
483  bool enable;
484  uint8_t op_type;
485  tBTM_BLE_PF_COUNT* p_addr_filter_count; /* per BDA filter array */
486  tBLE_BD_ADDR cur_filter_target;
487} tBTM_BLE_ADV_FILTER_CB;
488
489/* Sub codes */
490#define BTM_BLE_META_PF_ENABLE 0x00
491#define BTM_BLE_META_PF_FEAT_SEL 0x01
492#define BTM_BLE_META_PF_ADDR 0x02
493#define BTM_BLE_META_PF_UUID 0x03
494#define BTM_BLE_META_PF_SOL_UUID 0x04
495#define BTM_BLE_META_PF_LOCAL_NAME 0x05
496#define BTM_BLE_META_PF_MANU_DATA 0x06
497#define BTM_BLE_META_PF_SRVC_DATA 0x07
498#define BTM_BLE_META_PF_ALL 0x08
499
500typedef uint8_t BTM_BLE_ADV_STATE;
501typedef uint8_t BTM_BLE_ADV_INFO_PRESENT;
502typedef uint8_t BTM_BLE_RSSI_VALUE;
503typedef uint16_t BTM_BLE_ADV_INFO_TIMESTAMP;
504
505enum { BTM_BLE_CONN_NONE, BTM_BLE_CONN_AUTO };
506typedef uint8_t tBTM_BLE_CONN_TYPE;
507
508#define ADV_INFO_PRESENT 0x00
509#define NO_ADV_INFO_PRESENT 0x01
510
511typedef btgatt_track_adv_info_t tBTM_BLE_TRACK_ADV_DATA;
512
513typedef void(tBTM_BLE_TRACK_ADV_CBACK)(
514    tBTM_BLE_TRACK_ADV_DATA* p_track_adv_data);
515
516typedef uint8_t tBTM_BLE_TRACK_ADV_EVT;
517
518typedef struct {
519  tBTM_BLE_REF_VALUE ref_value;
520  tBTM_BLE_TRACK_ADV_CBACK* p_track_cback;
521} tBTM_BLE_ADV_TRACK_CB;
522
523enum { BTM_BLE_TRACK_ADV_ADD, BTM_BLE_TRACK_ADV_REMOVE };
524
525typedef uint8_t tBTM_BLE_TRACK_ADV_ACTION;
526
527typedef uint8_t tBTM_BLE_BATCH_SCAN_EVT;
528
529typedef uint32_t tBTM_BLE_TX_TIME_MS;
530typedef uint32_t tBTM_BLE_RX_TIME_MS;
531typedef uint32_t tBTM_BLE_IDLE_TIME_MS;
532typedef uint32_t tBTM_BLE_ENERGY_USED;
533
534typedef void(tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time,
535                                         tBTM_BLE_RX_TIME_MS rx_time,
536                                         tBTM_BLE_IDLE_TIME_MS idle_time,
537                                         tBTM_BLE_ENERGY_USED energy_used,
538                                         tBTM_STATUS status);
539
540typedef struct {
541  tBTM_BLE_ENERGY_INFO_CBACK* p_ener_cback;
542} tBTM_BLE_ENERGY_INFO_CB;
543
544typedef void(tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status);
545
546typedef void (*tBLE_SCAN_PARAM_SETUP_CBACK)(tGATT_IF client_if,
547                                            tBTM_STATUS status);
548
549#endif  // BTM_BLE_API_TYPES_H
550