forked from NetBSD/src
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhci.h
2620 lines (2218 loc) · 88.2 KB
/
hci.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* $NetBSD: hci.h,v 1.45 2018/07/25 19:09:38 kamil Exp $ */
/*-
* Copyright (c) 2005 Iain Hibbert.
* Copyright (c) 2006 Itronix Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of Itronix Inc. may not be used to endorse
* or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ITRONIX INC. ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ITRONIX INC. BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*-
* Copyright (c) 2001 Maksim Yevmenkin <[email protected]>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: hci.h,v 1.45 2018/07/25 19:09:38 kamil Exp $
* $FreeBSD: src/sys/netgraph/bluetooth/include/ng_hci.h,v 1.6 2005/01/07 01:45:43 imp Exp $
*/
/*
* This file contains everything that applications need to know from
* Host Controller Interface (HCI). Information taken from Bluetooth
* Core Specifications (v1.1, v2.0, v2.1 + EDR, v3.0 + HS,
* v4.0 and v4.2)
*
* This file can be included by both kernel and userland applications.
*
* NOTE: Here and after Bluetooth device is called a "unit". Bluetooth
* specification refers to both devices and units. They are the
* same thing (I think), so to be consistent word "unit" will be
* used.
*/
#ifndef _NETBT_HCI_H_
#define _NETBT_HCI_H_
#include <netbt/bluetooth.h>
#include <sys/ioccom.h>
/**************************************************************************
**************************************************************************
** Common defines and types (HCI)
**************************************************************************
**************************************************************************/
#define HCI_LAP_SIZE 3 /* unit LAP */
#define HCI_KEY_SIZE 16 /* link key */
#define HCI_PIN_SIZE 16 /* link PIN */
#define HCI_EVENT_MASK_SIZE 8 /* event mask */
#define HCI_CLASS_SIZE 3 /* unit class */
#define HCI_FEATURES_SIZE 8 /* LMP features */
#define HCI_UNIT_NAME_SIZE 248 /* unit name size */
#define HCI_DEVNAME_SIZE 16 /* same as dv_xname */
#define HCI_COMMANDS_SIZE 64 /* supported commands mask */
/* HCI specification */
#define HCI_SPEC_V10 0x00 /* v1.0b */
#define HCI_SPEC_V11 0x01 /* v1.1 */
#define HCI_SPEC_V12 0x02 /* v1.2 */
#define HCI_SPEC_V20 0x03 /* v2.0 + EDR */
#define HCI_SPEC_V21 0x04 /* v2.1 + EDR */
#define HCI_SPEC_V30 0x05 /* v3.0 + HS */
#define HCI_SPEC_V40 0x06 /* v4.0 */
#define HCI_SPEC_V41 0x07 /* v4.1 */
#define HCI_SPEC_V42 0x08 /* v4.2 */
#define HCI_SPEC_V50 0x09 /* v5.0 */
/* 0x0A - 0xFF - reserved for future use */
/* LMP features (and page 0 of extended features) */
/* ------------------- byte 0 --------------------*/
#define HCI_LMP_3SLOT 0x01
#define HCI_LMP_5SLOT 0x02
#define HCI_LMP_ENCRYPTION 0x04
#define HCI_LMP_SLOT_OFFSET 0x08
#define HCI_LMP_TIMIACCURACY 0x10
#define HCI_LMP_ROLE_SWITCH 0x20
#define HCI_LMP_HOLD_MODE 0x40
#define HCI_LMP_SNIFF_MODE 0x80
/* ------------------- byte 1 --------------------*/
#define HCI_LMP_PARK_MODE 0x01
#define HCI_LMP_RSSI 0x02
#define HCI_LMP_CHANNEL_QUALITY 0x04
#define HCI_LMP_SCO_LINK 0x08
#define HCI_LMP_HV2_PKT 0x10
#define HCI_LMP_HV3_PKT 0x20
#define HCI_LMP_ULAW_LOG 0x40
#define HCI_LMP_ALAW_LOG 0x80
/* ------------------- byte 2 --------------------*/
#define HCI_LMP_CVSD 0x01
#define HCI_LMP_PAGISCHEME 0x02
#define HCI_LMP_POWER_CONTROL 0x04
#define HCI_LMP_TRANSPARENT_SCO 0x08
#define HCI_LMP_FLOW_CONTROL_LAG0 0x10
#define HCI_LMP_FLOW_CONTROL_LAG1 0x20
#define HCI_LMP_FLOW_CONTROL_LAG2 0x40
#define HCI_LMP_BC_ENCRYPTION 0x80
/* ------------------- byte 3 --------------------*/
/* reserved 0x01 */
#define HCI_LMP_EDR_ACL_2MBPS 0x02
#define HCI_LMP_EDR_ACL_3MBPS 0x04
#define HCI_LMP_ENHANCED_ISCAN 0x08
#define HCI_LMP_INTERLACED_ISCAN 0x10
#define HCI_LMP_INTERLACED_PSCAN 0x20
#define HCI_LMP_RSSI_INQUIRY 0x40
#define HCI_LMP_EV3_PKT 0x80
/* ------------------- byte 4 --------------------*/
#define HCI_LMP_EV4_PKT 0x01
#define HCI_LMP_EV5_PKT 0x02
/* reserved 0x04 */
#define HCI_LMP_AFH_CAPABLE_SLAVE 0x08
#define HCI_LMP_AFH_CLASS_SLAVE 0x10
#define HCI_LMP_BR_EDR_UNSUPPORTED 0x20
#define HCI_LMP_LE_CONTROLLER 0x40
#define HCI_LMP_3SLOT_EDR_ACL 0x80
/* ------------------- byte 5 --------------------*/
#define HCI_LMP_5SLOT_EDR_ACL 0x01
#define HCI_LMP_SNIFF_SUBRATING 0x02
#define HCI_LMP_PAUSE_ENCRYPTION 0x04
#define HCI_LMP_AFH_CAPABLE_MASTER 0x08
#define HCI_LMP_AFH_CLASS_MASTER 0x10
#define HCI_LMP_EDR_eSCO_2MBPS 0x20
#define HCI_LMP_EDR_eSCO_3MBPS 0x40
#define HCI_LMP_3SLOT_EDR_eSCO 0x80
/* ------------------- byte 6 --------------------*/
#define HCI_LMP_EXTENDED_INQUIRY 0x01
#define HCI_LMP_LE_BR_EDR_CONTROLLER 0x02
/* reserved 0x04 */
#define HCI_LMP_SIMPLE_PAIRING 0x08
#define HCI_LMP_ENCAPSULATED_PDU 0x10
#define HCI_LMP_ERRDATA_REPORTING 0x20
#define HCI_LMP_NOFLUSH_PB_FLAG 0x40
/* reserved 0x80 */
/* ------------------- byte 7 --------------------*/
#define HCI_LMP_LINK_SUPERVISION_TO 0x01
#define HCI_LMP_INQ_RSP_TX_POWER 0x02
#define HCI_LMP_ENHANCED_POWER_CONTROL 0x04
#define HCI_LMP_EXTENDED_FEATURES 0x80
/* page 1 of extended features */
/* ------------------- byte 0 --------------------*/
#define HCI_LMP_SSP 0x01
#define HCI_LMP_LE_HOST 0x02
#define HCI_LMP_LE_BR_EDR_HOST 0x04
#define HCI_LMP_SECURE_CONN_HOST 0x08
/* page 2 of extended features */
/* ------------------- byte 0 --------------------*/
#define HCI_LMP_CONNLESS_MASTER 0x01
#define HCI_LMP_CONNLESS_SLAVE 0x02
#define HCI_LMP_SYNC_TRAIN 0x04
#define HCI_LMP_SYNC_SCAN 0x08
#define HCI_LMP_INQ_RSP_NOTIFY 0x10
#define HCI_LMP_INTERLACE_SCAN 0x20
#define HCI_LMP_COARSE_CLOCK 0x40
/* reserved 0x80 */
/* ------------------- byte 0 --------------------*/
#define HCI_LMP_SECURE_CONN_CONTROLLER 0x01
#define HCI_LMP_PING 0x02
/* reserved 0x04 */
#define HCI_LMP_TRAIN_NUDGING 0x08
/* Link types */
#define HCI_LINK_SCO 0x00 /* Voice */
#define HCI_LINK_ACL 0x01 /* Data */
#define HCI_LINK_eSCO 0x02 /* eSCO */
/* 0x03 - 0xFF - reserved for future use */
/*
* ACL/SCO packet type bits are set to enable the
* packet type, except for 2MBPS and 3MBPS when they
* are unset to enable the packet type.
*/
/* ACL Packet types for "Create Connection" */
#define HCI_PKT_2MBPS_DH1 0x0002
#define HCI_PKT_3MBPS_DH1 0x0004
#define HCI_PKT_DM1 0x0008
#define HCI_PKT_DH1 0x0010
#define HCI_PKT_2MBPS_DH3 0x0100
#define HCI_PKT_3MBPS_DH3 0x0200
#define HCI_PKT_DM3 0x0400
#define HCI_PKT_DH3 0x0800
#define HCI_PKT_2MBPS_DH5 0x1000
#define HCI_PKT_3MBPS_DH5 0x2000
#define HCI_PKT_DM5 0x4000
#define HCI_PKT_DH5 0x8000
/* SCO Packet types for "Setup Synchronous Connection" */
#define HCI_PKT_HV1 0x0001
#define HCI_PKT_HV2 0x0002
#define HCI_PKT_HV3 0x0004
#define HCI_PKT_EV3 0x0008
#define HCI_PKT_EV4 0x0010
#define HCI_PKT_EV5 0x0020
#define HCI_PKT_2MBPS_EV3 0x0040
#define HCI_PKT_3MBPS_EV3 0x0080
#define HCI_PKT_2MBPS_EV5 0x0100
#define HCI_PKT_3MBPS_EV5 0x0200
/*
* Connection modes/Unit modes
*
* This is confusing. It means that one of the units change its mode
* for the specific connection. For example one connection was put on
* hold (but i could be wrong :)
*/
/* Page scan modes (are deprecated) */
#define HCI_MANDATORY_PAGE_SCAN_MODE 0x00
#define HCI_OPTIONAL_PAGE_SCAN_MODE1 0x01
#define HCI_OPTIONAL_PAGE_SCAN_MODE2 0x02
#define HCI_OPTIONAL_PAGE_SCAN_MODE3 0x03
/* 0x04 - 0xFF - reserved for future use */
/* Page scan repetition modes */
#define HCI_SCAN_REP_MODE0 0x00
#define HCI_SCAN_REP_MODE1 0x01
#define HCI_SCAN_REP_MODE2 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Page scan period modes */
#define HCI_PAGE_SCAN_PERIOD_MODE0 0x00
#define HCI_PAGE_SCAN_PERIOD_MODE1 0x01
#define HCI_PAGE_SCAN_PERIOD_MODE2 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Scan enable */
#define HCI_NO_SCAN_ENABLE 0x00
#define HCI_INQUIRY_SCAN_ENABLE 0x01
#define HCI_PAGE_SCAN_ENABLE 0x02
/* 0x04 - 0xFF - reserved for future use */
/* Hold mode activities */
#define HCI_HOLD_MODE_NO_CHANGE 0x00
#define HCI_HOLD_MODE_SUSPEND_PAGE_SCAN 0x01
#define HCI_HOLD_MODE_SUSPEND_INQUIRY_SCAN 0x02
#define HCI_HOLD_MODE_SUSPEND_PERIOD_INQUIRY 0x04
/* 0x08 - 0x80 - reserved for future use */
/* Connection roles */
#define HCI_ROLE_MASTER 0x00
#define HCI_ROLE_SLAVE 0x01
/* 0x02 - 0xFF - reserved for future use */
/* Key flags */
#define HCI_USE_SEMI_PERMANENT_LINK_KEYS 0x00
#define HCI_USE_TEMPORARY_LINK_KEY 0x01
/* 0x02 - 0xFF - reserved for future use */
/* Pin types */
#define HCI_PIN_TYPE_VARIABLE 0x00
#define HCI_PIN_TYPE_FIXED 0x01
/* Link key types */
#define HCI_LINK_KEY_TYPE_COMBINATION_KEY 0x00
#define HCI_LINK_KEY_TYPE_LOCAL_UNIT_KEY 0x01
#define HCI_LINK_KEY_TYPE_REMOTE_UNIT_KEY 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Encryption modes */
#define HCI_ENCRYPTION_MODE_NONE 0x00
#define HCI_ENCRYPTION_MODE_P2P 0x01
#define HCI_ENCRYPTION_MODE_ALL 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Quality of service types */
#define HCI_SERVICE_TYPE_NO_TRAFFIC 0x00
#define HCI_SERVICE_TYPE_BEST_EFFORT 0x01
#define HCI_SERVICE_TYPE_GUARANTEED 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Link policy settings */
#define HCI_LINK_POLICY_DISABLE_ALL_LM_MODES 0x0000
#define HCI_LINK_POLICY_ENABLE_ROLE_SWITCH 0x0001 /* Master/Slave switch */
#define HCI_LINK_POLICY_ENABLE_HOLD_MODE 0x0002
#define HCI_LINK_POLICY_ENABLE_SNIFF_MODE 0x0004
#define HCI_LINK_POLICY_ENABLE_PARK_MODE 0x0008
/* 0x0010 - 0x8000 - reserved for future use */
/* Event masks */
#define HCI_EVMSK_ALL 0x00000000ffffffff
#define HCI_EVMSK_NONE 0x0000000000000000
#define HCI_EVMSK_INQUIRY_COMPL 0x0000000000000001
#define HCI_EVMSK_INQUIRY_RESULT 0x0000000000000002
#define HCI_EVMSK_CON_COMPL 0x0000000000000004
#define HCI_EVMSK_CON_REQ 0x0000000000000008
#define HCI_EVMSK_DISCON_COMPL 0x0000000000000010
#define HCI_EVMSK_AUTH_COMPL 0x0000000000000020
#define HCI_EVMSK_REMOTE_NAME_REQ_COMPL 0x0000000000000040
#define HCI_EVMSK_ENCRYPTION_CHANGE 0x0000000000000080
#define HCI_EVMSK_CHANGE_CON_LINK_KEY_COMPL 0x0000000000000100
#define HCI_EVMSK_MASTER_LINK_KEY_COMPL 0x0000000000000200
#define HCI_EVMSK_READ_REMOTE_FEATURES_COMPL 0x0000000000000400
#define HCI_EVMSK_READ_REMOTE_VER_INFO_COMPL 0x0000000000000800
#define HCI_EVMSK_QOS_SETUP_COMPL 0x0000000000001000
#define HCI_EVMSK_COMMAND_COMPL 0x0000000000002000
#define HCI_EVMSK_COMMAND_STATUS 0x0000000000004000
#define HCI_EVMSK_HARDWARE_ERROR 0x0000000000008000
#define HCI_EVMSK_FLUSH_OCCUR 0x0000000000010000
#define HCI_EVMSK_ROLE_CHANGE 0x0000000000020000
#define HCI_EVMSK_NUM_COMPL_PKTS 0x0000000000040000
#define HCI_EVMSK_MODE_CHANGE 0x0000000000080000
#define HCI_EVMSK_RETURN_LINK_KEYS 0x0000000000100000
#define HCI_EVMSK_PIN_CODE_REQ 0x0000000000200000
#define HCI_EVMSK_LINK_KEY_REQ 0x0000000000400000
#define HCI_EVMSK_LINK_KEY_NOTIFICATION 0x0000000000800000
#define HCI_EVMSK_LOOPBACK_COMMAND 0x0000000001000000
#define HCI_EVMSK_DATA_BUFFER_OVERFLOW 0x0000000002000000
#define HCI_EVMSK_MAX_SLOT_CHANGE 0x0000000004000000
#define HCI_EVMSK_READ_CLOCK_OFFSET_COMLETE 0x0000000008000000
#define HCI_EVMSK_CON_PKT_TYPE_CHANGED 0x0000000010000000
#define HCI_EVMSK_QOS_VIOLATION 0x0000000020000000
#define HCI_EVMSK_PAGE_SCAN_MODE_CHANGE 0x0000000040000000
#define HCI_EVMSK_PAGE_SCAN_REP_MODE_CHANGE 0x0000000080000000
/* 0x0000000100000000 - 0x8000000000000000 - reserved for future use */
/* Filter types */
#define HCI_FILTER_TYPE_NONE 0x00
#define HCI_FILTER_TYPE_INQUIRY_RESULT 0x01
#define HCI_FILTER_TYPE_CON_SETUP 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Filter condition types for HCI_FILTER_TYPE_INQUIRY_RESULT */
#define HCI_FILTER_COND_INQUIRY_NEW_UNIT 0x00
#define HCI_FILTER_COND_INQUIRY_UNIT_CLASS 0x01
#define HCI_FILTER_COND_INQUIRY_BDADDR 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Filter condition types for HCI_FILTER_TYPE_CON_SETUP */
#define HCI_FILTER_COND_CON_ANY_UNIT 0x00
#define HCI_FILTER_COND_CON_UNIT_CLASS 0x01
#define HCI_FILTER_COND_CON_BDADDR 0x02
/* 0x03 - 0xFF - reserved for future use */
/* Xmit level types */
#define HCI_XMIT_LEVEL_CURRENT 0x00
#define HCI_XMIT_LEVEL_MAXIMUM 0x01
/* 0x02 - 0xFF - reserved for future use */
/* Host Controller to Host flow control */
#define HCI_HC2H_FLOW_CONTROL_NONE 0x00
#define HCI_HC2H_FLOW_CONTROL_ACL 0x01
#define HCI_HC2H_FLOW_CONTROL_SCO 0x02
#define HCI_HC2H_FLOW_CONTROL_BOTH 0x03
/* 0x04 - 0xFF - reserved future use */
/* Loopback modes */
#define HCI_LOOPBACK_NONE 0x00
#define HCI_LOOPBACK_LOCAL 0x01
#define HCI_LOOPBACK_REMOTE 0x02
/* 0x03 - 0xFF - reserved future use */
/**************************************************************************
**************************************************************************
** Link level defines, headers and types
**************************************************************************
**************************************************************************/
/*
* Macro(s) to combine OpCode and extract OGF (OpCode Group Field)
* and OCF (OpCode Command Field) from OpCode.
*/
#define HCI_OPCODE(gf,cf) ((((gf) & 0x3f) << 10) | ((cf) & 0x3ff))
#define HCI_OCF(op) ((op) & 0x3ff)
#define HCI_OGF(op) (((op) >> 10) & 0x3f)
/*
* Macro(s) to extract/combine connection handle, BC (Broadcast) and
* PB (Packet boundary) flags.
*/
#define HCI_CON_HANDLE(h) ((h) & 0x0fff)
#define HCI_PB_FLAG(h) (((h) & 0x3000) >> 12)
#define HCI_BC_FLAG(h) (((h) & 0xc000) >> 14)
#define HCI_MK_CON_HANDLE(h, pb, bc) \
(((h) & 0x0fff) | (((pb) & 3) << 12) | (((bc) & 3) << 14))
/* PB flag values */
/* 00 - reserved for future use */
#define HCI_PACKET_FRAGMENT 0x1
#define HCI_PACKET_START 0x2
/* 11 - reserved for future use */
/* BC flag values */
#define HCI_POINT2POINT 0x0 /* only Host controller to Host */
#define HCI_BROADCAST_ACTIVE 0x1 /* both directions */
#define HCI_BROADCAST_PICONET 0x2 /* both directions */
/* 11 - reserved for future use */
/* HCI command packet header */
typedef struct {
uint8_t type; /* MUST be 0x01 */
uint16_t opcode; /* OpCode */
uint8_t length; /* parameter(s) length in bytes */
} __packed hci_cmd_hdr_t;
#define HCI_CMD_PKT 0x01
#define HCI_CMD_PKT_SIZE (sizeof(hci_cmd_hdr_t) + 0xff)
/* ACL data packet header */
typedef struct {
uint8_t type; /* MUST be 0x02 */
uint16_t con_handle; /* connection handle + PB + BC flags */
uint16_t length; /* payload length in bytes */
} __packed hci_acldata_hdr_t;
#define HCI_ACL_DATA_PKT 0x02
#define HCI_ACL_PKT_SIZE (sizeof(hci_acldata_hdr_t) + 0xffff)
/* SCO data packet header */
typedef struct {
uint8_t type; /* MUST be 0x03 */
uint16_t con_handle; /* connection handle + reserved bits */
uint8_t length; /* payload length in bytes */
} __packed hci_scodata_hdr_t;
#define HCI_SCO_DATA_PKT 0x03
#define HCI_SCO_PKT_SIZE (sizeof(hci_scodata_hdr_t) + 0xff)
/* HCI event packet header */
typedef struct {
uint8_t type; /* MUST be 0x04 */
uint8_t event; /* event */
uint8_t length; /* parameter(s) length in bytes */
} __packed hci_event_hdr_t;
#define HCI_EVENT_PKT 0x04
#define HCI_EVENT_PKT_SIZE (sizeof(hci_event_hdr_t) + 0xff)
/* HCI status return parameter */
typedef struct {
uint8_t status; /* 0x00 - success */
} __packed hci_status_rp;
/**************************************************************************
**************************************************************************
** OGF 0x01 Link control commands and return parameters
**************************************************************************
**************************************************************************/
#define HCI_OGF_LINK_CONTROL 0x01
#define HCI_OCF_INQUIRY 0x0001
#define HCI_CMD_INQUIRY 0x0401
typedef struct {
uint8_t lap[HCI_LAP_SIZE]; /* LAP */
uint8_t inquiry_length; /* (N x 1.28) sec */
uint8_t num_responses; /* Max. # of responses */
} __packed hci_inquiry_cp;
/* No return parameter(s) */
#define HCI_OCF_INQUIRY_CANCEL 0x0002
#define HCI_CMD_INQUIRY_CANCEL 0x0402
/* No command parameter(s) */
typedef hci_status_rp hci_inquiry_cancel_rp;
#define HCI_OCF_PERIODIC_INQUIRY 0x0003
#define HCI_CMD_PERIODIC_INQUIRY 0x0403
typedef struct {
uint16_t max_period_length; /* Max. and min. amount of time */
uint16_t min_period_length; /* between consecutive inquiries */
uint8_t lap[HCI_LAP_SIZE]; /* LAP */
uint8_t inquiry_length; /* (inquiry_length * 1.28) sec */
uint8_t num_responses; /* Max. # of responses */
} __packed hci_periodic_inquiry_cp;
typedef hci_status_rp hci_periodic_inquiry_rp;
#define HCI_OCF_EXIT_PERIODIC_INQUIRY 0x0004
#define HCI_CMD_EXIT_PERIODIC_INQUIRY 0x0404
/* No command parameter(s) */
typedef hci_status_rp hci_exit_periodic_inquiry_rp;
#define HCI_OCF_CREATE_CON 0x0005
#define HCI_CMD_CREATE_CON 0x0405
typedef struct {
bdaddr_t bdaddr; /* destination address */
uint16_t pkt_type; /* packet type */
uint8_t page_scan_rep_mode; /* page scan repetition mode */
uint8_t page_scan_mode; /* reserved - set to 0x00 */
uint16_t clock_offset; /* clock offset */
uint8_t accept_role_switch; /* accept role switch? 0x00 == No */
} __packed hci_create_con_cp;
/* No return parameter(s) */
#define HCI_OCF_DISCONNECT 0x0006
#define HCI_CMD_DISCONNECT 0x0406
typedef struct {
uint16_t con_handle; /* connection handle */
uint8_t reason; /* reason to disconnect */
} __packed hci_discon_cp;
/* No return parameter(s) */
/* Add SCO Connection is deprecated */
#define HCI_OCF_ADD_SCO_CON 0x0007
#define HCI_CMD_ADD_SCO_CON 0x0407
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t pkt_type; /* packet type */
} __packed hci_add_sco_con_cp;
/* No return parameter(s) */
#define HCI_OCF_CREATE_CON_CANCEL 0x0008
#define HCI_CMD_CREATE_CON_CANCEL 0x0408
typedef struct {
bdaddr_t bdaddr; /* destination address */
} __packed hci_create_con_cancel_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* destination address */
} __packed hci_create_con_cancel_rp;
#define HCI_OCF_ACCEPT_CON 0x0009
#define HCI_CMD_ACCEPT_CON 0x0409
typedef struct {
bdaddr_t bdaddr; /* address of unit to be connected */
uint8_t role; /* connection role */
} __packed hci_accept_con_cp;
/* No return parameter(s) */
#define HCI_OCF_REJECT_CON 0x000a
#define HCI_CMD_REJECT_CON 0x040A
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t reason; /* reason to reject */
} __packed hci_reject_con_cp;
/* No return parameter(s) */
#define HCI_OCF_LINK_KEY_REP 0x000b
#define HCI_CMD_LINK_KEY_REP 0x040B
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t key[HCI_KEY_SIZE]; /* key */
} __packed hci_link_key_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* unit address */
} __packed hci_link_key_rep_rp;
#define HCI_OCF_LINK_KEY_NEG_REP 0x000c
#define HCI_CMD_LINK_KEY_NEG_REP 0x040C
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_link_key_neg_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* unit address */
} __packed hci_link_key_neg_rep_rp;
#define HCI_OCF_PIN_CODE_REP 0x000d
#define HCI_CMD_PIN_CODE_REP 0x040D
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t pin_size; /* pin code length (in bytes) */
uint8_t pin[HCI_PIN_SIZE]; /* pin code */
} __packed hci_pin_code_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* unit address */
} __packed hci_pin_code_rep_rp;
#define HCI_OCF_PIN_CODE_NEG_REP 0x000e
#define HCI_CMD_PIN_CODE_NEG_REP 0x040E
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_pin_code_neg_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* unit address */
} __packed hci_pin_code_neg_rep_rp;
#define HCI_OCF_CHANGE_CON_PACKET_TYPE 0x000f
#define HCI_CMD_CHANGE_CON_PACKET_TYPE 0x040F
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t pkt_type; /* packet type */
} __packed hci_change_con_pkt_type_cp;
/* No return parameter(s) */
#define HCI_OCF_AUTH_REQ 0x0011
#define HCI_CMD_AUTH_REQ 0x0411
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_auth_req_cp;
/* No return parameter(s) */
#define HCI_OCF_SET_CON_ENCRYPTION 0x0013
#define HCI_CMD_SET_CON_ENCRYPTION 0x0413
typedef struct {
uint16_t con_handle; /* connection handle */
uint8_t encryption_enable; /* 0x00 - disable, 0x01 - enable */
} __packed hci_set_con_encryption_cp;
/* No return parameter(s) */
#define HCI_OCF_CHANGE_CON_LINK_KEY 0x0015
#define HCI_CMD_CHANGE_CON_LINK_KEY 0x0415
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_change_con_link_key_cp;
/* No return parameter(s) */
#define HCI_OCF_MASTER_LINK_KEY 0x0017
#define HCI_CMD_MASTER_LINK_KEY 0x0417
typedef struct {
uint8_t key_flag; /* key flag */
} __packed hci_master_link_key_cp;
/* No return parameter(s) */
#define HCI_OCF_REMOTE_NAME_REQ 0x0019
#define HCI_CMD_REMOTE_NAME_REQ 0x0419
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t page_scan_rep_mode; /* page scan repetition mode */
uint8_t page_scan_mode; /* page scan mode */
uint16_t clock_offset; /* clock offset */
} __packed hci_remote_name_req_cp;
/* No return parameter(s) */
#define HCI_OCF_REMOTE_NAME_REQ_CANCEL 0x001a
#define HCI_CMD_REMOTE_NAME_REQ_CANCEL 0x041A
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_remote_name_req_cancel_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_remote_name_req_cancel_rp;
#define HCI_OCF_READ_REMOTE_FEATURES 0x001b
#define HCI_CMD_READ_REMOTE_FEATURES 0x041B
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_read_remote_features_cp;
/* No return parameter(s) */
#define HCI_OCF_READ_REMOTE_EXTENDED_FEATURES 0x001c
#define HCI_CMD_READ_REMOTE_EXTENDED_FEATURES 0x041C
typedef struct {
uint16_t con_handle; /* connection handle */
uint8_t page; /* page number */
} __packed hci_read_remote_extended_features_cp;
/* No return parameter(s) */
#define HCI_OCF_READ_REMOTE_VER_INFO 0x001d
#define HCI_CMD_READ_REMOTE_VER_INFO 0x041D
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_read_remote_ver_info_cp;
/* No return parameter(s) */
#define HCI_OCF_READ_CLOCK_OFFSET 0x001f
#define HCI_CMD_READ_CLOCK_OFFSET 0x041F
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_read_clock_offset_cp;
/* No return parameter(s) */
#define HCI_OCF_READ_LMP_HANDLE 0x0020
#define HCI_CMD_READ_LMP_HANDLE 0x0420
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_read_lmp_handle_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
uint16_t con_handle; /* connection handle */
uint8_t lmp_handle; /* LMP handle */
uint32_t reserved; /* reserved */
} __packed hci_read_lmp_handle_rp;
#define HCI_OCF_SETUP_SCO_CON 0x0028
#define HCI_CMD_SETUP_SCO_CON 0x0428
typedef struct {
uint16_t con_handle; /* connection handle */
uint32_t tx_bandwidth; /* transmit bandwidth */
uint32_t rx_bandwidth; /* receive bandwidth */
uint16_t latency; /* maximum latency */
uint16_t voice; /* voice setting */
uint8_t rt_effort; /* retransmission effort */
uint16_t pkt_type; /* packet types */
} __packed hci_setup_sco_con_cp;
/* No return parameter(s) */
#define HCI_OCF_ACCEPT_SCO_CON_REQ 0x0029
#define HCI_CMD_ACCEPT_SCO_CON_REQ 0x0429
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint32_t tx_bandwidth; /* transmit bandwidth */
uint32_t rx_bandwidth; /* receive bandwidth */
uint16_t latency; /* maximum latency */
uint16_t content; /* voice setting */
uint8_t rt_effort; /* retransmission effort */
uint16_t pkt_type; /* packet types */
} __packed hci_accept_sco_con_req_cp;
/* No return parameter(s) */
#define HCI_OCF_REJECT_SCO_CON_REQ 0x002a
#define HCI_CMD_REJECT_SCO_CON_REQ 0x042a
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t reason; /* reject error code */
} __packed hci_reject_sco_con_req_cp;
/* No return parameter(s) */
#define HCI_OCF_IO_CAPABILITY_REP 0x002b
#define HCI_CMD_IO_CAPABILITY_REP 0x042a
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t io_cap; /* IO capability */
uint8_t oob_data; /* OOB data present */
uint8_t auth_req; /* auth requirements */
} __packed hci_io_capability_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_io_capability_rep_rp;
#define HCI_OCF_USER_CONFIRM_REP 0x002c
#define HCI_CMD_USER_CONFIRM_REP 0x042c
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_confirm_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_confirm_rep_rp;
#define HCI_OCF_USER_CONFIRM_NEG_REP 0x002d
#define HCI_CMD_USER_CONFIRM_NEG_REP 0x042d
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_confirm_neg_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_confirm_neg_rep_rp;
#define HCI_OCF_USER_PASSKEY_REP 0x002e
#define HCI_CMD_USER_PASSKEY_REP 0x042e
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint32_t value; /* 000000 - 999999 */
} __packed hci_user_passkey_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_passkey_rep_rp;
#define HCI_OCF_USER_PASSKEY_NEG_REP 0x002f
#define HCI_CMD_USER_PASSKEY_NEG_REP 0x042f
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_passkey_neg_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_passkey_neg_rep_rp;
#define HCI_OCF_OOB_DATA_REP 0x0030
#define HCI_CMD_OOB_DATA_REP 0x0430
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t c[16]; /* pairing hash */
uint8_t r[16]; /* pairing randomizer */
} __packed hci_user_oob_data_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_oob_data_rep_rp;
#define HCI_OCF_OOB_DATA_NEG_REP 0x0033
#define HCI_CMD_OOB_DATA_NEG_REP 0x0433
typedef struct {
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_oob_data_neg_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_user_oob_data_neg_rep_rp;
#define HCI_OCF_IO_CAPABILITY_NEG_REP 0x0034
#define HCI_CMD_IO_CAPABILITY_NEG_REP 0x0434
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t reason; /* error code */
} __packed hci_io_capability_neg_rep_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
bdaddr_t bdaddr; /* remote address */
} __packed hci_io_capability_neg_rep_rp;
/**************************************************************************
**************************************************************************
** OGF 0x02 Link policy commands and return parameters
**************************************************************************
**************************************************************************/
#define HCI_OGF_LINK_POLICY 0x02
#define HCI_OCF_HOLD_MODE 0x0001
#define HCI_CMD_HOLD_MODE 0x0801
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t max_interval; /* (max_interval * 0.625) msec */
uint16_t min_interval; /* (max_interval * 0.625) msec */
} __packed hci_hold_mode_cp;
/* No return parameter(s) */
#define HCI_OCF_SNIFF_MODE 0x0003
#define HCI_CMD_SNIFF_MODE 0x0803
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t max_interval; /* (max_interval * 0.625) msec */
uint16_t min_interval; /* (max_interval * 0.625) msec */
uint16_t attempt; /* (2 * attempt - 1) * 0.625 msec */
uint16_t timeout; /* (2 * attempt - 1) * 0.625 msec */
} __packed hci_sniff_mode_cp;
/* No return parameter(s) */
#define HCI_OCF_EXIT_SNIFF_MODE 0x0004
#define HCI_CMD_EXIT_SNIFF_MODE 0x0804
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_exit_sniff_mode_cp;
/* No return parameter(s) */
#define HCI_OCF_PARK_MODE 0x0005
#define HCI_CMD_PARK_MODE 0x0805
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t max_interval; /* (max_interval * 0.625) msec */
uint16_t min_interval; /* (max_interval * 0.625) msec */
} __packed hci_park_mode_cp;
/* No return parameter(s) */
#define HCI_OCF_EXIT_PARK_MODE 0x0006
#define HCI_CMD_EXIT_PARK_MODE 0x0806
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_exit_park_mode_cp;
/* No return parameter(s) */
#define HCI_OCF_QOS_SETUP 0x0007
#define HCI_CMD_QOS_SETUP 0x0807
typedef struct {
uint16_t con_handle; /* connection handle */
uint8_t flags; /* reserved for future use */
uint8_t service_type; /* service type */
uint32_t token_rate; /* bytes per second */
uint32_t peak_bandwidth; /* bytes per second */
uint32_t latency; /* microseconds */
uint32_t delay_variation; /* microseconds */
} __packed hci_qos_setup_cp;
/* No return parameter(s) */
#define HCI_OCF_ROLE_DISCOVERY 0x0009
#define HCI_CMD_ROLE_DISCOVERY 0x0809
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_role_discovery_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
uint16_t con_handle; /* connection handle */
uint8_t role; /* role for the connection handle */
} __packed hci_role_discovery_rp;
#define HCI_OCF_SWITCH_ROLE 0x000b
#define HCI_CMD_SWITCH_ROLE 0x080B
typedef struct {
bdaddr_t bdaddr; /* remote address */
uint8_t role; /* new local role */
} __packed hci_switch_role_cp;
/* No return parameter(s) */
#define HCI_OCF_READ_LINK_POLICY_SETTINGS 0x000c
#define HCI_CMD_READ_LINK_POLICY_SETTINGS 0x080C
typedef struct {
uint16_t con_handle; /* connection handle */
} __packed hci_read_link_policy_settings_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
uint16_t con_handle; /* connection handle */
uint16_t settings; /* link policy settings */
} __packed hci_read_link_policy_settings_rp;
#define HCI_OCF_WRITE_LINK_POLICY_SETTINGS 0x000d
#define HCI_CMD_WRITE_LINK_POLICY_SETTINGS 0x080D
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t settings; /* link policy settings */
} __packed hci_write_link_policy_settings_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
uint16_t con_handle; /* connection handle */
} __packed hci_write_link_policy_settings_rp;
#define HCI_OCF_READ_DEFAULT_LINK_POLICY_SETTINGS 0x000e
#define HCI_CMD_READ_DEFAULT_LINK_POLICY_SETTINGS 0x080E
/* No command parameter(s) */
typedef struct {
uint8_t status; /* 0x00 - success */
uint16_t settings; /* link policy settings */
} __packed hci_read_default_link_policy_settings_rp;
#define HCI_OCF_WRITE_DEFAULT_LINK_POLICY_SETTINGS 0x000f
#define HCI_CMD_WRITE_DEFAULT_LINK_POLICY_SETTINGS 0x080F
typedef struct {
uint16_t settings; /* link policy settings */
} __packed hci_write_default_link_policy_settings_cp;
typedef hci_status_rp hci_write_default_link_policy_settings_rp;
#define HCI_OCF_FLOW_SPECIFICATION 0x0010
#define HCI_CMD_FLOW_SPECIFICATION 0x0810
typedef struct {
uint16_t con_handle; /* connection handle */
uint8_t flags; /* reserved */
uint8_t flow_direction;
uint8_t service_type;
uint32_t token_rate;
uint32_t token_bucket;
uint32_t peak_bandwidth;
uint32_t latency;
} __packed hci_flow_specification_cp;
/* No return parameter(s) */
#define HCI_OCF_SNIFF_SUBRATING 0x0011
#define HCI_CMD_SNIFF_SUBRATING 0x0810
typedef struct {
uint16_t con_handle; /* connection handle */
uint16_t max_latency;
uint16_t max_timeout; /* max remote timeout */
uint16_t min_timeout; /* min local timeout */
} __packed hci_sniff_subrating_cp;
typedef struct {
uint8_t status; /* 0x00 - success */
uint16_t con_handle; /* connection handle */
} __packed hci_sniff_subrating_rp;
/**************************************************************************