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_LINK_CTRL_CMD_H
17 #define HCI_DEF_LINK_CTRL_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.1 LINK CONTROL COMMANDS
31 #define HCI_COMMAND_OGF_LINK_CONTROL 0x01
32 
33 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
34 // 7.1.1 Inquiry Command
35 #define HCI_INQUIRY MAKE_OPCODE(0x0001, HCI_COMMAND_OGF_LINK_CONTROL)
36 
37 typedef struct {
38     uint32_t lap : 24;
39     uint8_t inquiryLen;
40     uint8_t numResponses;
41 } HciInquiryeParam;
42 
43 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
44 // 7.1.2 Inquiry Cancel Command
45 #define HCI_INQUIRY_CANCEL MAKE_OPCODE(0x0002, HCI_COMMAND_OGF_LINK_CONTROL)
46 
47 typedef HciStatusParam HciInquiryCancelReturnParam;
48 
49 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
50 // 7.1.3 Periodic Inquiry Mode Command
51 #define HCI_PERIODIC_INQUIRY_MODE MAKE_OPCODE(0x0003, HCI_COMMAND_OGF_LINK_CONTROL)
52 
53 typedef struct {
54     uint16_t maxPeriodLength;
55     uint16_t minPeriodLength;
56     uint32_t lap : 24;
57     uint8_t inquiryLength;
58     uint8_t numResponses;
59 } HciPeriodicInquiryModeParam;
60 
61 typedef HciStatusParam HciPeriodicInquiryModeReturnParam;
62 
63 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
64 // 7.1.4 Exit Periodic Inquiry Mode Command
65 #define HCI_EXIT_PERIODIC_INQUIRY_MODE MAKE_OPCODE(0x0004, HCI_COMMAND_OGF_LINK_CONTROL)
66 
67 typedef HciStatusParam HciExitPeriodicInquiryModeReturnParam;
68 
69 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
70 // 7.1.5 Create Connection Command
71 #define HCI_CREATE_CONNECTION MAKE_OPCODE(0x0005, HCI_COMMAND_OGF_LINK_CONTROL)
72 
73 #define HCI_PACKET_TYPE_NO_2_DH1 0x0002
74 #define HCI_PACKET_TYPE_NO_3_DH1 0x0004
75 #define HCI_PACKET_TYPE_DM1 0x0008
76 #define HCI_PACKET_TYPE_DH1 0x0010
77 #define HCI_PACKET_TYPE_NO_2_DH3 0x0100
78 #define HCI_PACKET_TYPE_NO_3_DH3 0x0200
79 #define HCI_PACKET_TYPE_DM3 0x0400
80 #define HCI_PACKET_TYPE_DH3 0x0800
81 #define HCI_PACKET_TYPE_NO_2_DH5 0x1000
82 #define HCI_PACKET_TYPE_NO_3_HD5 0x2000
83 #define HCI_PACKET_TYPE_DM5 0x4000
84 #define HCI_PACKET_TYPE_DH5 0x8000
85 
86 #define HCI_PAGE_SCAN_REPETITION_MODE_R0 0x00
87 #define HCI_PAGE_SCAN_REPETITION_MODE_R1 0x01
88 #define HCI_PAGE_SCAN_REPETITION_MODE_R2 0x02
89 
90 #define HCI_NOT_ALLOW_ROLE_SWITCH 0x00
91 #define HCI_ALLOW_ROLE_SWITCH 0x01
92 
93 typedef struct {
94     HciBdAddr bdAddr;
95     uint16_t packetType;
96     uint8_t pageScanRepetitionMode;
97     uint8_t reserved;
98     uint16_t clockOffset;
99     uint8_t allowRoleSwitch;
100 } HciCreateConnectionParam;
101 
102 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
103 // 7.1.6 Disconnect Command
104 #define HCI_DISCONNECT MAKE_OPCODE(0x0006, HCI_COMMAND_OGF_LINK_CONTROL)
105 
106 typedef struct {
107     uint16_t connectionHandle;
108     uint8_t reason;
109 } HciDisconnectParam;
110 
111 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
112 // 7.1.7 Create Connection Cancel Command
113 #define HCI_CREATE_CONNECTION_CANCEL MAKE_OPCODE(0x0008, HCI_COMMAND_OGF_LINK_CONTROL)
114 
115 typedef struct {
116     HciBdAddr bdAddr;
117 } HciCreateConnectionCancelParam;
118 
119 typedef struct {
120     uint8_t status;
121     HciBdAddr bdAddr;
122 } HciCreateConnectionCancelReturnParam;
123 
124 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
125 // 7.1.8 Accept Connection Request Command
126 #define HCI_ACCEPT_CONNECTION_REQUEST MAKE_OPCODE(0x0009, HCI_COMMAND_OGF_LINK_CONTROL)
127 
128 #define HCI_ROLE_MASTER 0x00
129 #define HCI_ROLE_SLAVE 0x01
130 
131 typedef struct {
132     HciBdAddr bdAddr;
133     uint8_t role;
134 } HciAcceptConnectionReqestParam;
135 
136 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
137 // 7.1.9 Reject Connection Request Command
138 #define HCI_REJECT_CONNECTION_REQUEST MAKE_OPCODE(0x000A, HCI_COMMAND_OGF_LINK_CONTROL)
139 
140 typedef struct {
141     HciBdAddr bdAddr;
142     uint8_t reason;
143 } HciRejectConnectionRequestParam;
144 
145 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
146 // 7.1.10 Link Key Request Reply Command
147 #define HCI_LINK_KEY_REQUEST_REPLY MAKE_OPCODE(0x000B, HCI_COMMAND_OGF_LINK_CONTROL)
148 
149 typedef struct {
150     HciBdAddr bdAddr;
151     uint8_t linkKey[16];
152 } HciLinkKeyRequestReplyParam;
153 
154 typedef struct {
155     uint8_t status;
156     HciBdAddr bdAddr;
157 } HciLinkKeyRequestReplyReturnParam;
158 
159 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
160 // 7.1.11 Link Key Request Negative Reply Command
161 #define HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x000C, HCI_COMMAND_OGF_LINK_CONTROL)
162 
163 typedef struct {
164     HciBdAddr bdAddr;
165 } HciLinkKeyRequestNegativeReplyParam;
166 
167 typedef struct {
168     uint8_t status;
169     HciBdAddr bdAddr;
170 } HciLinkKeyRequestNegativeReplyReturnParam;
171 
172 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
173 // 7.1.12 PIN Code Request Reply Command
174 #define HCI_PIN_CODE_REQUEST_REPLY MAKE_OPCODE(0x000D, HCI_COMMAND_OGF_LINK_CONTROL)
175 
176 typedef struct {
177     HciBdAddr bdAddr;
178     uint8_t pinCodeLength;
179     uint8_t pinCode[16];
180 } HciPinCodeRequestReplyParam;
181 
182 typedef struct {
183     uint8_t status;
184     HciBdAddr bdAddr;
185 } HciPinCodeRequestReplyReturnParam;
186 
187 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
188 // 7.1.13 PIN Code Request Negative Reply Command
189 #define HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x000E, HCI_COMMAND_OGF_LINK_CONTROL)
190 
191 typedef struct {
192     HciBdAddr bdAddr;
193 } HciPinCodeRequestNegativeReplyParam;
194 
195 typedef struct {
196     uint8_t status;
197     HciBdAddr bdAddr;
198 } HciPinCodeRequestNegativeReplyReturnParam;
199 
200 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
201 // 7.1.14 Change Connection Packet Type Command
202 #define HCI_CHANGE_CONNECTION_PACKET_TYPE MAKE_OPCODE(0x000F, HCI_COMMAND_OGF_LINK_CONTROL)
203 
204 typedef struct {
205     uint16_t connectionHandle;
206     uint16_t packetType;
207 } HciChangeConnectionPacketTypeParam;
208 
209 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
210 // 7.1.15 Authentication Requested Command
211 #define HCI_AUTHENTICATION_REQUESTED MAKE_OPCODE(0x0011, HCI_COMMAND_OGF_LINK_CONTROL)
212 
213 typedef struct {
214     uint16_t connectionHandle;
215 } HciAuthenticationRequestedParam;
216 
217 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
218 // 7.1.16 Set Connection Encryption Command
219 #define HCI_SET_CONNECTION_ENCRYPTION MAKE_OPCODE(0x0013, HCI_COMMAND_OGF_LINK_CONTROL)
220 
221 #define LINK_LEVEL_ENCRYPTION_OFF 0x00
222 #define LINK_LEVEL_ENCRYPTION_ON 0x01
223 
224 typedef struct {
225     uint16_t connectionHandle;
226     uint8_t encryptionEnable;
227 } HciSetConnectionEncryptionParam;
228 
229 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
230 // 7.1.17 Change Connection Link Key Command
231 #define HCI_CHANGE_CONNECTION_LINK_KEY MAKE_OPCODE(0x0015, HCI_COMMAND_OGF_LINK_CONTROL)
232 
233 typedef struct {
234     uint16_t connectionHandle;
235 } HciChangeConnectionLinkKeyParam;
236 
237 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
238 // 7.1.18 Master Link Key Command
239 #define HCI_MASTER_LINK_KEY MAKE_OPCODE(0x0017, HCI_COMMAND_OGF_LINK_CONTROL)
240 
241 typedef struct {
242     uint8_t keyFlag;
243 } HciMasterLinkKeyParam;
244 
245 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
246 // 7.1.19 Remote Name Request Command
247 #define HCI_REMOTE_NAME_REQUEST MAKE_OPCODE(0x0019, HCI_COMMAND_OGF_LINK_CONTROL)
248 
249 typedef struct {
250     HciBdAddr addr;
251     uint8_t pageScanRepetMode;
252     uint8_t reserved;
253     uint16_t clockOffset;
254 } HciRemoteNameRequestParam;
255 
256 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
257 // 7.1.20 Remote Name Request Cancel Command
258 #define HCI_REMOTE_NAME_REQUEST_CANCEL MAKE_OPCODE(0x001A, HCI_COMMAND_OGF_LINK_CONTROL)
259 
260 typedef struct {
261     HciBdAddr addr;
262 } HciRemoteNameRequestCancelParam;
263 
264 typedef struct {
265     uint8_t status;
266     HciBdAddr addr;
267 } HciRemoteNameRequestCancelReturnParam;
268 
269 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
270 // 7.1.21 Read Remote Supported Features Command
271 #define HCI_READ_REMOTE_SUPPORTED_FEATURES MAKE_OPCODE(0x001B, HCI_COMMAND_OGF_LINK_CONTROL)
272 
273 typedef struct {
274     uint16_t connectionHandle;
275 } HciReadRemoteSupportedFeaturesParam;
276 
277 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
278 // 7.1.22 Read Remote Extended Features Command
279 #define HCI_READ_REMOTE_EXTENDED_FEATURES MAKE_OPCODE(0x001C, HCI_COMMAND_OGF_LINK_CONTROL)
280 
281 typedef struct {
282     uint16_t connectionHandle;
283     uint8_t pageNumber;
284 } HciReadRemoteExtendedFeaturesParam;
285 
286 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
287 // 7.1.23 Read Remote Version Information Command
288 #define HCI_READ_REMOTE_VERSION_INFORMATION MAKE_OPCODE(0x001D, HCI_COMMAND_OGF_LINK_CONTROL)
289 
290 typedef struct {
291     uint16_t connectionHandle;
292 } HciReadRemoteVersionInformationParam;
293 
294 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
295 // 7.1.24 Read Clock Offset Command
296 #define HCI_READ_CLOCK_OFFSET MAKE_OPCODE(0x001F, HCI_COMMAND_OGF_LINK_CONTROL)
297 
298 typedef struct {
299     uint16_t connectionHandle;
300 } HciReadClockOffsetParam;
301 
302 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
303 // 7.1.25 Read LMP Handle Command
304 #define HCI_READ_LMP_HANDLE MAKE_OPCODE(0x0020, HCI_COMMAND_OGF_LINK_CONTROL)
305 
306 typedef struct {
307     uint16_t connectionHandle;
308 } HciReadLmpHandleParam;
309 
310 typedef struct {
311     uint8_t status;
312     uint16_t connectionHandle;
313     uint8_t lmpHandle;
314     uint32_t reserved;
315 } HciReadLmpHandleReturnParam;
316 
317 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
318 // 7.1.26 Setup Synchronous Connection Command
319 #define HCI_SETUP_SYNCHRONOUS_CONNECTION MAKE_OPCODE(0x0028, HCI_COMMAND_OGF_LINK_CONTROL)
320 
321 typedef struct {
322     uint16_t connectionHandle;
323     uint32_t transmitBandwidth;
324     uint32_t receiveBandwidth;
325     uint16_t maxLatency;
326     uint16_t voiceSetting;
327     uint8_t retransmissionEffort;
328     uint16_t packetType;
329 } HciSetupSynchronousConnectionParam;
330 
331 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
332 // 7.1.27 Accept Synchronous Connection Request Command
333 #define HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST MAKE_OPCODE(0x0029, HCI_COMMAND_OGF_LINK_CONTROL)
334 
335 typedef struct {
336     HciBdAddr addr;
337     uint32_t transmitBandwidth;
338     uint32_t receiveBandwidth;
339     uint16_t maxLatency;
340     uint16_t voiceSetting;
341     uint8_t retransmissionEffort;
342     uint16_t packetType;
343 } HciAcceptSynchronousConnectionRequestParam;
344 
345 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
346 // 7.1.28 Reject Synchronous Connection Request Command
347 #define HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST MAKE_OPCODE(0x002A, HCI_COMMAND_OGF_LINK_CONTROL)
348 
349 typedef struct {
350     HciBdAddr bdAddr;
351     uint8_t reason;
352 } HciRejectSynchronousConnectionRequestParam;
353 
354 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
355 // 7.1.29 IO Capability Request Reply Command
356 #define HCI_IO_CAPABILITY_REQUEST_REPLY MAKE_OPCODE(0x002B, HCI_COMMAND_OGF_LINK_CONTROL)
357 
358 #define IO_CAPABILITY_DISPLAY_ONLY 0x00
359 #define IO_CAPABILITY_DISPLAY_YES_NO 0x01
360 #define IO_CAPABILITY_KEYBOARD_ONLY 0x02
361 #define IO_CAPABILITY_NO_INPUT_NO_OUTPUT 0x03
362 
363 #define OOB_DATA_NOT_PRESENT 0x00
364 #define OOB_DATA_P_192 0x01
365 #define OOB_DATA_P_256 0x02
366 #define OOB_DATA_P_192_AND_P_256 0x03
367 
368 #define AUTHENTICATION_NO_MITM_NO_BONDING 0x00
369 #define AUTHENTICATION_MITM_NO_BONDING 0x01
370 #define AUTHENTICATION_NO_MITM_DEDICATED_BONDING 0x02
371 #define AUTHENTICATION_MITM_DEDICATED_BONDING 0x03
372 #define AUTHENTICATION_NO_MITM_GENERAL_BONDING 0x04
373 #define AUTHENTICATION_MITM_GENERAL_BONDING 0x05
374 
375 typedef struct {
376     HciBdAddr bdAddr;
377     uint8_t ioCapability;
378     uint8_t oobDataPresent;
379     uint8_t authenticationRequirements;
380 } HciIOCapabilityRequestReplyParam;
381 
382 typedef struct {
383     uint8_t status;
384     HciBdAddr bdAddr;
385 } HciIOCapabilityRequestReplyReturnParam;
386 
387 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
388 // 7.1.30 User Confirmation Request Reply Command
389 #define HCI_USER_CONFIRMATION_REQUEST_REPLY MAKE_OPCODE(0x002C, HCI_COMMAND_OGF_LINK_CONTROL)
390 
391 typedef struct {
392     HciBdAddr bdAddr;
393 } HciUserConfirmationRequestReplyParam;
394 
395 typedef struct {
396     uint8_t status;
397     HciBdAddr bdAddr;
398 } HciUserConfirmationRequestReplyReturnParam;
399 
400 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
401 // 7.1.31 User Confirmation Request Negative Reply Command
402 #define HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x002D, HCI_COMMAND_OGF_LINK_CONTROL)
403 
404 typedef struct {
405     HciBdAddr bdAddr;
406 } HciUserConfirmationRequestNegativeReplyParam;
407 
408 typedef struct {
409     uint8_t status;
410     HciBdAddr bdAddr;
411 } HciUserConfirmationRequestNegativeReplyReturnParam;
412 
413 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
414 // 7.1.32 User Passkey Request Reply Command
415 #define HCI_USER_PASSKEY_REQUEST_REPLY MAKE_OPCODE(0x002E, HCI_COMMAND_OGF_LINK_CONTROL)
416 
417 typedef struct {
418     HciBdAddr bdAddr;
419     uint32_t numericValue;
420 } HciUserPasskeyRequestReplyParam;
421 
422 typedef struct {
423     uint8_t status;
424     HciBdAddr bdAddr;
425 } HciUserPasskeyRequestReplyReturnParam;
426 
427 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
428 // 7.1.33 User Passkey Request Negative Reply Command
429 #define HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x002F, HCI_COMMAND_OGF_LINK_CONTROL)
430 
431 typedef struct {
432     HciBdAddr bdAddr;
433 } HciUserPasskeyRequestNegativeReplyParam;
434 
435 typedef struct {
436     uint8_t status;
437     HciBdAddr bdAddr;
438 } HciUserPasskeyRequestNegativeReplyReturnParam;
439 
440 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
441 // 7.1.34 Remote OOB Data Request Reply Command
442 #define HCI_REMOTE_OOB_DATA_REQUEST_REPLY MAKE_OPCODE(0x0030, HCI_COMMAND_OGF_LINK_CONTROL)
443 
444 typedef struct {
445     HciBdAddr bdAddr;
446     uint8_t C[16];
447     uint8_t r[16];
448 } HciRemoteOobDataRequestReplyParam;
449 
450 typedef struct {
451     uint8_t status;
452     HciBdAddr bdAddr;
453 } HciRemoteOobDataRequestReplyReturnParam;
454 
455 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
456 // 7.1.35 Remote OOB Data Request Negative Reply Command
457 #define HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x0033, HCI_COMMAND_OGF_LINK_CONTROL)
458 
459 typedef struct {
460     HciBdAddr bdAddr;
461 } HciRemoteOobDataRequestNegativeReplyParam;
462 
463 typedef struct {
464     uint8_t status;
465     HciBdAddr bdAddr;
466 } HciRemoteOobDataRequestNegativeReplyReturnParam;
467 
468 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
469 // 7.1.36 IO Capability Request Negative Reply Command
470 #define HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY MAKE_OPCODE(0x0034, HCI_COMMAND_OGF_LINK_CONTROL)
471 
472 typedef struct {
473     HciBdAddr bdAddr;
474     uint8_t reason;
475 } HciIoCapabilityRequestNegativeReplyParam;
476 
477 typedef struct {
478     uint8_t status;
479     HciBdAddr bdAddr;
480 } HciIoCapabilityRequestNegativeReplyReturnParam;
481 
482 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
483 // 7.1.37 Create Physical Link Command
484 #define HCI_CREATE_PHYSICAL_LINK MAKE_OPCODE(0x0035, HCI_COMMAND_OGF_LINK_CONTROL)
485 
486 typedef struct {
487     uint8_t physicalLinkHandle;
488     uint8_t dedicatedAMPKeyLength;
489     uint8_t dedicatedAMPKeyType;
490     uint8_t *dedicatedAMPKey;
491 } HciCreatePhysicalLinkParam;
492 
493 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
494 // 7.1.38 Accept Physical Link Command
495 #define HCI_ACCEPT_PHYSICAL_LINK MAKE_OPCODE(0x0036, HCI_COMMAND_OGF_LINK_CONTROL)
496 
497 typedef struct {
498     uint8_t physicalLinkHandle;
499     uint8_t dedicatedAmpKeyLength;
500     uint8_t dedicatedAmpKeyType;
501     uint8_t *dedicatedAmpKey;
502 } HciAcceptPhysicalLinkParam;
503 
504 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
505 // 7.1.39 Disconnect Physical Link Command
506 #define HCI_DISCONNECT_PHYSICAL_LINK MAKE_OPCODE(0x0037, HCI_COMMAND_OGF_LINK_CONTROL)
507 
508 typedef struct {
509     uint8_t physicalLinkHandle;
510     uint8_t reason;
511 } HciDisconnectPhysicalLinkParam;
512 
513 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
514 // 7.1.40 Create Logical Link Command
515 #define HCI_CREATE_LOGICAL_LINK MAKE_OPCODE(0x0038, HCI_COMMAND_OGF_LINK_CONTROL)
516 
517 typedef struct {
518     uint8_t physicalLinkHandle;
519     uint8_t txFlowSpec[16];
520     uint8_t rxFlowSpec[16];
521 } HciCreateLogicalLinkParam;
522 
523 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
524 // 7.1.41 Accept Logical Link Command
525 #define HCI_ACCEPT_LOGICAL_LINK MAKE_OPCODE(0x0039, HCI_COMMAND_OGF_LINK_CONTROL)
526 
527 typedef struct {
528     uint8_t physicalLinkHandle;
529     uint8_t txFlowSpec[16];
530     uint8_t rxFlowSpec[16];
531 } HciAcceptLogicalLinkParam;
532 
533 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
534 // 7.1.42 Disconnect Logical Link Command
535 #define HCI_DISCONNECT_LOGICAL_LINK MAKE_OPCODE(0x003A, HCI_COMMAND_OGF_LINK_CONTROL)
536 
537 typedef struct {
538     uint16_t logicalLinkHandle;
539 } HciDisconnectLogicalLinkParam;
540 
541 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
542 // 7.1.43 Logical Link Cancel Command
543 #define HCI_LOGICAL_LINK_CANCEL MAKE_OPCODE(0x003B, HCI_COMMAND_OGF_LINK_CONTROL)
544 
545 typedef struct {
546     uint8_t physicalLinkHandle;
547     uint8_t txFlowSpecID;
548 } HciLogicalLinkCancelParam;
549 
550 typedef struct {
551     uint8_t status;
552     uint8_t physicalLinkHandle;
553     uint8_t txFlowSpecID;
554 } HciLogicalLinkCancelReturnParam;
555 
556 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
557 // 7.1.44 Flow Spec Modify Command
558 #define HCI_FLOW_SPEC_MODIFY MAKE_OPCODE(0x003C, HCI_COMMAND_OGF_LINK_CONTROL)
559 
560 typedef struct {
561     uint16_t handle;
562     uint8_t txFlowSpec[16];
563     uint8_t rxFlowSpec[16];
564 } HciFlowSpecModifyParam;
565 
566 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
567 // 7.1.45 Enhanced Setup Synchronous Connection Command
568 #define HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION MAKE_OPCODE(0x003D, HCI_COMMAND_OGF_LINK_CONTROL)
569 
570 typedef struct {
571     uint8_t codingFormat;
572     uint16_t companyID;
573     uint16_t vendorSpecificCodecID;
574 } HciCodeingFormat;
575 
576 #define HCI_CODING_FORMAT_U_LAW_LOG 0x00
577 #define HCI_CODING_FORMAT_A_LAW_LOG 0x01
578 #define HCI_CODING_FORMAT_CVSD 0x02
579 #define HCI_CODING_FORMAT_TRANSPNT 0x03
580 #define HCI_CODING_FORMAT_LINEAR_PCM 0x04
581 #define HCI_CODING_FORMAT_MSBC 0x05
582 #define HCI_CODING_FORMAT_VENDOR_SPECIFIC 0xFF
583 
584 #define HCI_PCM_DATA_FORMAT_NA 0x00
585 #define HCI_PCM_DATA_FORMAT_1_COMPLEMENT 0x01
586 #define HCI_PCM_DATA_FORMAT_2_COMPLEMENT 0x02
587 #define HCI_PCM_DATA_FORMAT_SIGN_MAGNITUDE 0x03
588 #define HCI_PCM_DATA_FORMAT_UNSIGNED 0x04
589 
590 typedef struct {
591     uint16_t connectionHandle;
592     uint32_t transmitBandwidth;
593     uint32_t receiveBandwidth;
594     HciCodeingFormat transmitCodingFormat;
595     HciCodeingFormat receiveCodingFormat;
596     uint16_t transmitCodecFrameSize;
597     uint16_t receiveCodecFrameSize;
598     uint32_t inputBandwidth;
599     uint32_t outputBandwidth;
600     HciCodeingFormat inputCodingFormat;
601     HciCodeingFormat outputCodingFormat;
602     uint16_t inputCodedDataSize;
603     uint16_t outputCodedDataSize;
604     uint8_t inputPCMDataFormat;
605     uint8_t outputPCMDataFormat;
606     uint8_t inputPCMSamplePayloadMSBPosition;
607     uint8_t outputPCMSamplePaylandMSBPosition;
608     uint8_t inputDataPath;
609     uint8_t outputDataPath;
610     uint8_t inputTransportUnitSize;
611     uint8_t outputTransportUnitSize;
612     uint16_t maxLatency;
613     uint16_t packetType;
614     uint8_t retransmissionEffort;
615 } HciEnhancedSetupSynchronousConnectionParam;
616 
617 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
618 // 7.1.46 Enhanced Accept Synchronous Connection Request Command
619 #define HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST MAKE_OPCODE(0x003E, HCI_COMMAND_OGF_LINK_CONTROL)
620 
621 typedef struct {
622     HciBdAddr bdAddr;
623     uint32_t transmitBandwidth;
624     uint32_t receiveBandwidth;
625     HciCodeingFormat transmitCodingFormat;
626     HciCodeingFormat receiveCodingFormat;
627     uint16_t transmitCodecFrameSize;
628     uint16_t receiveCodecFrameSize;
629     uint32_t inputBandwidth;
630     uint32_t outputBandwidth;
631     HciCodeingFormat inputCodingFormat;
632     HciCodeingFormat outputCodingFormat;
633     uint16_t inputCodedDataSize;
634     uint16_t outputCodedDataSize;
635     uint8_t inputPCMDataFormat;
636     uint8_t outputPCMDataFormat;
637     uint8_t inputPCMSamplePayloadMSBPosition;
638     uint8_t outputPCMSamplePaylandMSBPosition;
639     uint8_t inputDataPath;
640     uint8_t outputDataPath;
641     uint8_t inputTransportUnitSize;
642     uint8_t outputTransportUnitSize;
643     uint16_t maxLatency;
644     uint16_t packetType;
645     uint8_t retransmissionEffort;
646 } HciEnhancedAcceptSynchronousConnectionRequestParam;
647 
648 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
649 // 7.1.47 Truncated Page Command
650 #define HCI_TRUNCATED_PAGE MAKE_OPCODE(0x003F, HCI_COMMAND_OGF_LINK_CONTROL)
651 
652 typedef struct {
653     HciBdAddr bdAddr;
654     uint8_t pageScanRepetitionMode;
655     uint16_t clockOffset;
656 } HciTruncatedPageParam;
657 
658 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
659 // 7.1.48 Truncated Page Cancel Command
660 #define HCI_TRUNCATED_PAGE_CANCEL MAKE_OPCODE(0x0040, HCI_COMMAND_OGF_LINK_CONTROL)
661 
662 typedef struct {
663     HciBdAddr bdAddr;
664 } HciTruncatedPageCancelParam;
665 
666 typedef struct {
667     uint8_t status;
668     HciBdAddr bdAddr;
669 } HciTruncatedPageCancelReturnParam;
670 
671 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
672 // 7.1.49 Set Connectionless Slave Broadcast Command
673 #define HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST MAKE_OPCODE(0x0041, HCI_COMMAND_OGF_LINK_CONTROL)
674 
675 typedef struct {
676     uint8_t enable;
677     uint8_t ltAddr;
678     uint8_t lpoAllowed;
679     uint16_t packetType;
680     uint16_t intervalMin;
681     uint16_t intervalMax;
682     uint16_t csbSupervisionTo;
683 } HciSetConnectionlessSlaveBroadcastParam;
684 
685 typedef struct {
686     uint8_t status;
687     uint8_t ltAddr;
688     uint16_t interval;
689 } HciSetConnectionlessSlaveBroadcastReturnParam;
690 
691 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
692 // 7.1.50 Set Connectionless Slave Broadcast Receive Command
693 #define HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST_RECEIVE MAKE_OPCODE(0x0042, HCI_COMMAND_OGF_LINK_CONTROL)
694 
695 typedef struct {
696     uint8_t enable;
697     HciBdAddr bdAddr;
698     uint8_t ltAddr;
699     uint16_t interval;
700     uint32_t clockOffset;
701     uint32_t nextConnectionlessSlaveBroadcastClock;
702     uint16_t csbSupervisionTo;
703     uint8_t remoteTimingAccuracy;
704     uint8_t skip;
705     uint16_t packetType;
706     uint8_t afhChannelMap[10];
707 } HciSetConnectionlessSlaveBroadcastReceiveParam;
708 
709 typedef struct {
710     uint8_t status;
711     HciBdAddr bdAddr;
712     uint8_t ltAddr;
713 } HciSetConnectionlessSlaveBroadcastReceiveReturnParam;
714 
715 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
716 // 7.1.51 Start Synchronization Train Command
717 #define HCI_START_SYNCHRONIZATION_TRAIN MAKE_OPCODE(0x0043, HCI_COMMAND_OGF_LINK_CONTROL)
718 
719 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
720 // 7.1.52 Receive Synchronization Train Command
721 #define HCI_RECEIVE_SYNCHRONIZATION_TRAIN MAKE_OPCODE(0x0044, HCI_COMMAND_OGF_LINK_CONTROL)
722 
723 typedef struct {
724     HciBdAddr bdAddr;
725     uint16_t synchronizationscanTO;
726     uint16_t syncScanWindow;
727     uint16_t syncScanInterval;
728 } HciReceiveSynchronizationTrainParam;
729 
730 // BLUETOOTH SPECIFICATION Version 5.0 | Vol 2, Part E
731 // 7.1.53 Remote OOB Extended Data Request Reply Command
732 #define HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY MAKE_OPCODE(0x0045, HCI_COMMAND_OGF_LINK_CONTROL)
733 
734 typedef struct {
735     HciBdAddr bdAddr;
736     uint8_t c192[16];
737     uint8_t r192[16];
738     uint8_t c256[16];
739     uint8_t r256[16];
740 } HciRemoteOobExtendedDataRequestReplyParam;
741 
742 typedef struct {
743     uint8_t status;
744     HciBdAddr bdAddr;
745 } HciRemoteOobExtendedDataRequestReplyReturnParam;
746 
747 #pragma pack(0)
748 
749 #ifdef __cplusplus
750 }
751 #endif
752 
753 #endif