1  /*
2   * Copyright (C) 2021-2022 Huawei Device Co., Ltd.
3   * Licensed under the Apache License, Version 2.0 (the "License");
4   * you may not use this file except in compliance with the License.
5   * You may obtain a copy of the License at
6   *
7   *     http://www.apache.org/licenses/LICENSE-2.0
8   *
9   * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  #ifndef BLE_DEFS_H
17  #define BLE_DEFS_H
18  
19  #include <string>
20  
21  #include "bt_def.h"
22  #include "bt_uuid.h"
23  #include "gap_le_if.h"
24  
25  /*
26   * @brief The bluetooth system.
27   */
28  namespace OHOS {
29  namespace bluetooth {
30  /// const
31  constexpr uint8_t BLE_IRK_HEX_ELN = 0x10;
32  constexpr uint8_t BLE_IRK_RAND_HEX_LEN = 0x03;
33  constexpr uint8_t BLE_IRK_RAND_ELN = 0x1F;
34  constexpr uint8_t BLE_IRK_RAND_LEFT_SHIFT = 0x04;
35  constexpr uint8_t SHORTENED_LOCAL_NAME = 0X08;
36  constexpr uint8_t COMPLETE_LOCAL_NAME = 0X09;
37  constexpr uint8_t MANUFACTURER_SPECIFIC_DATA = 0XFF;
38  constexpr uint8_t TX_POWER_LEVEL = 0x0A;
39  constexpr uint8_t SERVICE_DATA_16_BIT_UUID = 0X16;
40  constexpr uint8_t SERVICE_DATA_32_BIT_UUID = 0X20;
41  constexpr uint8_t SERVICE_DATA_128_BIT_UUID = 0X21;
42  constexpr uint8_t BLE_DIV_RESULT_TWO = 0x02;
43  
44  /// Maximum advertising data length that can fit in a legacy PDU.
45  constexpr uint8_t BLE_LEGACY_ADV_DATA_LEN_MAX = 0x1F;
46  constexpr uint8_t BLE_LEGACY_SCAN_RSP_DATA_LEN_MAX = 0x1F;
47  constexpr uint8_t BLE_EX_ADV_PAYLOAD_DATA_LEN = 0XBF;
48  
49  /// Batch scan params
50  constexpr uint16_t BLE_SCAN_MODE_BATCH_LOW_POWER_WINDOW_MS = 500;
51  constexpr uint16_t BLE_SCAN_MODE_BATCH_LOW_POWER_INTERVAL_MS = 45000;
52  constexpr uint16_t BLE_SCAN_MODE_BATCH_BALANCED_WINDOW_MS = 1000;
53  constexpr uint16_t BLE_SCAN_MODE_BATCH_BALANCED_INTERVAL_MS = 45000;
54  constexpr uint16_t BLE_SCAN_MODE_BATCH_LOW_LATENCY_WINDOW_MS = 1500;
55  constexpr uint16_t BLE_SCAN_MODE_BATCH_LOW_LATENCY_INTERVAL_MS = 45000;
56  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P2_60_3000_WINDOW_MS = 60;
57  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P2_60_3000_INTERVAL_MS = 3000;
58  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P10_60_600_WINDOW_MS = 60;
59  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P10_60_600_INTERVAL_MS = 600;
60  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P25_60_240_WINDOW_MS = 60;
61  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P25_60_240_INTERVAL_MS = 240;
62  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P100_1000_1000_WINDOW_MS = 1000;
63  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P100_1000_1000_INTERVAL_MS = 1000;
64  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P50_100_200_WINDOW_MS = 100;
65  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P50_100_200_INTERVAL_MS = 200;
66  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P10_30_300_WINDOW_MS = 30;
67  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P10_30_300_INTERVAL_MS = 300;
68  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P2_30_1500_WINDOW_MS = 30;
69  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P2_30_1500_INTERVAL_MS = 1500;
70  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P75_30_40_WINDOW_MS = 30;
71  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P75_30_40_INTERVAL_MS = 40;
72  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P50_30_60_WINDOW_MS = 30;
73  constexpr uint16_t BLE_SCAN_MODE_BATCH_OP_P50_30_60_INTERVAL_MS = 60;
74  
75  /// Invalid MAC Address
76  const std::string BLE_INVALID_MAC_ADDRESS = "00:00:00:00:00:00";
77  const std::string BLE_DEFAULT_DEVICE_NAME = "BluetoothDevice";
78  constexpr uint8_t BLE_DEFAULT_IO = 0x01;
79  const std::string BLE_DEFAULT_LOCAL_PASSKEY = "0x12346";
80  constexpr uint8_t BLE_DEFAULT_ROLES = 0x0F;
81  constexpr uint8_t BLE_DEFAULT_MODEL1_LEVEL = 0x00;
82  constexpr uint8_t BLE_DEFAULT_MODEL2_LEVEL = 0x00;
83  constexpr bool BLE_DEFAULT_SECURITY = false;
84  constexpr uint8_t BLE_DEFAULT_SCAN_MODE = 0x03;
85  
86  constexpr uint8_t BLE_NON_RES_PRI_ADDR = 0x3F;
87  constexpr uint8_t BLE_STATIC_PRI_ADDR = 0xC0;
88  
89  constexpr int BLE_THREAD_WAIT_TIMEOUT = 5;
90  
91  constexpr int BLE_CHANGE_RPA_ADDRESS_INTERVAL = 15 * 60 * 1000;
92  constexpr uint16_t GATT_UUID_GAP_DEVICE_NAME = 0x2A00;
93  
94  const Uuid::UUID128Bit DEFAULT_UUID_MASK = {
95      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
96      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
97  };
98  
99  /// Filter status
100  typedef enum {
101      BLE_SCAN_FILTER_STATUS_IDLE = 0,
102      BLE_SCAN_FILTER_STATUS_WORKING,
103      BLE_SCAN_FILTER_STATUS_BAD,
104  } FILTER_STATUS;
105  
106  /// Advertising status
107  typedef enum {
108      ADVERTISE_NOT_STARTED = -1,
109      ADVERTISE_SUCCESS = 0,
110      ADVERTISE_FAILED_DATA_TOO_LARGE,
111      ADVERTISE_FAILED_TOO_MANY_ADVERTISERS,
112      ADVERTISE_FAILED_ALREADY_STARTED,
113      ADVERTISE_FAILED_INTERNAL_ERROR,
114      ADVERTISE_FAILED_FEATURE_UNSUPPORTED
115  } ADVERTISE_STATUS;
116  
117  /// Local config
118  typedef enum {
119      BLE_CONFIG_LOCAL_NAME = 0x00,
120      BLE_CONFIG_LOCAL_ADDRESS = 0x01,
121      BLE_CONFIG_ADAPTER_BONDED_MODE = 0x02,
122  } BLE_CONFIG;
123  
124  /// ble bondable mode
125  typedef enum { BLE_BONDABLE_MODE_NONE = 0x00, BLE_BONDABLE_MODE_ON = 0x01 } BLE_BONDABLE_MODE;
126  
127  /// Scan callback type
128  typedef enum { CALLBACK_TYPE_ALL_MATCHES = 0x00, CALLBACK_TYPE_FIRST_MATCH = 0x01 } CALLBACK_TYPE;
129  
130  /// stop all adv type
131  typedef enum {
132      STOP_ADV_TYPE_SINGLE = 0x00,
133      STOP_ADV_TYPE_ALL = 0x01,
134      STOP_ADV_TYPE_RESOLVING_LIST = 0x02
135  } STOP_ALL_ADV_TYPE;
136  
137  typedef enum { STOP_SCAN_TYPE_NOR = 0x00, STOP_SCAN_TYPE_RESOLVING_LIST = 0x01 } STOP_SCAN_TYPE;
138  
139  /// Scan status
140  typedef enum {
141      SCAN_NOT_STARTED = -1,
142      SCAN_SUCCESS = 0,
143      SCAN_FAILED_ALREADY_STARTED,
144      SCAN_FAILED_APPLICATION_REGISTRATION_FAILED,
145      SCAN_FAILED_INTERNAL_ERROR,
146      SCAN_FAILED_FEATURE_UNSUPPORTED,
147      SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES
148  } SCAN_STATUS;
149  
150  typedef enum {
151      BLE_APPEARANCE_UNKNOWN = 0x0000,
152      BLE_APPEARANCE_GENERIC_PHONE = 0x0040,
153      BLE_APPEARANCE_GENERIC_COMPUTER = 0x0080,
154      BLE_APPEARANCE_GENERIC_WATCH = 0x00C0,
155      BLE_APPEARANCE_SPORTS_WATCH = 0x00C1,
156      BLE_APPEARANCE_GENERIC_CLOCK = 0x0100,
157      BLE_APPEARANCE_GENERIC_DISPLAY = 0x0140,
158      BLE_APPEARANCE_GENERIC_REMOTE = 0x0180,
159      BLE_APPEARANCE_GENERIC_EYEGLASSES = 0x01C0,
160      BLE_APPEARANCE_GENERIC_TAG = 0x0200,
161      BLE_APPEARANCE_GENERIC_KEYRING = 0x0240,
162      BLE_APPEARANCE_GENERIC_MEDIA_PLAYER = 0x0280,
163      BLE_APPEARANCE_GENERIC_BARCODE_SCANNER = 0x02C0,
164      BLE_APPEARANCE_GENERIC_THERMOMETER = 0x0300,
165      BLE_APPEARANCE_THERMOMETER_EAR = 0x0301,
166      BLE_APPEARANCE_GENERIC_HEART_RATE = 0x0340,
167      BLE_APPEARANCE_HEART_RATE_BELT = 0x0341,
168      BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE = 0x0380,
169      BLE_APPEARANCE_BLOOD_PRESSURE_ARM = 0x0381,
170      BLE_APPEARANCE_BLOOD_PRESSURE_WRIST = 0x0382,
171      BLE_APPEARANCE_GENERIC_HID = 0x03C0,
172      BLE_APPEARANCE_HID_KEYBOARD = 0x03C1,
173      BLE_APPEARANCE_HID_MOUSE = 0x03C2,
174      BLE_APPEARANCE_HID_JOYSTICK = 0x03C3,
175      BLE_APPEARANCE_HID_GAMEPAD = 0x03C4,
176      BLE_APPEARANCE_HID_DIGITIZER_TABLET = 0x03C5,
177      BLE_APPEARANCE_HID_CARD_READER = 0x03C6,
178      BLE_APPEARANCE_HID_DIGITAL_PEN = 0x03C7,
179      BLE_APPEARANCE_HID_BARCODE_SCANNER = 0x03C8,
180      BLE_APPEARANCE_GENERIC_GLUCOSE = 0x0400,
181      BLE_APPEARANCE_GENERIC_WALKING = 0x0440,
182      BLE_APPEARANCE_WALKING_IN_SHOE = 0x0441,
183      BLE_APPEARANCE_WALKING_ON_SHOE = 0x0442,
184      BLE_APPEARANCE_WALKING_ON_HIP = 0x0443,
185      BLE_APPEARANCE_GENERIC_CYCLING = 0x0480,
186      BLE_APPEARANCE_CYCLING_COMPUTER = 0x0481,
187      BLE_APPEARANCE_CYCLING_SPEED = 0x0482,
188      BLE_APPEARANCE_CYCLING_CADENCE = 0x0483,
189      BLE_APPEARANCE_CYCLING_POWER = 0x0484,
190      BLE_APPEARANCE_CYCLING_SPEED_CADENCE = 0x0485,
191      BLE_APPEARANCE_GENERIC_PULSE_OXIMETER = 0x0C40,
192      BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP = 0x0C41,
193      BLE_APPEARANCE_PULSE_OXIMETER_WRIST = 0x0C42,
194      BLE_APPEARANCE_GENERIC_WEIGHT = 0x0C80,
195      BLE_APPEARANCE_GENERIC_PERSONAL_MOBILITY_DEVICE = 0x0CC0,
196      BLE_APPEARANCE_POWERED_WHEELCHAIR = 0x0CC1,
197      BLE_APPEARANCE_MOBILITY_SCOOTER = 0x0CC2,
198      BLE_APPEARANCE_GENERIC_CONTINUOUS_GLUCOSE_MONITOR = 0x0D00,
199      BLE_APPEARANCE_GENERIC_INSULIN_PUMP = 0x0D40,
200      BLE_APPEARANCE_INSULIN_PUMP_DURABLE_PUMP = 0x0D41,
201      BLE_APPEARANCE_INSULIN_PUMP_PATCH_PUMP = 0x0D44,
202      BLE_APPEARANCE_INSULIN_PEN = 0x0D48,
203      BLE_APPEARANCE_GENERIC_MEDICATION_DELIVERY = 0x0D80,
204      BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS = 0x1440,
205      BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION = 0x1441,
206      BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV = 0x1442,
207      BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD = 0x1443,
208      BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV = 0x1444
209  } BLE_APPEARANCE;
210  
211  /// GAP BLE callback event type
212  typedef enum {
213      BLE_GAP_ADV_DATA_SET_COMPLETE_EVT = 0,       /// advertising data set complete
214      BLE_GAP_ADV_SCAN_RSP_DATA_SET_COMPLETE_EVT,  /// scan response data set complete
215      BLE_GAP_ADV_PARAM_SET_COMPLETE_EVT,          /// advertising parameter set complete
216      BLE_GAP_ADV_READ_TXPOWER_EVT,                /// advertising read tx power
217      BLE_GAP_ADV_START_COMPLETE_EVT,              /// start advertising complete
218      BLE_GAP_ADV_STOP_COMPLETE_EVT,               /// stop adv complete
219      BLE_GAP_ADV_DATA_RAW_SET_COMPLETE_EVT,       /// raw advertising data set complete
220  
221      BLE_GAP_EX_ADV_SET_RAND_ADDR_RESULT_EVT,           /// extend advertising data set complete
222      BLE_GAP_EX_ADV_PARAM_SET_COMPLETE_EVT,             /// extend advertising parameter set complete
223      BLE_GAP_EX_ADV_DATA_SET_COMPLETE_EVT,              /// extend advertising data set complete
224      BLE_GAP_EX_ADV_SCAN_RSP_DATA_SET_COMPLETE_EVT,     /// extend scan response data set complete
225      BLE_GAP_EX_ADV_START_COMPLETE_EVT,                 /// start extend advertising complete
226      BLE_GAP_EX_ADV_STOP_COMPLETE_EVT,                  /// stop extend advertising complete
227      BLE_GAP_EX_ALL_ADV_STOP_COMPLETE_EVT,              /// stop all extend advertising complete
228      BLE_GAP_EX_RESOLVING_LIST_ADV_STOP_COMPLETE_EVT,   /// stop all resolving list extend advertising complete
229      BLE_GAP_EX_RESOLVING_LIST_ADV_START_COMPLETE_EVT,  /// start all resolving list extend advertising complete
230      BLE_GAP_EX_ADV_REMOVE_HANDLE_RESULT_EVT,           /// extend advertising remove handle complete
231      BLE_GAP_EX_ADV_CLEAR_HANDLE_RESULT_EVT,            /// extend advertising clear handle complete
232      BLE_GAP_EX_ADV_SCAN_REQUEST_RECEIVED_EVT,          /// extend advertising scan request received complete
233      BLE_GAP_EX_ADC_TERMINATED_ADV_SET_EVT,             /// extend advertising terminated adv set event
234  
235      BLE_GAP_SCAN_PARAM_SET_COMPLETE_EVT,                 /// scan parameters set complete
236      BLE_GAP_SCAN_RESULT_EVT,                             /// one scan result ready each time
237      BLE_GAP_SCAN_DELAY_REPORT_RESULT_EVT,                /// one scan result ready each time
238      BLE_GAP_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT,          /// raw scan response data set complete
239      BLE_GAP_SCAN_START_COMPLETE_EVT,                     /// start scan complete
240      BLE_GAP_SCAN_STOP_COMPLETE_EVT,                      /// stop scan complete
241      BLE_GAP_RESOLVING_LIST_ADV_SCAN_STOP_COMPLETE_EVT,   /// stop all resolvint list scan complete
242      BLE_GAP_RESOLVING_LIST_ADV_SCAN_START_COMPLETE_EVT,  /// start all resolvint list scan complete
243  
244      BLE_GAP_EX_SCAN_PARAM_SET_COMPLETE_EVT,                 /// scan parameters set complete
245      BLE_GAP_EX_SCAN_RESULT_EVT,                             /// one scan result ready each time
246      BLE_GAP_EX_SCAN_DELAY_REPORT_RESULT_EVT,                /// one scan result ready each time
247      BLE_GAP_EX_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT,          /// raw scan response data set complete
248      BLE_GAP_EX_SCAN_START_COMPLETE_EVT,                     /// start scan complete
249      BLE_GAP_EX_SCAN_STOP_COMPLETE_EVT,                      /// stop scan complete
250      BLE_GAP_EX_RESOLVING_LIST_ADV_SCAN_STOP_COMPLETE_EVT,   /// stop all resolvint list scan complete
251      BLE_GAP_EX_RESOLVING_LIST_ADV_SCAN_START_COMPLETE_EVT,  /// start all resolvint list scan complete
252  
253      BLE_GATT_DEVICE_INFO_REGISTER_STSTUS,  /// device information
254      BLE_GATT_GAP_SERVICE_REGISTER_STSTUS,  /// gap service
255  
256      BLE_GAP_ENCRYPTION_COMPLETE_EVT,
257      BLE_GAP_LE_LOCAL_ENCRYPTION_KEY_REQ_EVT,
258      BLE_GAP_LE_REMOTE_ENCRYPTION_KEY_REQ_EVT,
259      BLE_GAP_LE_SIGN_COUNTER_CHANGE_NOTIF_EVT,
260      BLE_GAP_LE_REQ_SIGNING_ALGORITHM_INFO_EVT,
261      BLE_GAP_LE_PAIR_FEATURE_REQ_EVT,
262      BLE_GAP_LE_PAIR_FEATURE_IND_EVT,
263      BLE_GAP_LE_PAIR_METHOD_NOTI_EVT,
264      BLE_GAP_LE_PAIR_KEY_PRESS_NOTI_EVT,
265      BLE_GAP_LE_PAIR_PASSKEY_REQ_EVT,
266      BLE_GAP_LE_PAIR_PASSKEY_NOTI_EVT,
267      BLE_GAP_LE_PAIR_OOB_REQ_EVT,
268      BLE_GAP_LE_PAIR_SC_OOB_REQ_EVT,
269      BLE_GAP_LE_PAIR_SC_USER_CONFIRM_REQ_EVT,
270      BLE_GAP_LE_PAIR_COMELETE_EVT,
271      BLE_GAP_LE_PAIR_KEY_NOTI_EVT,
272      BLE_GAP_LE_REQUEST_SECURITY_RESULT,
273  } BLE_GAP_CB_EVENT;
274  
275  typedef union {
276      struct EncryptionComplete {
277          uint8_t status;
278          BtAddr peerAddr;
279      } encryptionComplete_;
280  
281      struct LeLocalEncryptionKeyReqEvent {
282          BtAddr addr;
283          uint64_t rand;
284          uint16_t ediv;
285      } leLocalEncryptionKeyReqEvent_;
286  
287      struct LeRemoteEncryptionKeyReqEvent {
288          BtAddr addr;
289      } leRemoteEncryptionKeyReqEvent_;
290  
291      struct LeSignCounterChangeNotification {
292          BtAddr addr;
293          GAP_SignCounterType type;
294          uint32_t counter;
295      } leSignCounterChangeNotification_;
296  
297      struct GapRequestSigningAlgorithmInfo {
298          BtAddr addr;
299      } gapRequestSigningAlgorithmInfo_;
300  
301      struct LePairFeatureReq {
302          BtAddr peerAddr;
303          bool localPair;
304      } lePairFeatureReq_;
305  
306      struct LePairFeatureInd {
307          BtAddr addr;
308          GapLePairFeature remoteFrature;
309      } lePairFeatureInd_;
310  
311      struct LePairMethodNotify {
312          BtAddr addr;
313          uint8_t pairMethod;
314      } lePairMethodNotify_;
315  
316      struct LePairKeyPressNotification {
317          BtAddr addr;
318          uint8_t pressType;
319      } lePairKeyPressNotification_;
320  
321      struct LePairPassKeyReq {
322          BtAddr addr;
323      } lePairPassKeyReq_;
324  
325      struct LePairPassKeyNotification {
326          BtAddr addr;
327          uint32_t number;
328      } lePairPassKeyNotification_;
329  
330      struct LePairOobReq {
331          BtAddr addr;
332      } lePairOobReq_;
333  
334      struct LePairScOobReq {
335          BtAddr addr;
336      } lePairScOob_req_;
337  
338      struct LePairScUserConfirmReq {
339          BtAddr addr;
340          uint32_t number;
341      } lePairScUserConfirmReq_;
342  
343      struct LePairComplete {
344          BtAddr addr;
345          uint8_t result;
346          uint8_t keyType;
347      } lePairComplete_;
348  
349      struct LePairKeyNotify {
350          BtAddr addr;
351          LeEncKey remoteEncKey;
352          bool hasRemoteEncKey;
353          LeIdKey remoteIdKey;
354          bool hasRemoteIdKey;
355          LeSignKey remoteSignKey;
356          bool hasRemoteSignKey;
357          LeEncKey localEncKey;
358          bool hasLocalEncKey;
359          LeSignKey localSignKey;
360          bool hasLocalSignKey;
361      } lePairKeyNotify_;
362  
363      struct LeRequestSecurityResult {
364          BtAddr addr;
365          uint8_t result;
366          GAP_LeSecurityStatus status;
367      } leRequestSecurityResult_;
368  } BleGapCallbackParam;
369  
370  /// Features supported by the controller.
371  /// BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B - 4.6
372  typedef enum {
373      LE_ENCRYPTION = 0,
374      CONNECTION_PARAMETERS_REQUEST_PROCEDURE,
375      EXTENDED_REJECT_INDICATION,
376      SLAVE_INITIATED_FEATURES_EXCHANGE,
377      LE_PING,
378      LE_DATA_PACKET_LENGTH_EXTENSION,
379      LL_PRIVACY,
380      EXTENDED_SCANNER_FILTER_POLICIES,
381      LE_2M_PHY,
382      STABLE_MODULATION_INDEX_TRANSMITTER,
383      STABLE_MODULATION_INDEX_RECEIVER,
384      LE_CODED_PHY,
385      LE_EXTENDED_ADVERTISING,
386      LE_PERIODIC_ADVERTISING,
387      CHANNEL_SELECTION_ALGORITHM_2,
388      LE_POWER_CLASS
389  } FEATURE_SUPPORTED;
390  
391  /// Ble scan type
392  typedef enum {
393      BLE_SCAN_TYPE_PASSIVE = 0x00,  /// Passive scan
394      BLE_SCAN_TYPE_ACTIVE = 0x01,   /// Active scan
395  } BLE_SCAN_TYPE;
396  
397  /// Ble scan mode
398  typedef enum {
399      BLE_SCAN_MODE_NON_DISC = 0x00,  /// Non Discoverable
400      BLE_SCAN_MODE_GENERAL = 0x01,   /// General
401      BLE_SCAN_MODE_LIMITED = 0x02,   /// Limited
402      BLE_SCAN_MODE_ALL = 0x03,       /// ALL
403  } BLE_SCAN_MODE;
404  
405  /// Ble scan filter type
406  typedef enum {
407      BLE_SCAN_FILTER_ALLOW_ALL = 0x00,  /// Accept all :
408      /// 1. advertisement packets except directed advertising packets not addressed to this device (default).
409      BLE_SCAN_FILTER_ALLOW_ONLY_WLST = 0x01,  /// Accept only :
410      /// 1. advertisement packets from devices where the advertiser’s address is in the WH list.
411      /// 2. Directed advertising packets which are not addressed for this device shall be ignored.
412      BLE_SCAN_FILTER_ALLOW_UND_RPA_DIR = 0x02,  /// Accept all :
413      /// 1. undirected advertisement packets, and
414      /// 2. directed advertising packets where the initiator address is a resolvable private address, and
415      /// 3. directed advertising packets addressed to this device.
416      BLE_SCAN_FILTER_ALLOW_WLIST_PRA_DIR = 0x03,  /// Accept all :
417      /// 1. advertisement packets from devices where the advertiser’s address is in the WH list, and
418      /// 2. directed advertising packets where the initiator address is a resolvable private address, and
419      /// 3. directed advertising packets addressed to this device.
420  } BLE_SCAN_FILTER;
421  
422  /// Ble scan duplicate type
423  typedef enum {
424      BLE_SCAN_DUPLICATE_DISABLE =
425          0x00,  /// the Link Layer should generate advertising reports to the host for each packet received
426      BLE_SCAN_DUPLICATE_ENABLE = 0x01,  /// the Link Layer should filter out duplicate advertising reports to the Host
427      BLE_SCAN_DUPLICATE_MAX = 0x02,     /// 0x02 – 0xFF, Reserved for future use
428  } BLE_SCAN_DUPLICATE;
429  
430  /// Ble scan parameters
431  typedef struct {
432      BLE_SCAN_TYPE scanType;            /// Scan type
433      BLE_ADDR_TYPE ownAddrType;         /// Owner address type
434      BLE_SCAN_FILTER scanFilterPolicy;  /// Scan filter policy
435      uint16_t scanInterval;             /// Scan interval. This is defined as the time interval from
436      /// when the Controller started its last LE scan until it begins the subsequent LE scan.
437      /// Range: 0x0004 to 0x4000 Default: 0x0010 (10 ms)
438      /// Time = N * 0.625 msec
439      /// Time Range: 2.5 msec to 10.24 seconds
440      uint16_t scanWindow;  /// Scan window. The duration of the LE scan. LE_Scan_Window
441      /// shall be less than or equal to LE_Scan_Interval
442      /// Range: 0x0004 to 0x4000 Default: 0x0010 (10 ms)
443      /// Time = N * 0.625 msec
444      /// Time Range: 2.5 msec to 10240 msec
445      BLE_SCAN_DUPLICATE scanDuplicate;  /// The Scan_Duplicates parameter controls whether the Link Layer should filter
446      /// out duplicate advertising reports (BLE_SCAN_DUPLICATE_ENABLE) to the Host,
447      /// or if the Link Layer should generate advertising reports for each packet received
448  } BleScanParams;
449  
450  typedef enum {
451      ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY = 0x00,  /// Allow both scan and connection requests from anyone
452      ADV_FILTER_ALLOW_SCAN_WLST_CON_ANY,   /// Allow both scan req from WH List devices and connection req fro anyone
453      ADV_FILTER_ALLOW_SCAN_ANY_CON_WLST,   /// Allow both scan req from anyone and connection req from WH List devices
454      ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST,  /// Allow scan and connection requests from WH List devices
455  } BLE_ADV_FILTER;
456  
457  /// Advertising channel mask
458  typedef enum {
459      ADV_CHNL_37 = 0x01,
460      ADV_CHNL_38 = 0x02,
461      ADV_CHNL_39 = 0x04,
462      ADV_CHNL_ALL = 0x07,
463  } BLE_ADV_CHANNEL;
464  
465  /// Advertising mode
466  typedef enum {
467      ADV_TYPE_IND = 0x00,
468      ADV_TYPE_DIRECT_IND_HIGH = 0x01,
469      ADV_TYPE_SCAN_IND = 0x02,
470      ADV_TYPE_NONCONN_IND = 0x03,
471      ADV_TYPE_DIRECT_IND_LOW = 0x04,
472  } BLE_ADV_TYPE;
473  
474  /// Scan Event Type
475  typedef enum {
476      SCAN_ADV_IND = 0x00,
477      SCAN_ADV_DIRECT_IND = 0x01,
478      SCAN_ADV_SCAN_IND = 0x02,
479      SCAN_ADV_NONCONN_IND = 0x03,
480      SCAN_SCAN_RSP = 0x04,
481  } BLE_SCAN_EVENT_TYPE;
482  
483  /// Advertising parameters
484  typedef struct {
485      uint16_t advMinInterval;  /// Minimum advertising interval for
486      /// undirected and low duty cycle directed advertising.
487      /// Range: 0x0020 to 0x4000 Default: N = 0x0800 (1.28 second)
488      /// ime = N * 0.625 msec Time Range: 20 ms to 10.24 sec
489      uint16_t advMaxInterval;  /// Maximum advertising interval for
490      /// undirected and low duty cycle directed advertising.
491      /// Range: 0x0020 to 0x4000 Default: N = 0x0800 (1.28 second)
492      /// Time = N * 0.625 msec Time Range: 20 ms to 10.24 sec Advertising max interval
493      BLE_ADV_TYPE advType;            /// Advertising type
494      BLE_ADDR_TYPE ownAddrType;       /// Owner bluetooth device address type
495      BtAddr peerAddr;                 /// Peer device bluetooth device address
496      BLE_ADDR_TYPE peerAddrType;      /// Peer device bluetooth device address type
497      BLE_ADV_CHANNEL channelMap;      /// Advertising channel map
498      BLE_ADV_FILTER advFilterPolicy;  /// Advertising filter policy
499  } BleAdvParams;
500  }  // namespace bluetooth
501  }  // namespace OHOS
502  #endif
503