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