-
Notifications
You must be signed in to change notification settings - Fork 0
/
mgmt-api.txt
2270 lines (1667 loc) · 60.9 KB
/
mgmt-api.txt
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
Bluetooth Management API
*************************
Copyright (C) 2008-2009 Marcel Holtmann <marcel@holtmann.org>
Overview
========
This document describes the format of data used for communicating with
the kernel using a so-called Bluetooth Management sockets. These sockets
are available starting with Linux kernel version 3.4
The following kernel versions introduced new commands, new events or
important fixes to the Bluetooth Management API:
Linux kernel v3.4 Version 1.0
Linux kernel v3.5 Version 1.1
Linux kernel v3.7 Version 1.2
Linux kernel v3.9 Version 1.3
Linux kernel v3.13 Version 1.4
Linux kernel v3.15 Version 1.5 (not yet released)
Version 1.1 introduces Set Device ID command.
Version 1.2 introduces Passkey Notify event.
Version 1.3 does not introduce any new command or event.
Version 1.4 introduces Set Advertising, Set BR/EDR, Set Static Address
and Set Scan Parameters commands.
Version 1.5 introduces Set Secure Connections, Set Debug Keys, Set Privacy
and Load Identity Resolving Keys commands. It also introduces New Identity
Resolving Key and New Signature Resolving Key events.
Example
=======
The Bluetooth management sockets can be created by setting the hci_channel
member of struct sockaddr_hci to HCI_CHANNEL_CONTROL (3) when creating a
raw HCI socket. In C the needed code would look something like the following:
int mgmt_create(void)
{
struct sockaddr_hci addr;
int fd;
fd = socket(PF_BLUETOOTH, SOCK_RAW | SOCK_CLOEXEC | SOCK_NONBLOCK,
BTPROTO_HCI);
if (fd < 0)
return -errno;
memset(&addr, 0, sizeof(addr));
addr.hci_family = AF_BLUETOOTH;
addr.hci_dev = HCI_DEV_NONE;
addr.hci_channel = HCI_CHANNEL_CONTROL;
if (bind(fd, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
int err = -errno;
close(fd);
return err;
}
return fd;
}
The process creating the mgmt socket is required to have the
CAP_NET_ADMIN capability (e.g. root would have this).
Packet Structures
=================
Commands:
0 4 8 12 16 22 24 28 31 35 39 43 47
+-------------------+-------------------+-------------------+
| Command Code | Controller Index | Parameter Length |
+-------------------+-------------------+-------------------+
| |
Events:
0 4 8 12 16 22 24 28 31 35 39 43 47
+-------------------+-------------------+-------------------+
| Event Code | Controller Index | Parameter Length |
+-------------------+-------------------+-------------------+
| |
All fields are in little-endian byte order (least significant byte first).
Controller Index can have a special value <non-controller> to indicate that
command or event is not related to any controller. Possible values:
<controller id> 0x0000 to 0xFFFE
<non-controller> 0xFFFF
Error Codes
===========
The following values have been defined for use with the Command Status
and Command Complete events:
0x00 Success
0x01 Unknown Command
0x02 Not Connected
0x03 Failed
0x04 Connect Failed
0x05 Authentication Failed
0x06 Not Paired
0x07 No Resources
0x08 Timeout
0x09 Already Connected
0x0A Busy
0x0B Rejected
0x0C Not Supported
0x0D Invalid Parameters
0x0E Disconnected
0x0F Not Powered
0x10 Cancelled
0x11 Invalid Index
Read Management Version Information Command
===========================================
Command Code: 0x0001
Controller Index: <non-controller>
Command Parameters:
Return Parameters: Version (1 Octets)
Revision (2 Octets)
This command returns the Management version and revision.
Besides, being informational the information can be used to
determine whether certain behavior has changed or bugs fixed
when interacting with the kernel.
This command generates a Command Complete event on success or
a Command Status event on failure.
Read Management Supported Commands Command
==========================================
Command Code: 0x0002
Controller Index: <non-controller>
Command Parameters:
Return Parameters: Num_Of_Commands (2 Octets)
Num_Of_Events (2 Octets)
Command1 (2 Octets)
Command2 (2 Octets)
...
Event1 (2 Octets)
Event2 (2 Octets)
...
This command returns the list of supported Management commands
and events.
The commands Read Management Version Information and Read
management Supported Commands are not included in this list.
Both commands are always supported and mandatory.
The events Command Status and Command Complete are not included
in this list. Both are implicit and mandatory.
This command generates a Command Complete event on success or
a Command Status event on failure.
Read Controller Index List Command
==================================
Command Code: 0x0003
Controller Index: <non-controller>
Command Parameters:
Return Parameters: Num_Controllers (2 Octets)
Controller_Index[i] (2 Octets)
This command returns the list of currently known controllers.
Controllers added or removed after calling this command can be
monitored using the Index Added and Index Removed events.
This command generates a Command Complete event on success or
a Command Status event on failure.
Read Controller Information Command
===================================
Command Code: 0x0004
Controller Index: <controller id>
Command Parameters:
Return Parameters: Address (6 Octets)
Bluetooth_Version (1 Octet)
Manufacturer (2 Octets)
Supported_Settings (4 Octets)
Current_Settings (4 Octets)
Class_Of_Device (3 Octets)
Name (249 Octets)
Short_Name (11 Octets)
This command is used to retreive the current state and basic
information of a controller. It is typically used right after
getting the response to the Read Controller Index List command
or an Index Added event.
If not short name is set the Short_Name parameter will be empty
(begin with a nul byte).
Current_Settings & Supported_Settings is a bitmask with
currently the following available bits:
1 Powered
2 Connectable
3 Fast Connectable
4 Discoverable
5 Pairable
6 Link Level Security (Sec. mode 3)
7 Secure Simple Pairing
8 Basic Rate/Enhanced Data Rate
9 High Speed
10 Low Energy
11 Advertising
12 Secure Connections
13 Debug Keys
14 Privacy
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Invalid Index
Set Powered Command
===================
Command Code: 0x0005
Controller Index: <controller id>
Command Parameters: Powered (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to power on or off a controller. The
allowed Powered command parameter values are 0x00 and 0x01. All
other values will return Invalid Parameters.
If discoverable setting is activated with a timeout, then
switching the controller off will expire this timeout and
disable discoverable.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Invalid Parameters
Invalid Index
Set Discoverable Command
========================
Command Code: 0x0006
Controller Index: <controller id>
Command Parameters: Discoverable (1 Octet)
Timeout (2 Octets)
Return Parameters: Current_Settings (4 Octets)
This command is used to set the discoverable property of a
controller. The allowed Discoverable command parameter values
are 0x00, 0x01 and 0x02. All other values will return Invalid
Parameters.
Timeout is the time in seconds and is only meaningful when
Discoverable is set to 0x01 or 0x02. Providing a timeout
with 0x00 return Invalid Parameters. For 0x02, the timeout
value is required.
The value 0x00 disables discoverable, the value 0x01 enables
general discoverable and the value 0x02 enables limited
discoverable.
This command is only available for BR/EDR capable controllers
(e.g. not for single-mode LE ones). It will return Not Supported
otherwise.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
However using a timeout when the controller is not powered will
return Not Powered error.
When switching discoverable on and the connectable setting is
off it will return Rejected error.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Rejected
Not Supported
Invalid Parameters
Not Powered
Invalid Index
Set Connectable Command
=======================
Command Code: 0x0007
Controller Index: <controller id>
Command Parameters: Connectable (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to set the connectable property of a
controller. The allowed Connectable command parameter values are
0x00 and 0x01. All other values will return Invalid Parameters.
This command is available for BR/EDR, LE-only and also dual
mode controllers. For BR/EDR is changes the page scan setting
and for LE controllers it changes the advertising type. For
dual mode controllers it affects both settings.
For LE capable controllers the connectable setting only takes
affect when advertising is enabled.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
When switching connectable off, it will also switch off the
discoverable setting. Switching connectable back on will not
restore a previous discoverable. It will stay off and needs
to be manually switched back on.
When switching connectable off, it will expire a discoverable
setting with a timeout.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Not Supported
Invalid Parameters
Invalid Index
Set Fast Connectable Command
============================
Command Code: 0x0008
Controller Index: <controller id>
Command Parameters: Enable (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to set the controller into a connectable
state where the page scan parameters have been set in a way to
favor faster connect times with the expense of higher power
consumption.
The allowed values of the Enable command parameter are 0x00 and
0x01. All other values will return Invalid Parameters.
This command is only available for BR/EDR capable controllers
(e.g. not for single-mode LE ones). It will return Not Supported
otherwise.
This command can only be used when the controller is powered on
and will return Not Powerd otherwise.
If connectable is not set, then this command will fail with
Rejected error.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Failed
Busy
Rejected
Not Supported
Invalid Parameters
Not Powered
Invalid Index
Set Pairable Command
====================
Command Code: 0x0009
Controller Index: <controller id>
Command Parameters: Pairable (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to set the pairable property of an
controller. The allowed values for the Pairable command
parameter are 0x00 and 0x01. All other values will return
Invalid Parameters.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
Turning pairable on will not automatically switch the controller
into connectable mode. That needs to be done separately.
The setting will be remembered during power down/up toggles.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Invalid Index
Set Link Security Command
=========================
Command Code: 0x000A
Controller Index: <controller id>
Command Parameters: Link_Security (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to either enable or disable link level
security for an controller (also known as Security Mode 3). The
allowed values for the Link_Security command parameter are 0x00
and 0x01. All other values will return Invalid Parameters.
This command is only available for BR/EDR capable controllers
(e.g. not for single-mode LE ones). It will return Not Supported
otherwise.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Not Supported
Invalid Parameters
Invalid Index
Set Secure Simple Pairing Command
=================================
Command Code: 0x000B
Controller Index: <controller id>
Command Parameters: Secure_Simple_Pairing (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to enable/disable Secure Simple Pairing
support for a controller. The allowed values for the
Secure_Simple_Pairing command parameter are 0x00 and 0x01. All
other values will return Invalid Parameters.
This command is only available for BR/EDR capable controllers
supporting the core specification version 2.1 or greater
(e.g. not for single-mode LE controllers or pre-2.1 ones).
This command can be used when the controller is not powered and
all settings will be programmed once powered.
In case the controller does not support Secure Simple Pairing,
the command will fail regardless with Not Supported error.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Not Supported
Invalid Parameters
Invalid Index
Set High Speed Command
======================
Command Code: 0x000C
Controller Index: <controller id>
Command Parameters: High_Speed (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to enable/disable Bluetooth High Speed
support for a controller. The allowed values for the High_Speed
command parameter are 0x00 and 0x01. All other values will
return Invalid Parameters.
This command is only available for BR/EDR capable controllers
(e.g. not for single-mode LE ones).
This command can be used when the controller is not powered and
all settings will be programmed once powered.
To enable High Speed support, it is required that Secure Simple
Pairing support is enabled first. High Speed support is not
possible for connections without Secure Simple Pairing.
When switching Secure Simple Pairing off, the support for High
Speed will be switched off as well. Switching Secure Simple
Pairing back on, will not re-enable High Speed support. That
needs to be done manually.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Not Supported
Invalid Parameters
Invalid Index
Set Low Energy Command
======================
Command Code: 0x000D
Controller Index: <controller id>
Command Parameters: Low_Energy (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command is used to enable/disable Low Energy support for a
controller. The allowed values of the Low_Energy command
parameter are 0x00 and 0x01. All other values will return
Invalid Parameters.
This command is only available for LE capable controllers and
will yield in a Not Supported error otherwise.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
In case the kernel subsystem does not support Low Energy or the
controller does not either, the command will fail regardless.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Not Supported
Invalid Parameters
Invalid Index
Set Device Class
================
Command Code: 0x000E
Controller Index: <controller id>
Command Parameters: Major_Class (1 Octet)
Minor_Class (1 Octet)
Return Parameters: Class_Of_Device (3 Octets)
This command is used to set the major and minor device class for
BR/EDR capable controllers.
This command will also implicitly disable caching of pending CoD
and EIR updates.
This command is only available for BR/EDR capable controllers
(e.g. not for single-mode LE ones).
This command can be used when the controller is not powered and
all settings will be programmed once powered.
In case the controller is powered off, 0x000000 will be returned
for the class of device parameter. And after power on the new
value will be announced via class of device changed event.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Not Supported
Invalid Parameters
Invalid Index
Set Local Name Command
======================
Command Code: 0x000F
Controller Index: <controller id>
Command Parameters: Name (249 Octets)
Short_Name (11 Octets)
Return Parameters: Name (249 Octets)
Short_Name (11 Octets)
This command is used to set the local name of a controller. The
command parameters also include a short name which will be used
in case the full name doesn't fit within EIR/AD data.
The name parameters need to always end with a null byte (failure
to do so will cause the command to fail).
This command can be used when the controller is not powered and
all settings will be programmed once powered.
The values of name and short name will be remembered when
switching the controller off and back on again. So the name
and short name only have to be set once when a new controller
is found and will stay until removed.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Invalid Index
Add UUID Command
================
Command Code: 0x0010
Controller Index: <controller id>
Command Parameters: UUID (16 Octets)
SVC_Hint (1 Octet)
Return Parameters: Class_Of_Device (3 Octets)
This command is used to add a UUID to be published in EIR
and/or AD data. The accompanied SVC_Hint parameter is used to
tell the kernel whether the service class bits of the Class of
Device value need modifying due to this UUID.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
In case the controller is powered off, 0x000000 will be returned
for the class of device parameter. And after power on the new
value will be announced via class of device changed event.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Invalid Parameters
Invalid Index
Remove UUID Command
===================
Command Code: 0x0011
Controller Index: <controller id>
Command Parameters: UUID (16 Octets)
Return Parameters: Class_Of_Device (3 Octets)
This command is used to remove a UUID previously added using the
Add UUID command.
When the UUID parameter is an empty UUID (16 x 0x00), then all
previously loaded UUIDs will be removed.
This command can be used when the controller is not powered and
all settings will be programmed once powered.
In case the controller is powered off, 0x000000 will be returned
for the class of device parameter. And after power on the new
value will be announced via class of device changed event.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Busy
Invalid Parameters
Invalid Index
Load Link Keys Command
======================
Command Code: 0x0012
Controller Index: <controller id>
Command Parameters: Debug_Keys (1 Octet)
Key_Count (2 Octets)
Key1 {
Address (6 Octets)
Address_Type (1 Octet)
Key_Type (1 Octet)
Value (16 Octets)
PIN_Length (1 Octet)
}
Key2 { }
...
Return Parameters:
This command is used to feed the kernel with currently known
link keys. The command does not need to be called again upon the
receiption of New Link Key events since the kernel updates its
list automatically.
The Debug_Keys parameter is used to tell the kernel whether to
accept the usage of debug keys or not. The allowed values for
this parameter are 0x00 and 0x01. All other values will return
an Invalid Parameters response.
Usage of the Debug_Keys parameter is deprecated and has been
replaced with the Set Debug Keys command. When setting the
Debug_Keys option via Load Link Keys command it has the same
affect as setting it via Set Debug Keys and applies to all
keys in the system.
Possible values for the Address_Type parameter:
0 BR/EDR
1 Reserved (not in use)
2 Reserved (not in use)
Public and random LE addresses are not valid and will be rejected.
Currently defined Key_Type values are:
0x00 Combination key
0x01 Local Unit key
0x02 Remote Unit key
0x03 Debug Combination key
0x04 Unauthenticated Combination key from P-192
0x05 Authenticated Combination key from P-192
0x06 Changed Combination key
0x07 Unauthenticated Combination key from P-256
0x08 Authenticated Combination key from P-256
This command can be used when the controller is not powered.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Invalid Index
Load Long Term Keys Command
===========================
Command Code: 0x0013
Controller Index: <controller id>
Command Parameters: Key_Count (2 Octets)
Key1 {
Address (6 Octets)
Address_Type (1 Octet)
Key_Type (1 Octet)
Master (1 Octet)
Encryption_Size (1 Octet)
Encryption_Diversifier (2 Octets)
Random_Number (8 Octets)
Value (16 Octets)
}
Key2 { }
...
Return Parameters:
This command is used to feed the kernel with currently known
(SMP) Long Term Keys. The command does not need to be called
again upon the receiption of New Long Term Key events since the
kernel updates its list automatically.
Possible values for the Address_Type parameter:
0 Reserved (not in use)
1 LE Public
2 LE Random
The provided Address and Address_Type are the identity of
a device. So either its public address or static random address.
Unresolvable random addresses and resolvable random addresses are
not valid and will be rejected.
Currently defined Key_Type values are:
0x00 Unauthenticated key
0x01 Authenticated key
This command can be used when the controller is not powered.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Invalid Index
Disconnect Command
==================
Command Code: 0x0014
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command is used to force the disconnection of a currently
connected device.
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Possible errors: Not Connected
Busy
Invalid Parameters
Not Powered
Invalid Index
Get Connections Command
=======================
Command Code: 0x0015
Controller Index: <controller id>
Command Parameters:
Return Parameters: Connection_Count (2 Octets)
Address1 {
Address (6 Octets)
Address_Type (1 Octet)
}
Address2 { }
...
This command is used to retreive a list of currently connected
devices.
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
For devices using resolvable random addresses with a known
identity resolving key, the Address and Address_Type will
contain the identity information.
This command can only be used when the controller is powered.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Not Powered
Invalid Index
PIN Code Reply Command
=======================
Command Code: 0x0016
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
PIN_Length (1 Octet)
PIN_Code (16 Octets)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command is used to respond to a PIN Code request event.
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Possible errors: Not Connected
Invalid Parameters
Not Powered
Invalid Index
PIN Code Negative Reply Command
===============================
Command Code: 0x0017
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command is used to return a negative response to a PIN Code
Request event.
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Possible errors: Not Connected
Invalid Parameters
Not Powered
Invalid Index
Set IO Capability Command
=========================
Command Code: 0x0018
Controller Index: <controller id>
Command Parameters: IO_Capability (1 Octet)
Return Parameters:
This command is used to set the IO Capability used for pairing.
The command accepts both SSP and SMP values. The KeyboardDisplay
SMP value (which doesn't exist for SSP will) automatically be
downgraded to DisplayYesNo by the kernel for SSP pairing events.
This command can be used when the controller is not powered.
This command generates a Command Complete event on success or
a Command Status event on failure.
Possible errors: Invalid Parameters
Invalid Index
Pair Device Command
===================
Command Code: 0x0019
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
IO_Capability (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command is used to trigger pairing with a remote device.
The IO_Capability command parameter is used to temporarily (for
this pairing event only) override the global IO Capaility (set
using the Set IO Capability command).
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
The Address and Address_Type of the return parameters will
return the identity address if know. In case of resolvable
random address given as command parameters and the remote
provides an identity resolving key, the return parameters
will provide the resolved address.
To allow tracking of which resolvable random address changed
into which identity address, the New Identity Resolving Key
event will be send before receiving Command Complete event
for this command.
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Possible errors: Connect Failed
Busy
Invalid Parameters
Not Powered
Invalid Index
Cancel Pair Device
==================
Command Code: 0x001A
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
The Address and Address_Type parameters should match what was
given to a preceding Pair Device command.
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Possible errors: Invalid Parameters
Not Powered
Invalid Index
Unpair Device Command
=====================