blob: 60f4da406a467b735278e9c5073922eba62142ac [file] [log] [blame]
Bluetooth Management API
*************************
Copyright (C) 2008-2009 Marcel Holtmann <marcel@holtmann.org>
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 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)
...
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 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)
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
This command generates a Command Complete event on success or
a Command Status event on failure.
Set Powered Command
===================
Command Code: 0x0005
Controller Index: <controller id>
Command Parameters: Powered (1 Octet)
Return Parameters: Current_Settings (4 Octets)
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.
Set Discoverable Command
========================
Command Code: 0x0006
Controller Index: <controller id>
Command Parameters: Discoverable (1 Octet)
Timeout (2 Octets)
Return Parameters: Current_Settings (4 Octets)
Timeout is the time in seconds and is only meaningful when
Discoverable is set to 1.
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 an error.
When switching discoverable on and the connectable setting is
off it will return an error.
This command generates a Command Complete event on success or
a Command Status event on failure.
Set Connectable Command
=======================
Command Code: 0x0007
Controller Index: <controller id>
Command Parameters: Connectable (1 Octet)
Return Parameters: Current_Settings (4 Octets)
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.
Set Fast Connectable Command
============================
Command Code: 0x0008
Controller Index: <controller id>
Command Parameters: Enable (1 Octet)
Return Parameters: Current_Settings (4 Octets)
This command can be used when the controller is not powered and
all settings will be programmed once powered.
If connectable is not set, then this command will fail.
This command generates a Command Complete event on success or
a Command Status event on failure.
Set Pairable Command
====================
Command Code: 0x0009
Controller Index: <controller id>
Command Parameters: Pairable (1 Octet)
Return Parameters: Current_Settings (4 Octets)
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.
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 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.
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 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.
This command generates a Command Complete event on success or
a Command Status event on failure.
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 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 High Speed, the
command will fail regardless.
This command generates a Command Complete event on success or
a Command Status event on failure.
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 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.
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 will also implicitly disable caching of pending CoD
and EIR updates.
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.
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)
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.
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 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.
Remove UUID Command
===================
Command Code: 0x0011
Controller Index: <controller id>
Command Parameters: UUID (16 Octets)
Return Parameters: Class_Of_Device (3 Octets)
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.
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 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.
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)
Authenticated (1 Octet)
Master (1 Octet)
Encryption Size (1 Octet)
Enc. Diversifier (2 Octets)
Random Number (8 Octets)
Value (16 Octets)
}
Key2 { }
...
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.
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 can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
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 { }
...
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
a Command Status event on failure.
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 can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
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 can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Set IO Capability Command
=========================
Command Code: 0x0018
Controller Index: <controller id>
Command Parameters: IO_Capability (1 Octet)
Return Parameters:
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.
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)
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.
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.
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Unpair Device Command
=====================
Command Code: 0x001B
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Disconnect (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
Removes all keys associated with the remote device.
The Disconnect parameter tells the kernel whether to forcefully
disconnect any existing connections to the device. It should in
practice always be 1 except for some special GAP qualification
test-cases where a key removal without disconnecting is needed.
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
User Confirmation Reply Command
===============================
Command Code: 0x001C
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
User Confirmation Negative Reply Command
========================================
Command Code: 0x001D
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
User Passkey Reply Command
==========================
Command Code: 0x001E
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Passkey (4 Octets)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
User Passkey Negative Reply Command
===================================
Command Code: 0x001F
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Read Local Out Of Band Data Command
===================================
Command Code: 0x0020
Controller Index: <controller id>
Command Parameters:
Return Parameters: Hash (16 Octets)
Randomizer (16 Octets)
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.
Add Remote Out Of Band Data Command
===================================
Command Code: 0x0021
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Hash (16 Octets)
Randomizer (16 Octets)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
Provided Out Of Band data is persistent over power down/up toggles.
This command generates a Command Complete event on success
or failure.
Remove Remote Out Of Band Data Command
======================================
Command Code: 0x0022
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command generates a Command Complete event on success
or failure.
Start Discovery Command
=======================
Command Code: 0x0023
Controller Index: <controller id>
Command Parameters: Address_Type (1 Octet)
Return Parameters: Address_Type (1 Octet)
Possible values for the Address_Type parameter are a bit-wise or
of the following bits:
1 BR/EDR
2 LE Public
3 LE Random
By combining these e.g. the following values are possible:
1 BR/EDR
6 LE (public & random)
7 BR/EDR/LE (interleaved discovery)
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Stop Discovery Command
======================
Command Code: 0x0024
Controller Index: <controller id>
Command Parameters: Address_Type (1 Octet)
Return Parameters: Address_Type (1 Octet)
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Confirm Name Command
====================
Command Code: 0x0025
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Name_Known (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command is only valid during device discovery and is
expected for each Device Found event with the Confirm Name
flag set.
This command can only be used when the controller is powered.
This command generates a Command Complete event on success
or failure.
Block Device Command
====================
Command Code: 0x0026
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command can be used when the controller is not powered.
This command generates a Command Complete event on success
or failure.
Unblock Device Command
======================
Command Code: 0x0027
Controller Index: <controller id>
Command Parameters: Address (6 Octets)
Address_Type (1 Octet)
Return Parameters: Address (6 Octets)
Address_Type (1 Octet)
This command can be used when the controller is not powered.
This command generates a Command Complete event on success
or failure.
Set Device ID Command
=====================
Command Code: 0x0028
Controller Index: <controller id>
Command Parameters: Source (2 Octets)
Vendor (2 Octets)
Product (2 Octets)
Version (2 Octets)
Return Parameters:
This command can be used when the controller is not powered and
all settings will be programmed once powered.
The Source parameter selects the organization that assigned the
Vendor parameter:
0x0000 Disable Device ID
0x0001 Bluetooth SIG
0x0002 USB Implementer’s Forum
The information are put into the EIR data. If the controller does
not support EIR or if SSP is disabled, this command will still
succeed. The information are stored for later use and will survive
toggling SSP on and off.
This command generates a Command Complete event on success or
a Command Status event on failure.
Command Complete Event
======================
Event Code 0x0001
Controller Index: <controller id> or <non-controller>
Event Parameters Command_Opcode (2 Octets)
Status (1 Octet)
Return_Parameters
Command Status Event
====================
Event Code 0x0002
Controller Index: <controller id> or <non-controller>
Event Parameters Command_Opcode (2 Octets)
Status (1 Octet)
Controller Error Event
======================
Event Code 0x0003
Controller Index: <controller id>
Event Parameters Error_Code (1 Octet)
Index Added Event
=================
Event Code 0x0004
Controller Index: <controller id>
Event Parameters
Index Removed Event
===================
Event Code 0x0005
Controller Index: <controller id>
Event Parameters
New Settings Event
==================
Event Code 0x0006
Controller Index: <controller id>
Event Parameters: Current_Settings (4 Octets)
Class Of Device Changed Event
=============================
Event Code 0x0007
Controller Index: <controller id>
Event Parameters: Class_Of_Device (3 Octets)
Local Name Changed Event
========================
Event Code 0x0008
Controller Index <controller id>
Event Parameters Name (249 Octets)
Short_Name (11 Octets)
New Link Key Event
==================
Event Code 0x0009
Controller Index: <controller id>
Event Parameters Key {
Address (6 Octets)
Address_Type (1 Octet)
Key_Type (1 Octet)
Value (16 Octets)
PIN_Length (1 Octet)
}
New Long Term Key Event
=======================
Event Code 0x000A
Controller Index <controller id>
Event Parameters Store Hint (1 Octet)
Key {
Address (6 Octets)
Address_Type (1 Octet)
Authenticated (1 Octet)
Master (1 Octet)
Encryption Size (1 Octet)
Enc. Diversifier (2 Octets)
Random Number (8 Octets)
Value (16 Octets)
}
Device Connected Event
======================
Event Code 0x000B
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Flags (4 Octets)
EIR_Data_Length (2 Octets)
EIR_Data (0-65535 Octets)
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
The following bits are defined for the Flags parameter:
0 Reserved (not in use)
1 Legacy Pairing
Device Disconnected Event
=========================
Event Code 0x000C
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Reason (1 Octet)
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
Possible values for the Reason parameter:
0 Unspecified
1 Connection timeout
2 Connection terminated by local host
3 Connection terminated by remote host
Note that the local/remote distinction just determines which side
terminated the low-level connection, regardless of the
disconnection of the higher-level profiles.
This can sometimes be misleading and thus must be used with care.
For example, some hardware combinations would report a locally
initiated disconnection even if the user turned Bluetooth off in
the remote side.
Connect Failed Event
====================
Event Code 0x000D
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Status (1 Octet)
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
PIN Code Request Event
======================
Event Code 0x000E
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Secure (1 Octet)
Secure: 0x01 secure PIN code required
0x00 secure PIN code not required
User Confirmation Request Event
===============================
Event Code 0x000F
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Confirm_Hint (1 Octet)
Value (4 Octets)
User Passkey Request Event
==========================
Event Code 0x0010
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Authentication Failed Event
===========================
Event Code 0x0011
Controller Index: <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Status (1 Octet)
Device Found Event
==================
Event Code 0x0012
Controller Index <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
RSSI (1 Octet)
Flags (4 Octets)
EIR_Data_Length (2 Octets)
EIR_Data (0-65535 Octets)
Possible values for the Address_Type parameter:
0 BR/EDR
1 LE Public
2 LE Random
The following bits are defined for the Flags parameter:
0 Confirm name
1 Legacy Pairing
Discovering Event
=================
Event Code 0x0013
Controller Index <controller id>
Event Parameters Address_Type (1 Octet)
Discovering (1 Octet)
Device Blocked Event
====================
Event Code 0x0014
Controller Index <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Device Unblocked Event
======================
Event Code 0x0015
Controller Index <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Device Unpaired Event
=====================
Event Code 0x0016
Controller Index <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Passkey Notify Event
====================
Event Code 0x0017
Controller Index <controller id>
Event Parameters Address (6 Octets)
Address_Type (1 Octet)
Passkey (4 Octets)
Entered (1 Octet)