• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
138     ADV_STATUS_DEFAULT = 0x00,
139     ADV_STATUS_READ_TX_POWER,
140     ADV_STATUS_SET_PARA,
141     ADV_STATUS_SET_ADV_DATA,
142     ADV_STATUS_SET_SCAN_DATA,
143     ADV_STATUS_SET_RAN_ADDR,
144     ADV_STATUS_STARTING,
145     ADV_STATUS_STARTED,
146     ADV_STATUS_STOPING,
147     ADV_STATUS_STOPED
148 } ADV_HANDLE_STATUS;
149 
150 typedef enum { STOP_SCAN_TYPE_NOR = 0x00, STOP_SCAN_TYPE_RESOLVING_LIST = 0x01 } STOP_SCAN_TYPE;
151 
152 /// Scan status
153 typedef enum {
154     SCAN_NOT_STARTED = -1,
155     SCAN_SUCCESS = 0,
156     SCAN_FAILED_ALREADY_STARTED,
157     SCAN_FAILED_APPLICATION_REGISTRATION_FAILED,
158     SCAN_FAILED_INTERNAL_ERROR,
159     SCAN_FAILED_FEATURE_UNSUPPORTED,
160     SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES
161 } SCAN_STATUS;
162 
163 typedef enum {
164     BLE_APPEARANCE_UNKNOWN = 0x0000,
165     BLE_APPEARANCE_GENERIC_PHONE = 0x0040,
166     BLE_APPEARANCE_GENERIC_COMPUTER = 0x0080,
167     BLE_APPEARANCE_GENERIC_WATCH = 0x00C0,
168     BLE_APPEARANCE_SPORTS_WATCH = 0x00C1,
169     BLE_APPEARANCE_GENERIC_CLOCK = 0x0100,
170     BLE_APPEARANCE_GENERIC_DISPLAY = 0x0140,
171     BLE_APPEARANCE_GENERIC_REMOTE = 0x0180,
172     BLE_APPEARANCE_GENERIC_EYEGLASSES = 0x01C0,
173     BLE_APPEARANCE_GENERIC_TAG = 0x0200,
174     BLE_APPEARANCE_GENERIC_KEYRING = 0x0240,
175     BLE_APPEARANCE_GENERIC_MEDIA_PLAYER = 0x0280,
176     BLE_APPEARANCE_GENERIC_BARCODE_SCANNER = 0x02C0,
177     BLE_APPEARANCE_GENERIC_THERMOMETER = 0x0300,
178     BLE_APPEARANCE_THERMOMETER_EAR = 0x0301,
179     BLE_APPEARANCE_GENERIC_HEART_RATE = 0x0340,
180     BLE_APPEARANCE_HEART_RATE_BELT = 0x0341,
181     BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE = 0x0380,
182     BLE_APPEARANCE_BLOOD_PRESSURE_ARM = 0x0381,
183     BLE_APPEARANCE_BLOOD_PRESSURE_WRIST = 0x0382,
184     BLE_APPEARANCE_GENERIC_HID = 0x03C0,
185     BLE_APPEARANCE_HID_KEYBOARD = 0x03C1,
186     BLE_APPEARANCE_HID_MOUSE = 0x03C2,
187     BLE_APPEARANCE_HID_JOYSTICK = 0x03C3,
188     BLE_APPEARANCE_HID_GAMEPAD = 0x03C4,
189     BLE_APPEARANCE_HID_DIGITIZER_TABLET = 0x03C5,
190     BLE_APPEARANCE_HID_CARD_READER = 0x03C6,
191     BLE_APPEARANCE_HID_DIGITAL_PEN = 0x03C7,
192     BLE_APPEARANCE_HID_BARCODE_SCANNER = 0x03C8,
193     BLE_APPEARANCE_GENERIC_GLUCOSE = 0x0400,
194     BLE_APPEARANCE_GENERIC_WALKING = 0x0440,
195     BLE_APPEARANCE_WALKING_IN_SHOE = 0x0441,
196     BLE_APPEARANCE_WALKING_ON_SHOE = 0x0442,
197     BLE_APPEARANCE_WALKING_ON_HIP = 0x0443,
198     BLE_APPEARANCE_GENERIC_CYCLING = 0x0480,
199     BLE_APPEARANCE_CYCLING_COMPUTER = 0x0481,
200     BLE_APPEARANCE_CYCLING_SPEED = 0x0482,
201     BLE_APPEARANCE_CYCLING_CADENCE = 0x0483,
202     BLE_APPEARANCE_CYCLING_POWER = 0x0484,
203     BLE_APPEARANCE_CYCLING_SPEED_CADENCE = 0x0485,
204     BLE_APPEARANCE_GENERIC_PULSE_OXIMETER = 0x0C40,
205     BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP = 0x0C41,
206     BLE_APPEARANCE_PULSE_OXIMETER_WRIST = 0x0C42,
207     BLE_APPEARANCE_GENERIC_WEIGHT = 0x0C80,
208     BLE_APPEARANCE_GENERIC_PERSONAL_MOBILITY_DEVICE = 0x0CC0,
209     BLE_APPEARANCE_POWERED_WHEELCHAIR = 0x0CC1,
210     BLE_APPEARANCE_MOBILITY_SCOOTER = 0x0CC2,
211     BLE_APPEARANCE_GENERIC_CONTINUOUS_GLUCOSE_MONITOR = 0x0D00,
212     BLE_APPEARANCE_GENERIC_INSULIN_PUMP = 0x0D40,
213     BLE_APPEARANCE_INSULIN_PUMP_DURABLE_PUMP = 0x0D41,
214     BLE_APPEARANCE_INSULIN_PUMP_PATCH_PUMP = 0x0D44,
215     BLE_APPEARANCE_INSULIN_PEN = 0x0D48,
216     BLE_APPEARANCE_GENERIC_MEDICATION_DELIVERY = 0x0D80,
217     BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS = 0x1440,
218     BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION = 0x1441,
219     BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV = 0x1442,
220     BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD = 0x1443,
221     BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV = 0x1444
222 } BLE_APPEARANCE;
223 
224 /// GAP BLE callback event type
225 typedef enum {
226     BLE_GAP_ADV_DATA_SET_COMPLETE_EVT = 0,       /// advertising data set complete
227     BLE_GAP_ADV_SCAN_RSP_DATA_SET_COMPLETE_EVT,  /// scan response data set complete
228     BLE_GAP_ADV_PARAM_SET_COMPLETE_EVT,          /// advertising parameter set complete
229     BLE_GAP_ADV_READ_TXPOWER_EVT,                /// advertising read tx power
230     BLE_GAP_ADV_START_COMPLETE_EVT,              /// start advertising complete
231     BLE_GAP_ADV_STOP_COMPLETE_EVT,               /// stop adv complete
232     BLE_GAP_ADV_DATA_RAW_SET_COMPLETE_EVT,       /// raw advertising data set complete
233 
234     BLE_GAP_EX_ADV_SET_RAND_ADDR_RESULT_EVT,           /// extend advertising data set complete
235     BLE_GAP_EX_ADV_PARAM_SET_COMPLETE_EVT,             /// extend advertising parameter set complete
236     BLE_GAP_EX_ADV_DATA_SET_COMPLETE_EVT,              /// extend advertising data set complete
237     BLE_GAP_EX_ADV_SCAN_RSP_DATA_SET_COMPLETE_EVT,     /// extend scan response data set complete
238     BLE_GAP_EX_ADV_START_COMPLETE_EVT,                 /// start extend advertising complete
239     BLE_GAP_EX_ADV_STOP_COMPLETE_EVT,                  /// stop extend advertising complete
240     BLE_GAP_EX_ALL_ADV_STOP_COMPLETE_EVT,              /// stop all extend advertising complete
241     BLE_GAP_EX_RESOLVING_LIST_ADV_STOP_COMPLETE_EVT,   /// stop all resolving list extend advertising complete
242     BLE_GAP_EX_RESOLVING_LIST_ADV_START_COMPLETE_EVT,  /// start all resolving list extend advertising complete
243     BLE_GAP_EX_ADV_REMOVE_HANDLE_RESULT_EVT,           /// extend advertising remove handle complete
244     BLE_GAP_EX_ADV_CLEAR_HANDLE_RESULT_EVT,            /// extend advertising clear handle complete
245     BLE_GAP_EX_ADV_SCAN_REQUEST_RECEIVED_EVT,          /// extend advertising scan request received complete
246     BLE_GAP_EX_ADC_TERMINATED_ADV_SET_EVT,             /// extend advertising terminated adv set event
247 
248     BLE_GAP_SCAN_PARAM_SET_COMPLETE_EVT,                 /// scan parameters set complete
249     BLE_GAP_SCAN_RESULT_EVT,                             /// one scan result ready each time
250     BLE_GAP_SCAN_DELAY_REPORT_RESULT_EVT,                /// one scan result ready each time
251     BLE_GAP_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT,          /// raw scan response data set complete
252     BLE_GAP_SCAN_START_COMPLETE_EVT,                     /// start scan complete
253     BLE_GAP_SCAN_STOP_COMPLETE_EVT,                      /// stop scan complete
254     BLE_GAP_RESOLVING_LIST_ADV_SCAN_STOP_COMPLETE_EVT,   /// stop all resolvint list scan complete
255     BLE_GAP_RESOLVING_LIST_ADV_SCAN_START_COMPLETE_EVT,  /// start all resolvint list scan complete
256 
257     BLE_GAP_EX_SCAN_PARAM_SET_COMPLETE_EVT,                 /// scan parameters set complete
258     BLE_GAP_EX_SCAN_RESULT_EVT,                             /// one scan result ready each time
259     BLE_GAP_EX_SCAN_DELAY_REPORT_RESULT_EVT,                /// one scan result ready each time
260     BLE_GAP_EX_SCAN_RSP_DATA_RAW_SET_COMPLETE_EVT,          /// raw scan response data set complete
261     BLE_GAP_EX_SCAN_START_COMPLETE_EVT,                     /// start scan complete
262     BLE_GAP_EX_SCAN_STOP_COMPLETE_EVT,                      /// stop scan complete
263     BLE_GAP_EX_RESOLVING_LIST_ADV_SCAN_STOP_COMPLETE_EVT,   /// stop all resolvint list scan complete
264     BLE_GAP_EX_RESOLVING_LIST_ADV_SCAN_START_COMPLETE_EVT,  /// start all resolvint list scan complete
265 
266     BLE_GATT_DEVICE_INFO_REGISTER_STSTUS,  /// device information
267     BLE_GATT_GAP_SERVICE_REGISTER_STSTUS,  /// gap service
268 
269     BLE_GAP_ENCRYPTION_COMPLETE_EVT,
270     BLE_GAP_LE_LOCAL_ENCRYPTION_KEY_REQ_EVT,
271     BLE_GAP_LE_REMOTE_ENCRYPTION_KEY_REQ_EVT,
272     BLE_GAP_LE_SIGN_COUNTER_CHANGE_NOTIF_EVT,
273     BLE_GAP_LE_REQ_SIGNING_ALGORITHM_INFO_EVT,
274     BLE_GAP_LE_PAIR_FEATURE_REQ_EVT,
275     BLE_GAP_LE_PAIR_FEATURE_IND_EVT,
276     BLE_GAP_LE_PAIR_METHOD_NOTI_EVT,
277     BLE_GAP_LE_PAIR_KEY_PRESS_NOTI_EVT,
278     BLE_GAP_LE_PAIR_PASSKEY_REQ_EVT,
279     BLE_GAP_LE_PAIR_PASSKEY_NOTI_EVT,
280     BLE_GAP_LE_PAIR_OOB_REQ_EVT,
281     BLE_GAP_LE_PAIR_SC_OOB_REQ_EVT,
282     BLE_GAP_LE_PAIR_SC_USER_CONFIRM_REQ_EVT,
283     BLE_GAP_LE_PAIR_COMELETE_EVT,
284     BLE_GAP_LE_PAIR_KEY_NOTI_EVT,
285     BLE_GAP_LE_REQUEST_SECURITY_RESULT,
286 } BLE_GAP_CB_EVENT;
287 
288 typedef union {
289     struct EncryptionComplete {
290         uint8_t status;
291         BtAddr peerAddr;
292     } encryptionComplete_;
293 
294     struct LeLocalEncryptionKeyReqEvent {
295         BtAddr addr;
296         uint64_t rand;
297         uint16_t ediv;
298     } leLocalEncryptionKeyReqEvent_;
299 
300     struct LeRemoteEncryptionKeyReqEvent {
301         BtAddr addr;
302     } leRemoteEncryptionKeyReqEvent_;
303 
304     struct LeSignCounterChangeNotification {
305         BtAddr addr;
306         GAP_SignCounterType type;
307         uint32_t counter;
308     } leSignCounterChangeNotification_;
309 
310     struct GapRequestSigningAlgorithmInfo {
311         BtAddr addr;
312     } gapRequestSigningAlgorithmInfo_;
313 
314     struct LePairFeatureReq {
315         BtAddr peerAddr;
316         bool localPair;
317     } lePairFeatureReq_;
318 
319     struct LePairFeatureInd {
320         BtAddr addr;
321         GapLePairFeature remoteFrature;
322     } lePairFeatureInd_;
323 
324     struct LePairMethodNotify {
325         BtAddr addr;
326         uint8_t pairMethod;
327     } lePairMethodNotify_;
328 
329     struct LePairKeyPressNotification {
330         BtAddr addr;
331         uint8_t pressType;
332     } lePairKeyPressNotification_;
333 
334     struct LePairPassKeyReq {
335         BtAddr addr;
336     } lePairPassKeyReq_;
337 
338     struct LePairPassKeyNotification {
339         BtAddr addr;
340         uint32_t number;
341     } lePairPassKeyNotification_;
342 
343     struct LePairOobReq {
344         BtAddr addr;
345     } lePairOobReq_;
346 
347     struct LePairScOobReq {
348         BtAddr addr;
349     } lePairScOob_req_;
350 
351     struct LePairScUserConfirmReq {
352         BtAddr addr;
353         uint32_t number;
354     } lePairScUserConfirmReq_;
355 
356     struct LePairComplete {
357         BtAddr addr;
358         uint8_t result;
359         uint8_t keyType;
360     } lePairComplete_;
361 
362     struct LePairKeyNotify {
363         BtAddr addr;
364         LeEncKey remoteEncKey;
365         bool hasRemoteEncKey;
366         LeIdKey remoteIdKey;
367         bool hasRemoteIdKey;
368         LeSignKey remoteSignKey;
369         bool hasRemoteSignKey;
370         LeEncKey localEncKey;
371         bool hasLocalEncKey;
372         LeSignKey localSignKey;
373         bool hasLocalSignKey;
374     } lePairKeyNotify_;
375 
376     struct LeRequestSecurityResult {
377         BtAddr addr;
378         uint8_t result;
379         GAP_LeSecurityStatus status;
380     } leRequestSecurityResult_;
381 } BleGapCallbackParam;
382 
383 /// Features supported by the controller.
384 /// BLUETOOTH SPECIFICATION Version 5.0 | Vol 6, Part B - 4.6
385 typedef enum {
386     LE_ENCRYPTION = 0,
387     CONNECTION_PARAMETERS_REQUEST_PROCEDURE,
388     EXTENDED_REJECT_INDICATION,
389     SLAVE_INITIATED_FEATURES_EXCHANGE,
390     LE_PING,
391     LE_DATA_PACKET_LENGTH_EXTENSION,
392     LL_PRIVACY,
393     EXTENDED_SCANNER_FILTER_POLICIES,
394     LE_2M_PHY,
395     STABLE_MODULATION_INDEX_TRANSMITTER,
396     STABLE_MODULATION_INDEX_RECEIVER,
397     LE_CODED_PHY,
398     LE_EXTENDED_ADVERTISING,
399     LE_PERIODIC_ADVERTISING,
400     CHANNEL_SELECTION_ALGORITHM_2,
401     LE_POWER_CLASS
402 } FEATURE_SUPPORTED;
403 
404 /// Ble scan type
405 typedef enum {
406     BLE_SCAN_TYPE_PASSIVE = 0x00,  /// Passive scan
407     BLE_SCAN_TYPE_ACTIVE = 0x01,   /// Active scan
408 } BLE_SCAN_TYPE;
409 
410 /// Ble scan mode
411 typedef enum {
412     BLE_SCAN_MODE_NON_DISC = 0x00,  /// Non Discoverable
413     BLE_SCAN_MODE_GENERAL = 0x01,   /// General
414     BLE_SCAN_MODE_LIMITED = 0x02,   /// Limited
415     BLE_SCAN_MODE_ALL = 0x03,       /// ALL
416 } BLE_SCAN_MODE;
417 
418 /// Ble scan filter type
419 typedef enum {
420     BLE_SCAN_FILTER_ALLOW_ALL = 0x00,  /// Accept all :
421     /// 1. advertisement packets except directed advertising packets not addressed to this device (default).
422     BLE_SCAN_FILTER_ALLOW_ONLY_WLST = 0x01,  /// Accept only :
423     /// 1. advertisement packets from devices where the advertiser’s address is in the WH list.
424     /// 2. Directed advertising packets which are not addressed for this device shall be ignored.
425     BLE_SCAN_FILTER_ALLOW_UND_RPA_DIR = 0x02,  /// Accept all :
426     /// 1. undirected advertisement packets, and
427     /// 2. directed advertising packets where the initiator address is a resolvable private address, and
428     /// 3. directed advertising packets addressed to this device.
429     BLE_SCAN_FILTER_ALLOW_WLIST_PRA_DIR = 0x03,  /// Accept all :
430     /// 1. advertisement packets from devices where the advertiser’s address is in the WH list, and
431     /// 2. directed advertising packets where the initiator address is a resolvable private address, and
432     /// 3. directed advertising packets addressed to this device.
433 } BLE_SCAN_FILTER;
434 
435 /// Ble scan duplicate type
436 typedef enum {
437     BLE_SCAN_DUPLICATE_DISABLE =
438         0x00,  /// the Link Layer should generate advertising reports to the host for each packet received
439     BLE_SCAN_DUPLICATE_ENABLE = 0x01,  /// the Link Layer should filter out duplicate advertising reports to the Host
440     BLE_SCAN_DUPLICATE_MAX = 0x02,     /// 0x02 – 0xFF, Reserved for future use
441 } BLE_SCAN_DUPLICATE;
442 
443 /// Ble scan parameters
444 typedef struct {
445     BLE_SCAN_TYPE scanType;            /// Scan type
446     BLE_ADDR_TYPE ownAddrType;         /// Owner address type
447     BLE_SCAN_FILTER scanFilterPolicy;  /// Scan filter policy
448     uint16_t scanInterval;             /// Scan interval. This is defined as the time interval from
449     /// when the Controller started its last LE scan until it begins the subsequent LE scan.
450     /// Range: 0x0004 to 0x4000 Default: 0x0010 (10 ms)
451     /// Time = N * 0.625 msec
452     /// Time Range: 2.5 msec to 10.24 seconds
453     uint16_t scanWindow;  /// Scan window. The duration of the LE scan. LE_Scan_Window
454     /// shall be less than or equal to LE_Scan_Interval
455     /// Range: 0x0004 to 0x4000 Default: 0x0010 (10 ms)
456     /// Time = N * 0.625 msec
457     /// Time Range: 2.5 msec to 10240 msec
458     BLE_SCAN_DUPLICATE scanDuplicate;  /// The Scan_Duplicates parameter controls whether the Link Layer should filter
459     /// out duplicate advertising reports (BLE_SCAN_DUPLICATE_ENABLE) to the Host,
460     /// or if the Link Layer should generate advertising reports for each packet received
461 } BleScanParams;
462 
463 typedef enum {
464     ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY = 0x00,  /// Allow both scan and connection requests from anyone
465     ADV_FILTER_ALLOW_SCAN_WLST_CON_ANY,   /// Allow both scan req from WH List devices and connection req fro anyone
466     ADV_FILTER_ALLOW_SCAN_ANY_CON_WLST,   /// Allow both scan req from anyone and connection req from WH List devices
467     ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST,  /// Allow scan and connection requests from WH List devices
468 } BLE_ADV_FILTER;
469 
470 /// Advertising channel mask
471 typedef enum {
472     ADV_CHNL_37 = 0x01,
473     ADV_CHNL_38 = 0x02,
474     ADV_CHNL_39 = 0x04,
475     ADV_CHNL_ALL = 0x07,
476 } BLE_ADV_CHANNEL;
477 
478 /// Advertising mode
479 typedef enum {
480     ADV_TYPE_IND = 0x00,
481     ADV_TYPE_DIRECT_IND_HIGH = 0x01,
482     ADV_TYPE_SCAN_IND = 0x02,
483     ADV_TYPE_NONCONN_IND = 0x03,
484     ADV_TYPE_DIRECT_IND_LOW = 0x04,
485 } BLE_ADV_TYPE;
486 
487 /// Scan Event Type
488 typedef enum {
489     SCAN_ADV_IND = 0x00,
490     SCAN_ADV_DIRECT_IND = 0x01,
491     SCAN_ADV_SCAN_IND = 0x02,
492     SCAN_ADV_NONCONN_IND = 0x03,
493     SCAN_SCAN_RSP = 0x04,
494 } BLE_SCAN_EVENT_TYPE;
495 
496 /// Advertising parameters
497 typedef struct {
498     uint16_t advMinInterval;  /// Minimum advertising interval for
499     /// undirected and low duty cycle directed advertising.
500     /// Range: 0x0020 to 0x4000 Default: N = 0x0800 (1.28 second)
501     /// ime = N * 0.625 msec Time Range: 20 ms to 10.24 sec
502     uint16_t advMaxInterval;  /// Maximum advertising interval for
503     /// undirected and low duty cycle directed advertising.
504     /// Range: 0x0020 to 0x4000 Default: N = 0x0800 (1.28 second)
505     /// Time = N * 0.625 msec Time Range: 20 ms to 10.24 sec Advertising max interval
506     BLE_ADV_TYPE advType;            /// Advertising type
507     BLE_ADDR_TYPE ownAddrType;       /// Owner bluetooth device address type
508     BtAddr peerAddr;                 /// Peer device bluetooth device address
509     BLE_ADDR_TYPE peerAddrType;      /// Peer device bluetooth device address type
510     BLE_ADV_CHANNEL channelMap;      /// Advertising channel map
511     BLE_ADV_FILTER advFilterPolicy;  /// Advertising filter policy
512 } BleAdvParams;
513 }  // namespace bluetooth
514 }  // namespace OHOS
515 #endif
516