1 /*
2  * Copyright (C) 2021 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 HCI_DEF_LE_CMD_H
17 #define HCI_DEF_LE_CMD_H
18 
19 #include <stdint.h>
20 
21 #include "hci_def_cmd_common.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #pragma pack(1)
28 
29 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
30 // 7.8 LE CONTROLLER COMMANDS
31 #define HCI_COMMAND_OGF_LE_CONTROLLER 0x08
32 
33 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
34 // 7.8.1 LE Set Event Mask Command
35 #define HCI_LE_SET_EVENT_MASK MAKE_OPCODE(0x0001, HCI_COMMAND_OGF_LE_CONTROLLER)
36 
37 #define LE_EVENT_MASK_LE_CONNECTION_COMPLETE_EVENT 0x0000000000000001
38 #define LE_EVENT_MASK_LE_ADVERTISING_REPORT_EVENT 0x0000000000000002
39 #define LE_EVENT_MASK_LE_CONNECTION_UPDATE_COMPLETE_EVENT 0x0000000000000004
40 #define LE_EVENT_MASK_LE_READ_REMOTE_FEATURES_COMPLETE_EVENT 0x0000000000000008
41 #define LE_EVENT_MASK_LE_LONG_TERM_KEY_REQUEST_EVENT 0x0000000000000010
42 #define LE_EVENT_MASK_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_EVENT 0x0000000000000020
43 #define LE_EVENT_MASK_LE_DATA_LENGTH_CHANGE_EVENT 0x0000000000000040
44 #define LE_EVENT_MASK_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT 0x0000000000000080
45 #define LE_EVENT_MASK_LE_GENERATE_DHKEY_COMPLETE_EVENT 0x0000000000000100
46 #define LE_EVENT_MASK_LE_ENHANCED_CONNECTION_COMPLETE_EVENT 0x0000000000000200
47 #define LE_EVENT_MASK_LE_DIRECTED_ADVERTISING_REPORT_EVENT 0x0000000000000400
48 #define LE_EVENT_MASK_LE_PHY_UPDATE_COMPLETE_EVENT 0x0000000000000800
49 #define LE_EVENT_MASK_LE_EXTENDED_ADVERTISING_REPORT_EVENT 0x0000000000001000
50 #define LE_EVENT_MASK_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED_EVENT 0x0000000000002000
51 #define LE_EVENT_MASK_LE_PERIODIC_ADVERTISING_REPORT_EVENT 0x0000000000004000
52 #define LE_EVENT_MASK_LE_PERIODIC_ADVERTISING_SYNC_LOST_EVENT 0x0000000000008000
53 #define LE_EVENT_MASK_LE_EXTENDED_SCAN_TIMEOUT_EVENT 0x0000000000010000
54 #define LE_EVENT_MASK_LE_EXTENDED_ADVERTISING_SET_TERMINATED_EVENT 0x0000000000020000
55 #define LE_EVENT_MASK_LE_SCAN_REQUEST_RECEIVED_EVENT 0x0000000000040000
56 #define LE_EVENT_MASK_LE_CHANNEL_SELECTION_ALGORITHM_EVENT 0x0000000000080000
57 
58 #define LE_EVENT_MASK_DEFAULT 0x000000000000001F
59 
60 #define LE_EVENT_MASK_CORE_4_0 LE_EVENT_MASK_DEFAULT
61 
62 #define LE_EVENT_MASK_CORE_4_1 (LE_EVENT_MASK_CORE_4_0 | LE_EVENT_MASK_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_EVENT)
63 
64 #define LE_EVENT_MASK_CORE_4_2                                                                                        \
65     (LE_EVENT_MASK_CORE_4_1 | LE_EVENT_MASK_LE_DATA_LENGTH_CHANGE_EVENT |                                             \
66         LE_EVENT_MASK_LE_READ_LOCAL_P256_PUBLIC_KEY_COMPLETE_EVENT | LE_EVENT_MASK_LE_GENERATE_DHKEY_COMPLETE_EVENT | \
67         LE_EVENT_MASK_LE_ENHANCED_CONNECTION_COMPLETE_EVENT | LE_EVENT_MASK_LE_DIRECTED_ADVERTISING_REPORT_EVENT)
68 
69 #define LE_EVENT_MASK_CORE_5_0                                                                                       \
70     (LE_EVENT_MASK_CORE_4_2 | LE_EVENT_MASK_LE_PHY_UPDATE_COMPLETE_EVENT |                                           \
71         LE_EVENT_MASK_LE_EXTENDED_ADVERTISING_REPORT_EVENT |                                                         \
72         LE_EVENT_MASK_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED_EVENT |                                               \
73         LE_EVENT_MASK_LE_PERIODIC_ADVERTISING_REPORT_EVENT | LE_EVENT_MASK_LE_PERIODIC_ADVERTISING_SYNC_LOST_EVENT | \
74         LE_EVENT_MASK_LE_EXTENDED_SCAN_TIMEOUT_EVENT | LE_EVENT_MASK_LE_EXTENDED_ADVERTISING_SET_TERMINATED_EVENT |  \
75         LE_EVENT_MASK_LE_SCAN_REQUEST_RECEIVED_EVENT | LE_EVENT_MASK_LE_CHANNEL_SELECTION_ALGORITHM_EVENT)
76 
77 typedef struct {
78     uint64_t leEventMask;
79 } HciLeSetEventMaskParam;
80 
81 typedef HciStatusParam HciLeSetEventMaskReturnParam;
82 
83 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
84 // 7.8.2 LE Read Buffer Size Command
85 #define HCI_LE_READ_BUFFER_SIZE MAKE_OPCODE(0x0002, HCI_COMMAND_OGF_LE_CONTROLLER)
86 
87 typedef struct {
88     uint8_t status;
89     uint16_t hcLeAclDataPacketLength;
90     uint8_t hcTotalNumLeDataPackets;
91 } HciLeReadBufferSizeReturnParam;
92 
93 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
94 // 7.8.3 LE Read Local Supported Features Command
95 #define HCI_LE_READ_LOCAL_SUPPORTED_FEATURES MAKE_OPCODE(0x0003, HCI_COMMAND_OGF_LE_CONTROLLER)
96 
97 typedef struct {
98     uint8_t status;
99     HciLeFeatures leFeatures;
100 } HciLeReadLocalSupportedFeaturesReturnParam;
101 
102 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
103 // 7.8.4 LE Set Random Address Command
104 #define HCI_LE_SET_RANDOM_ADDRESS MAKE_OPCODE(0x0005, HCI_COMMAND_OGF_LE_CONTROLLER)
105 
106 typedef struct {
107     uint8_t randomAddess[6];
108 } HciLeSetRandomAddressParam;
109 
110 typedef HciStatusParam HciLeSetRandomAddressReturnParam;
111 
112 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
113 // 7.8.5 LE Set Advertising Parameters Command
114 #define HCI_LE_SET_ADVERTISING_PARAMETERS MAKE_OPCODE(0x0006, HCI_COMMAND_OGF_LE_CONTROLLER)
115 
116 typedef struct {
117     uint16_t advertisingIntervalMin;
118     uint16_t advertisingIntervalMax;
119     uint8_t advertisingType;
120     uint8_t ownAddressType;
121     uint8_t peerAddressType;
122     HciBdAddr peerAddress;
123     uint8_t advertisingChannelMap;
124     uint8_t advertisingFilterPolicy;
125 } HciLeSetAdvertisingParametersParam;
126 
127 typedef HciStatusParam HciLeSetAdvertisingParametersReturnParam;
128 
129 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
130 // 7.8.6 LE Read Advertising Channel Tx Power Command
131 #define HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER MAKE_OPCODE(0x0007, HCI_COMMAND_OGF_LE_CONTROLLER)
132 
133 typedef struct {
134     uint8_t status;
135     uint8_t transmitPowerLevel;
136 } HciLeReadAdvertisingChannelTxPowerReturnParam;
137 
138 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
139 // 7.8.7 LE Set Advertising Data Command
140 #define HCI_LE_SET_ADVERTISING_DATA MAKE_OPCODE(0x0008, HCI_COMMAND_OGF_LE_CONTROLLER)
141 
142 typedef struct {
143     uint8_t advertisingDataLen;
144     uint8_t advertisingData[31];
145 } HciLeSetAdvertisingDataParam;
146 
147 typedef HciStatusParam HciLeSetAdvertisingDataReturnParam;
148 
149 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
150 // 7.8.8 LE Set Scan Response Data Command
151 #define HCI_LE_SET_SCAN_RESPONSE_DATA MAKE_OPCODE(0x0009, HCI_COMMAND_OGF_LE_CONTROLLER)
152 
153 typedef struct {
154     uint8_t scanResponseDataLength;
155     uint8_t scanResponseData[31];
156 } HciLeSetScanResponseDataParam;
157 
158 typedef HciStatusParam HciLeSetScanResponseDataReturnParam;
159 
160 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
161 // 7.8.9 LE Set Advertising Enable Command
162 #define HCI_LE_SET_ADVERTISING_ENABLE MAKE_OPCODE(0x000A, HCI_COMMAND_OGF_LE_CONTROLLER)
163 
164 typedef struct {
165     uint8_t advertisingEnable;
166 } HciLeSetAdvertisingEnableParam;
167 
168 typedef HciStatusParam HciLeSetAdvertisingEnableReturnParam;
169 
170 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
171 // 7.8.10 LE Set Scan Parameters Command
172 #define HCI_LE_SET_SCAN_PARAMETERS MAKE_OPCODE(0x000B, HCI_COMMAND_OGF_LE_CONTROLLER)
173 
174 typedef struct {
175     uint8_t leScanType;
176     uint16_t leScanInterval;
177     uint16_t leScanWindow;
178     uint8_t ownAddressType;
179     uint8_t scanningFilterPolicy;
180 } HciLeSetScanParametersParam;
181 
182 typedef HciStatusParam HciLeSetScanParametersReturnParam;
183 
184 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
185 // 7.8.11 LE Set Scan Enable Command
186 #define HCI_LE_SET_SCAN_ENABLE MAKE_OPCODE(0x000C, HCI_COMMAND_OGF_LE_CONTROLLER)
187 
188 typedef struct {
189     uint8_t leScanEnable;
190     uint8_t filterDuplicates;
191 } HciLeSetScanEnableParam;
192 
193 typedef HciStatusParam HciLeSetScanEnableReturnParam;
194 
195 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
196 // 7.8.12 LE Create Connection Command
197 #define HCI_LE_CREATE_CONNECTION MAKE_OPCODE(0x000D, HCI_COMMAND_OGF_LE_CONTROLLER)
198 
199 #define INITIATOR_FILTER_NO_WHITE_LIST 0x00
200 #define INITIATOR_FILTER_USE_WHITE_LIST 0x01
201 
202 #define PEER_ADDR_TYPE_PUBLIC 0x00
203 #define PEER_ADDR_TYPE_RANDOM 0x01
204 #define PEER_ADDR_TYPE_PUBLIC_IDENTITY 0x02
205 #define PEER_ADDR_TYPE_RANDOM_IDENTITY 0x03
206 
207 #define LOCAL_ADDR_TYPE_PUBLIC 0x00
208 #define LOCAL_ADDR_TYPE_RANDOM 0x01
209 #define LOCAL_ADDR_TYPE_RPA_OR_PUBLIC 0x02
210 #define LOCAL_ADDR_TYPE_RPA_OR_RANDOM 0x03
211 
212 typedef struct {
213     uint16_t leScanInterval;
214     uint16_t leScanWindow;
215     uint8_t initiatorFilterPolicy;
216     uint8_t peerAddressType;
217     HciBdAddr peerAddress;
218     uint8_t ownAddressType;
219     uint16_t connIntervalMin;
220     uint16_t connIntervalMax;
221     uint16_t connLatency;
222     uint16_t supervisionTimeout;
223     uint16_t minimumCELength;
224     uint16_t maximumCELength;
225 } HciLeCreateConnectionParam;
226 
227 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
228 // 7.8.13 LE Create Connection Cancel Command
229 #define HCI_LE_CREATE_CONNECTION_CANCEL MAKE_OPCODE(0x000E, HCI_COMMAND_OGF_LE_CONTROLLER)
230 
231 typedef HciStatusParam HciLeCreateConnectionCancelReturnParam;
232 
233 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
234 // 7.8.14 LE Read WL Size Command
235 #define HCI_LE_READ_WHITE_LIST_SIZE MAKE_OPCODE(0x000F, HCI_COMMAND_OGF_LE_CONTROLLER)
236 
237 typedef struct {
238     uint8_t status;
239     uint8_t whiteListSize;
240 } HciLeReadWhiteListSizeReturnParam;
241 
242 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
243 // 7.8.15 LE Clear WL Command
244 #define HCI_LE_CLEAR_WHITE_LIST MAKE_OPCODE(0x0010, HCI_COMMAND_OGF_LE_CONTROLLER)
245 
246 typedef HciStatusParam HciLeClearWhiteListReturnParam;
247 
248 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
249 // 7.8.16 LE Add Device To WL Command
250 #define HCI_LE_ADD_DEVICE_TO_WHITE_LIST MAKE_OPCODE(0x0011, HCI_COMMAND_OGF_LE_CONTROLLER)
251 
252 typedef struct {
253     uint8_t addressType;
254     HciBdAddr address;
255 } HciLeAddDeviceToWhiteListParam;
256 
257 typedef HciStatusParam HciLeAddDeviceToWhiteListReturnParam;
258 
259 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
260 // 7.8.17 LE Remove Device From WL Command
261 #define HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST MAKE_OPCODE(0x0012, HCI_COMMAND_OGF_LE_CONTROLLER)
262 
263 typedef struct {
264     uint8_t addressType;
265     HciBdAddr address;
266 } HciLeRemoveDeviceFromWhiteListParam;
267 
268 typedef HciStatusParam HciLeRemoveDeviceFromWhiteListReturnParam;
269 
270 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
271 // 7.8.18 LE Connection Update Command
272 #define HCI_LE_CONNECTION_UPDATE MAKE_OPCODE(0x0013, HCI_COMMAND_OGF_LE_CONTROLLER)
273 
274 typedef struct {
275     uint16_t connectionHandle;
276     uint16_t connIntervalMin;
277     uint16_t connIntervalMax;
278     uint16_t connLatency;
279     uint16_t supervisionTimeout;
280     uint16_t minimumCELength;
281     uint16_t maximumCELength;
282 } HciLeConnectionUpdateParam;
283 
284 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
285 // 7.8.19 LE Set Host Channel Classification Command
286 #define HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION MAKE_OPCODE(0x0014, HCI_COMMAND_OGF_LE_CONTROLLER)
287 
288 typedef struct {
289     uint8_t channelMap[5];
290 } HciLeSetHostChannelClassificationParam;
291 
292 typedef HciStatusParam HciLeSetHostChannelClassificationReturnParam;
293 
294 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
295 // 7.8.20 LE Read Channel Map Command
296 #define HCI_LE_READ_CHANNEL_MAP MAKE_OPCODE(0x0015, HCI_COMMAND_OGF_LE_CONTROLLER)
297 
298 typedef struct {
299     uint16_t connectionHandle;
300 } HciLeReadChannelMapParam;
301 
302 typedef struct {
303     uint8_t status;
304     uint16_t connectionHandle;
305     uint8_t channelMap[5];
306 } HciLeReadChannelMapReturnParam;
307 
308 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
309 // 7.8.21 LE Read Remote Features Command
310 #define HCI_LE_READ_REMOTE_FEATURES MAKE_OPCODE(0x0016, HCI_COMMAND_OGF_LE_CONTROLLER)
311 
312 typedef struct {
313     uint16_t connectionHandle;
314 } HciLeReadRemoteFeaturesParam;
315 
316 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
317 // 7.8.22 LE Encrypt Command
318 #define HCI_LE_ENCRYPT MAKE_OPCODE(0x0017, HCI_COMMAND_OGF_LE_CONTROLLER)
319 
320 typedef struct {
321     uint8_t key[16];
322     uint8_t plaintextData[16];
323 } HciLeEncryptParam;
324 
325 typedef struct {
326     uint8_t status;
327     uint8_t encryptedData[16];
328 } HciLeEncryptReturnParam;
329 
330 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
331 // 7.8.23 LE Rand Command
332 #define HCI_LE_RAND MAKE_OPCODE(0x0018, HCI_COMMAND_OGF_LE_CONTROLLER)
333 
334 typedef struct {
335     uint8_t status;
336     uint8_t randomNumber[8];
337 } HciLeRandReturnParam;
338 
339 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
340 // 7.8.24 LE Start Encryption Command
341 #define HCI_LE_START_ENCRYPTION MAKE_OPCODE(0x0019, HCI_COMMAND_OGF_LE_CONTROLLER)
342 
343 typedef struct {
344     uint16_t connectionHandle;
345     uint8_t randomNumber[8];
346     uint16_t encryptDiversifier;
347     uint8_t longTermKey[16];
348 } HciLeStartEncryptionParam;
349 
350 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
351 // 7.8.25 LE Long Term Key Request Reply Command
352 #define HCI_LE_LONG_TERM_KEY_REQUEST_REPLY MAKE_OPCODE(0x001A, HCI_COMMAND_OGF_LE_CONTROLLER)
353 
354 typedef struct {
355     uint16_t connectionHandle;
356     uint8_t longTermKey[16];
357 } HciLeLongTermKeyRequestReplyParam;
358 
359 typedef struct {
360     uint8_t status;
361     uint16_t connectionHandle;
362 } HciLeLongTermKeyRequestReplyReturnParam;
363 
364 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
365 // 7.8.26 LE Long Term Key Request Negative Reply Command
366 #define HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x001B, HCI_COMMAND_OGF_LE_CONTROLLER)
367 
368 typedef struct {
369     uint16_t connectionHandle;
370 } HciLeLongTermKeyRequestNegativeReplyParam;
371 
372 typedef struct {
373     uint8_t status;
374     uint16_t connectionHandle;
375 } HciLeLongTermKeyRequestNegativeReplyReturnParam;
376 
377 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
378 // 7.8.27 LE Read Supported States Command
379 #define HCI_LE_READ_SUPPORTED_STATES MAKE_OPCODE(0x001C, HCI_COMMAND_OGF_LE_CONTROLLER)
380 
381 typedef struct {
382     uint8_t status;
383     uint64_t leStates;
384 } HciLeReadSupportedStatesReturnParam;
385 
386 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
387 // 7.8.28 LE Receiver Test Command
388 #define HCI_LE_RECEIVER_TEST MAKE_OPCODE(0x001D, HCI_COMMAND_OGF_LE_CONTROLLER)
389 
390 typedef struct {
391     uint8_t rxChannel;
392 } HciLeReceiverTestParam;
393 
394 typedef HciStatusParam HciLeReceiverTestReturnParam;
395 
396 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
397 // 7.8.29 LE Transmitter Test Command
398 #define HCI_LE_TRANSMITTER_TEST MAKE_OPCODE(0x001E, HCI_COMMAND_OGF_LE_CONTROLLER)
399 
400 typedef struct {
401     uint8_t txChannel;
402     uint8_t lengthOfTestData;
403     uint8_t packetPayload;
404 } HciLeTransmitterTestParam;
405 
406 typedef HciStatusParam HciLeTransmitterTestReturnParam;
407 
408 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
409 // 7.8.30 LE Test End Command
410 #define HCI_LE_TEST_END MAKE_OPCODE(0x001F, HCI_COMMAND_OGF_LE_CONTROLLER)
411 
412 typedef struct {
413     uint8_t status;
414     uint16_t numberOfPackets;
415 } HciLeTestEndReturnParam;
416 
417 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
418 // 7.8.31 LE Remote Connection Parameter Request Reply Command
419 #define HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY MAKE_OPCODE(0x0020, HCI_COMMAND_OGF_LE_CONTROLLER)
420 
421 typedef struct {
422     uint16_t connectionHandle;
423     uint16_t intervalMin;
424     uint16_t intervalMax;
425     uint16_t latency;
426     uint16_t timeout;
427     uint16_t minimumCELength;
428     uint16_t maximumCELength;
429 } HciLeRemoteConnectionParameterRequestReplyParam;
430 
431 typedef struct {
432     uint8_t status;
433     uint16_t connectionHandle;
434 } HciLeRemoteConnectionParameterRequestReplyReturnParam;
435 
436 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
437 // 7.8.32 LE Remote Connection Parameter Request Negative Reply Command
438 #define HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x0021, HCI_COMMAND_OGF_LE_CONTROLLER)
439 
440 typedef struct {
441     uint16_t connectionHandle;
442     uint8_t reason;
443 } HciLeRemoteConnectionParameterRequestNegativeReplyParam;
444 
445 typedef struct {
446     uint8_t status;
447     uint16_t connectionHandle;
448 } HciLeRemoteConnectionParameterRequestNegativeReplyReturnParam;
449 
450 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
451 // 7.8.33 LE Set Data Length Command
452 #define HCI_LE_SET_DATA_LENGTH MAKE_OPCODE(0x0022, HCI_COMMAND_OGF_LE_CONTROLLER)
453 
454 typedef struct {
455     uint16_t connectionHandle;
456     uint16_t txOctets;
457     uint16_t txTime;
458 } HciLeSetDataLengthParam;
459 
460 typedef struct {
461     uint8_t status;
462     uint16_t connectionHandle;
463 } HciLeSetDataLengthReturnParam;
464 
465 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
466 // 7.8.34 LE Read Suggested Default Data Length Command
467 #define HCI_LE_READ_SUGGESTED_DEFAULT_DATA_LENGTH MAKE_OPCODE(0x0023, HCI_COMMAND_OGF_LE_CONTROLLER)
468 
469 typedef struct {
470     uint8_t status;
471     uint16_t suggestedMaxTxOctets;
472     uint16_t suggestedMaxTxTime;
473 } HciLeReadSuggestedDefaultDataLengthReturnParam;
474 
475 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
476 // 7.8.35 LE Write Suggested Default Data Length Command
477 #define HCI_LE_WRITE_SUGGESTED_DEFAULT_DATA_LENGTH MAKE_OPCODE(0x0024, HCI_COMMAND_OGF_LE_CONTROLLER)
478 
479 typedef struct {
480     uint16_t suggestedMaxTxOctets;
481     uint16_t suggestedMaxTxTime;
482 } HciLeWriteSuggestedDefaultDataLengthParam;
483 
484 typedef HciStatusParam HciLeWriteSuggestedDefaultDataLengthReturnParam;
485 
486 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
487 // 7.8.36 LE Read Local P-256 Public Key Command
488 #define HCI_LE_READ_LOCAL_P256_PUBLIC_KEY MAKE_OPCODE(0x0025, HCI_COMMAND_OGF_LE_CONTROLLER)
489 
490 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
491 // 7.8.37 LE Generate DHKey Command
492 #define HCI_LE_GENERATE_DHKEY MAKE_OPCODE(0x0026, HCI_COMMAND_OGF_LE_CONTROLLER)
493 
494 typedef struct {
495     uint8_t remoteP256PublicKey[64];
496 } HciLeGenerateDHKeyParam;
497 
498 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
499 // 7.8.38 LE Add Device To Resolving List Command
500 #define HCI_LE_ADD_DEVICE_TO_RESOLVING_LIST MAKE_OPCODE(0x0027, HCI_COMMAND_OGF_LE_CONTROLLER)
501 
502 #define HCI_PEER_IDENTITY_ADDRESS_TYPE_PUBLIC 0x00
503 #define HCI_PEER_IDENTITY_ADDRESS_TYPE_RANDOM 0x01
504 
505 typedef struct {
506     uint8_t peerIdentityAddrType;
507     HciBdAddr peerIdentityAddress;
508     uint8_t peerIrk[16];
509     uint8_t localIrk[16];
510 } HciLeAddDeviceToResolvingListParam;
511 
512 typedef HciStatusParam HciLeAddDeviceToResolvingListReturnParam;
513 
514 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
515 // 7.8.39 LE Remove Device From Resolving List Command
516 #define HCI_LE_REMOVE_DEVICE_FROM_RESOLVING_LIST MAKE_OPCODE(0x0028, HCI_COMMAND_OGF_LE_CONTROLLER)
517 
518 typedef struct {
519     uint8_t peerIdentityAddrType;
520     HciBdAddr peerIdentityAddress;
521 } HciLeRemoveDeviceFromResolvingListParam;
522 
523 typedef HciStatusParam HciLeRemoveDeviceFromResolvingListReturnParam;
524 
525 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
526 // 7.8.40 LE Clear Resolving List Command
527 #define HCI_LE_CLEAR_RESOLVING_LIST MAKE_OPCODE(0x0029, HCI_COMMAND_OGF_LE_CONTROLLER)
528 
529 typedef HciStatusParam HciLeClearResolvingListReturnParam;
530 
531 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
532 // 7.8.41 LE Read Resolving List Size Command
533 #define HCI_LE_READ_RESOLVING_LIST_SIZE MAKE_OPCODE(0x002A, HCI_COMMAND_OGF_LE_CONTROLLER)
534 
535 typedef struct {
536     uint8_t status;
537     uint8_t resolvingListSize;
538 } HciLeReadResolvingListSizeReturnParam;
539 
540 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
541 // 7.8.42 LE Read Peer Resolvable Address Command
542 #define HCI_LE_READ_PEER_RESOLVABLE_ADDRESS MAKE_OPCODE(0x002B, HCI_COMMAND_OGF_LE_CONTROLLER)
543 
544 typedef struct {
545     uint8_t peerIdentityAddressType;
546     HciBdAddr peerIdentityAddress;
547 } HciLeReadPeerResolvableAddressParam;
548 
549 typedef struct {
550     uint8_t status;
551     HciBdAddr peerResolvableAddress;
552 } HciLeReadPeerResolvableAddressReturnParam;
553 
554 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
555 // 7.8.43 LE Read Local Resolvable Address Command
556 #define HCI_LE_READ_LOCAL_RESOLVABLE_ADDRESS MAKE_OPCODE(0x002C, HCI_COMMAND_OGF_LE_CONTROLLER)
557 
558 typedef struct {
559     uint8_t peerIdentityAddressType;
560     HciBdAddr peerIdentityAddress;
561 } HciLeReadLocalResolvableAddressParam;
562 
563 typedef struct {
564     uint8_t status;
565     HciBdAddr localResolvableAddress;
566 } HciLeReadLocalResolvableAddressReturnParam;
567 
568 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
569 // 7.8.44 LE Set Address Resolution Enable Command
570 #define HCI_LE_SET_ADDRESS_RESOLUTION_ENABLE MAKE_OPCODE(0x002D, HCI_COMMAND_OGF_LE_CONTROLLER)
571 
572 #define ADDRESS_RESOLUTION_IN_CONTROLLER_DISABLED 0x00
573 #define ADDRESS_RESOLUTION_IN_CONTROLLER_ENABLEED 0x01
574 
575 typedef struct {
576     uint8_t addressResolutionEnable;
577 } HciLeSetAddressResolutionEnableParam;
578 
579 typedef HciStatusParam HciLeSetAddressResolutionEnableReturnParam;
580 
581 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
582 // 7.8.45 LE Set Resolvable Private Address Timeout Command
583 #define HCI_LE_SET_RESOLVABLE_PRIVATE_ADDRESS_TIMEOUT MAKE_OPCODE(0x002E, HCI_COMMAND_OGF_LE_CONTROLLER)
584 
585 typedef struct {
586     uint16_t rpaTimeout;
587 } HciLeSetResolvablePrivateAddressTimeoutParam;
588 
589 typedef HciStatusParam HciLeSetResolvablePrivateAddressTimeoutReturnParam;
590 
591 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
592 // 7.8.46 LE Read Maximum Data Length Command
593 #define HCI_LE_READ_MAXIMUM_DATA_LENGTH MAKE_OPCODE(0x002F, HCI_COMMAND_OGF_LE_CONTROLLER)
594 
595 typedef struct {
596     uint8_t status;
597     uint16_t supportedMaxTxOctets;
598     uint16_t supportedMaxTxTime;
599     uint16_t supportedMaxRxOctets;
600     uint16_t supportedMaxRxTime;
601 } HciLeReadMaximumDataLengthReturnParam;
602 
603 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
604 // 7.8.47 LE Read PHY Command
605 #define HCI_LE_READ_PHY MAKE_OPCODE(0x0030, HCI_COMMAND_OGF_LE_CONTROLLER)
606 
607 typedef struct {
608     uint16_t connectionHandle;
609 } HciLeReadPhyParam;
610 
611 typedef struct {
612     uint8_t status;
613     uint16_t connectionHandle;
614     uint8_t txPhy;
615     uint8_t rxPhy;
616 } HciLeReadPhyReturnParam;
617 
618 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
619 // 7.8.48 LE Set Default PHY Command
620 #define HCI_LE_SET_DEFAULT_PHY MAKE_OPCODE(0x0031, HCI_COMMAND_OGF_LE_CONTROLLER)
621 
622 typedef struct {
623     uint8_t allPhys;
624     uint8_t txPhys;
625     uint8_t rxPhys;
626 } HciLeSetDefaultPhyParam;
627 
628 typedef HciStatusParam HciLeSetDefaultPhyReturnParam;
629 
630 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
631 // 7.8.49 LE Set PHY Command
632 #define HCI_LE_SET_PHY MAKE_OPCODE(0x0032, HCI_COMMAND_OGF_LE_CONTROLLER)
633 
634 typedef struct {
635     uint16_t connectionHandle;
636     uint8_t allPhys;
637     uint8_t txPhys;
638     uint8_t rxPhys;
639     uint16_t phyOptions;
640 } HciLeSetPhyParam;
641 
642 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
643 // 7.8.50 LE Enhanced Receiver Test Command
644 #define HCI_LE_ENHANCED_RECEIVER_TEST MAKE_OPCODE(0x0033, HCI_COMMAND_OGF_LE_CONTROLLER)
645 
646 typedef struct {
647     uint8_t rxChannel;
648     uint8_t phy;
649     uint8_t modulationIndex;
650 } HciLeEnhancedReceiverTestParam;
651 
652 typedef HciStatusParam HciLeEnhancedReceiverTestReturnParam;
653 
654 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
655 // 7.8.51 LE Enhanced Transmitter Test Command
656 #define HCI_LE_ENHANCED_TRANSMITTER_TEST MAKE_OPCODE(0x0034, HCI_COMMAND_OGF_LE_CONTROLLER)
657 
658 typedef struct {
659     uint8_t txChannel;
660     uint8_t lengthOfTestData;
661     uint8_t packetPayload;
662     uint8_t phy;
663 } HciLeEnhancedTransmitterTestParam;
664 
665 typedef HciStatusParam HciLeEnhancedTransmitterTestReturnParam;
666 
667 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
668 // 7.8.52 LE Set Advertising Set Random Address Command
669 #define HCI_LE_SET_ADVERTISING_SET_RANDOM_ADDRESS MAKE_OPCODE(0x0035, HCI_COMMAND_OGF_LE_CONTROLLER)
670 
671 typedef struct {
672     uint8_t advertisingHandle;
673     uint8_t randomAddress[6];
674 } HciLeSetAdvertisingSetRandomAddressParam;
675 
676 typedef HciStatusParam HciLeSetAdvertisingSetRandomAddressReturnParam;
677 
678 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
679 // 7.8.53 LE Set Extended Advertising Parameters Command
680 #define HCI_LE_SET_EXTENDED_ADVERTISING_PARAMETERS MAKE_OPCODE(0x0036, HCI_COMMAND_OGF_LE_CONTROLLER)
681 
682 typedef struct {
683     uint8_t advertisingHandle;
684     uint16_t advertisingEventProperties;
685     uint8_t priAdvertisingIntervalMin[3];
686     uint8_t priAdvertisingIntervalMax[3];
687     uint8_t priAdvertisingChannelMap;
688     uint8_t ownAddressType;
689     uint8_t peerAddressType;
690     uint8_t peerAddress[6];
691     uint8_t advertisingFilterPolicy;
692     uint8_t advertisingTxPower;
693     uint8_t priAdvertisingPHY;
694     uint8_t secondaryAdvertisingMaxSkip;
695     uint8_t secondaryAdvertisingPHY;
696     uint8_t advertisingSID;
697     uint8_t scanRequestNotificationEnable;
698 } HciLeSetExtendedAdvertisingParametersParam;
699 
700 typedef struct {
701     uint8_t status;
702     uint8_t selectedTxPower;
703 } HciLeSetExtendedAdvertisingParametersReturnParam;
704 
705 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
706 // 7.8.54 LE Set Extended Advertising Data Command
707 #define HCI_LE_SET_EXTENDED_ADVERTISING_DATA MAKE_OPCODE(0x0037, HCI_COMMAND_OGF_LE_CONTROLLER)
708 
709 typedef struct {
710     uint8_t advertisingHandle;
711     uint8_t operation;
712     uint8_t fragmentPreference;
713     uint8_t advertisingDataLength;
714     const uint8_t *advertisingData;
715 } HciLeSetExtendedAdvertisingDataParam;
716 
717 typedef HciStatusParam HciLeSetExtendedAdvertisingDataReturnParam;
718 
719 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
720 // 7.8.55 LE Set Extended Scan Response Data Command
721 #define HCI_LE_SET_EXTENDED_SCAN_RESPONSE_DATA MAKE_OPCODE(0x0038, HCI_COMMAND_OGF_LE_CONTROLLER)
722 
723 typedef struct {
724     uint8_t advertisingHandle;
725     uint8_t operation;
726     uint8_t fragmentPreference;
727     uint8_t scanResponseDataLength;
728     const uint8_t *scanResponseData;
729 } HciLeSetExtendedScanResponseDataParam;
730 
731 typedef HciStatusParam HciLeSetExtendedScanResponseDataReturnParam;
732 
733 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
734 // 7.8.56 LE Set Extended Advertising Enable Command
735 #define HCI_LE_SET_EXTENDED_ADVERTISING_ENABLE MAKE_OPCODE(0x0039, HCI_COMMAND_OGF_LE_CONTROLLER)
736 
737 typedef struct {
738     uint8_t adverHandle;
739     uint16_t duration;
740     uint8_t maxExtendAdvertisingEvents;
741 } HciLeExtendedAdvertisingParamSet;
742 
743 typedef struct {
744     uint8_t enable;
745     uint8_t numberofSets;
746     HciLeExtendedAdvertisingParamSet *sets;
747 } HciLeSetExtendedAdvertisingEnableParam;
748 
749 typedef HciStatusParam HciLeSetExtendedAdvertisingEnableReturnParam;
750 
751 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
752 // 7.8.57 LE Read Maximum Advertising Data Length Command
753 #define HCI_LE_READ_MAXIMUM_ADVERTISING_DATA_LENGTH MAKE_OPCODE(0x003A, HCI_COMMAND_OGF_LE_CONTROLLER)
754 
755 typedef struct {
756     uint8_t status;
757     uint16_t maximumAdvertisingDataLength;
758 } HciLeReadMaximumAdvertisingDataLengthReturnParam;
759 
760 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
761 // 7.8.58 LE Read Number of Supported Advertising Sets Command
762 #define HCI_LE_READ_NUMBER_OF_SUPPORTED_ADVERTISING_SETS MAKE_OPCODE(0x003B, HCI_COMMAND_OGF_LE_CONTROLLER)
763 
764 typedef struct {
765     uint8_t status;
766     uint8_t numSupportedAdvertisingSets;
767 } HciLeReadNumberofSupportedAdvertisingSetsReturnParam;
768 
769 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
770 // 7.8.59 LE Remove Advertising Set Command
771 #define HCI_LE_REMOVE_ADVERTISING_SET MAKE_OPCODE(0x003C, HCI_COMMAND_OGF_LE_CONTROLLER)
772 
773 typedef struct {
774     uint8_t advertisingHandle;
775 } HciLeRemoveAdvertisingSetParam;
776 
777 typedef HciStatusParam HciLeRemoveAdvertisingSetReturnParam;
778 
779 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
780 // 7.8.60 LE Clear Advertising Sets Command
781 #define HCI_LE_CLEAR_ADVERTISING_SETS MAKE_OPCODE(0x003D, HCI_COMMAND_OGF_LE_CONTROLLER)
782 
783 typedef HciStatusParam HciLeClearAdvertisingSetsReturnParam;
784 
785 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
786 // 7.8.61 LE Set Periodic Advertising Parameters Command
787 #define HCI_LE_SET_PERIODIC_ADVERTISING_PARAMETERS MAKE_OPCODE(0x003E, HCI_COMMAND_OGF_LE_CONTROLLER)
788 
789 typedef struct {
790     uint8_t advertisingHandle;
791     uint16_t periodicAdvertisingIntervalMin;
792     uint16_t periodicAdvertisingIntervalMax;
793     uint16_t periodicAdvertisingProperties;
794 } HciLeSetPeriodicAdvertisingParametersParam;
795 
796 typedef HciStatusParam HciLeSetPeriodicAdvertisingParametersReturnParameters;
797 
798 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
799 // 7.8.62 LE Set Periodic Advertising Data Command
800 #define HCI_LE_SET_PERIODIC_ADVERTISING_DATA MAKE_OPCODE(0x003F, HCI_COMMAND_OGF_LE_CONTROLLER)
801 
802 typedef struct {
803     uint8_t advertisingHandle;
804     uint8_t operation;
805     uint8_t advertisingDataLength;
806     uint8_t advertisingData;
807 } HciLeSetPeriodicAdvertisingDataParam;
808 
809 typedef HciStatusParam HciLeSetPeriodicAdvertisingDataReturnParameters;
810 
811 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
812 // 7.8.63 LE Set Periodic Advertising Enable Command
813 #define HCI_LE_SET_PERIODIC_ADVERTISING_ENABLE MAKE_OPCODE(0x0040, HCI_COMMAND_OGF_LE_CONTROLLER)
814 
815 typedef struct {
816     uint8_t enable;
817     uint8_t advertisingHandle;
818 } HciLeSetPeriodicAdvertisingEnableParam;
819 
820 typedef HciStatusParam HciLeSetPeriodicAdvertisingEnableReturnParameters;
821 
822 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
823 // 7.8.64 LE Set Extended Scan Parameters Command
824 #define HCI_LE_SET_EXTENDED_SCAN_PARAMETERS MAKE_OPCODE(0x0041, HCI_COMMAND_OGF_LE_CONTROLLER)
825 
826 typedef struct {
827     uint8_t scanType;
828     uint16_t scanInterval;
829     uint16_t scanWindow;
830 } HciLeExtendedScanParametersSet;
831 
832 typedef struct {
833     uint8_t ownAddressType;
834     uint8_t ScanningFilterPolicy;
835     uint8_t ScanningPHYs;
836     HciLeExtendedScanParametersSet *sets;
837 } HciLeSetExtendedScanParametersParam;
838 
839 typedef HciStatusParam HciLeSetExtendedScanParametersReturnParam;
840 
841 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
842 // 7.8.65 LE Set Extended Scan Enable Command
843 #define HCI_LE_SET_EXTENDED_SCAN_ENABLE MAKE_OPCODE(0x0042, HCI_COMMAND_OGF_LE_CONTROLLER)
844 
845 typedef struct {
846     uint8_t enable;
847     uint8_t filterDuplicates;
848     uint16_t duration;
849     uint16_t period;
850 } HciLeSetExtendedScanEnableParam;
851 
852 typedef HciStatusParam HciLeSetExtendedScanEnableReturnParam;
853 
854 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
855 // 7.8.66 LE Extended Create Connection Command
856 #define HCI_LE_EXTENDED_CREATE_CONNECTION MAKE_OPCODE(0x0043, HCI_COMMAND_OGF_LE_CONTROLLER)
857 
858 typedef struct {
859     uint16_t scanInterval;
860     uint16_t scanWindow;
861     uint16_t connIntervalMin;
862     uint16_t connIntervalMax;
863     uint16_t connLatency;
864     uint16_t supervisionTimeout;
865     uint16_t minimumCELength;
866     uint16_t maximumCELength;
867 } HciLeConnectionParamSet;
868 
869 #define LE_1M_PHY 0x01
870 #define LE_2M_PHY 0x02
871 #define LE_CODED_PHY 0x04
872 
873 typedef struct {
874     uint8_t initiatingFilterPolicy;
875     uint8_t ownAddressType;
876     uint8_t peerAddressType;
877     HciBdAddr peerAddress;
878     uint8_t initiatingPhys;
879     HciLeConnectionParamSet *sets;
880 } HciLeExtendedCreateConnectionParam;
881 
882 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
883 // 7.8.68 LE Periodic Advertising Create Sync Cancel Command
884 #define HCI_LE_PERIODIC_ADVERTISING_CREATE_SYNC_CANCEL MAKE_OPCODE(0x0045, HCI_COMMAND_OGF_LE_CONTROLLER)
885 
886 typedef HciStatusParam HciLePeriodicAdvertisingCreateSyncCancelReturnParam;
887 
888 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
889 // 7.8.69 LE Periodic Advertising Terminate Sync Command
890 #define HCI_LE_PERIODIC_ADVERTISING_TERMINATE_SYNC MAKE_OPCODE(0x0046, HCI_COMMAND_OGF_LE_CONTROLLER)
891 
892 typedef struct {
893     uint16_t syncHandle;
894 } HciLePeriodicAdvertisingTerminateSyncParam;
895 
896 typedef HciStatusParam HciLePeriodicAdvertisingTerminateSyncReturnParam;
897 
898 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
899 // 7.8.70 LE Add Device To Periodic Advertiser List Command
900 #define HCI_LE_ADD_DEVICE_TO_PERIODIC_ADVERTISER_LIST MAKE_OPCODE(0x0047, HCI_COMMAND_OGF_LE_CONTROLLER)
901 
902 typedef struct {
903     uint8_t advertiserAddressType;
904     uint8_t advertiserAddress[6];
905     uint8_t advertisingSid;
906 } HciLeAddDeviceToPeriodicAdvertiserListParam;
907 
908 typedef HciStatusParam HciLeAddDeviceToPeriodicAdvertiserListReturnParam;
909 
910 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
911 // 7.8.71 LE Remove Device From Periodic Advertiser List Command
912 #define HCI_LE_REMOVE_DEVICE_FROM_PERIODIC_ADVERTISER_LIST MAKE_OPCODE(0x0048, HCI_COMMAND_OGF_LE_CONTROLLER)
913 
914 typedef struct {
915     uint8_t advertiserAddressType;
916     uint8_t advertiserAddress[6];
917     uint8_t advertisingSid;
918 } HciLeRemoveDeviceFromPeriodicAdvertiserListParam;
919 
920 typedef HciStatusParam HciLeRemoveDeviceFromPeriodicAdvertiserListReturnParam;
921 
922 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
923 // 7.8.72 LE Clear Periodic Advertiser List Command
924 #define HCI_LE_CLEAR_PERIODIC_ADVERTISER_LIST MAKE_OPCODE(0x0049, HCI_COMMAND_OGF_LE_CONTROLLER)
925 
926 typedef HciStatusParam HciLeClearPeriodicAdvertiserListReturnParam;
927 
928 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
929 // 7.8.73 LE Read Periodic Advertiser List Size Command
930 #define HCI_LE_READ_PERIODIC_ADVERTISER_LIST_SIZE MAKE_OPCODE(0x004A, HCI_COMMAND_OGF_LE_CONTROLLER)
931 
932 typedef struct {
933     uint8_t status;
934     uint8_t periodicAdvertiserListSize;
935 } HciLeReadPeriodicAdvertiserListSizeReturnParam;
936 
937 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
938 // 7.8.74 LE Read Transmit Power Command
939 #define HCI_LE_READ_TRANSMIT_POWER MAKE_OPCODE(0x004B, HCI_COMMAND_OGF_LE_CONTROLLER)
940 
941 typedef struct {
942     uint8_t status;
943     uint8_t minTxPower;
944     uint8_t maxTxPower;
945 } HciLeReadTransmitPowerReturnParam;
946 
947 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
948 // 7.8.75 LE Read RF Path Compensation Command
949 #define HCI_LE_READ_RF_PATH_COMPENSATION MAKE_OPCODE(0x004C, HCI_COMMAND_OGF_LE_CONTROLLER)
950 
951 typedef struct {
952     uint8_t status;
953     uint16_t rfTxPathCompensationValue;
954     uint16_t rfRxPathCompensationValue;
955 } HciLeReadRfPathCompensationReturnParam;
956 
957 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
958 // 7.8.76 LE Write RF Path Compensation Command
959 #define HCI_LE_WRITE_RF_PATH_COMPENSATION MAKE_OPCODE(0x004D, HCI_COMMAND_OGF_LE_CONTROLLER)
960 
961 typedef struct {
962     uint16_t rfTxPathCompensationValue;
963     uint16_t rfRxPathCompensationValue;
964 } HciLeWriteRfPathCompensationParam;
965 
966 typedef HciStatusParam HciLeWriteRfPathCompensationReturnParam;
967 
968 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
969 // 7.8.77 LE Set Privacy Mode Command
970 #define HCI_LE_SET_PRIVACY_MODE MAKE_OPCODE(0x004E, HCI_COMMAND_OGF_LE_CONTROLLER)
971 
972 #define HCI_NETWORK_PRIVACY_MODE 0x00
973 #define HCI_DEVICE_PRIVACY_MODE 0x01
974 
975 typedef struct {
976     uint8_t peerIdentityAddressType;
977     HciBdAddr peerIdentityAddress;
978     uint8_t privacyMode;
979 } HciLeSetPrivacyModeParam;
980 
981 typedef HciStatusParam HciLeSetPrivacyModeReturnParam;
982 
983 #pragma pack(0)
984 
985 #ifdef __cplusplus
986 }
987 #endif
988 
989 #endif