Bluetooth Management API ************************* Copyright (C) 2008-2009 Marcel Holtmann 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 to indicate that command or event is not related to any controller. Possible values: 0x0000 to 0xFFFE 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: 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: 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: 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: 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 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: 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. 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: 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 and 0x01. Timeout is the time in seconds and is only meaningful when Discoverable is set to 1. 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. 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. Possible errors: Busy Rejected Not Supported Invalid Parameters Not Powered Invalid Index Set Connectable Command ======================= Command Code: 0x0007 Controller Index: 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. 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. 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: 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. This command is only available for BR/EDR capable controllers (e.g. not for single-mode LE ones). This command can only be used when the controller is powered on. 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. Possible errors: Failed Busy Rejected Not Supported Invalid Parameters Not Powered Invalid Index Set Pairable Command ==================== Command Code: 0x0009 Controller Index: 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. 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: 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. 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. 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: 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. 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. 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: 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. 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 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. Possible errors: Not Supported Invalid Parameters Invalid Index Set Low Energy Command ====================== Command Code: 0x000D Controller Index: 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. This command is only available for LE capable controllers and attempting to call it on anything else will yield a "Not Supported" error. 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: Not Supported Invalid Parameters Invalid Index Set Device Class ================ Command Code: 0x000E Controller Index: 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: 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: 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: 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: 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. 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: 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 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. 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: 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. 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: 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 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: 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. 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: 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. 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: 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: 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 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: 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. Possible errors: Invalid Parameters Not Powered Invalid Index Unpair Device Command ===================== Command Code: 0x001B Controller Index: 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. Possible errors: Not Paired Invalid Parameters Not Powered Invalid Index User Confirmation Reply Command =============================== Command Code: 0x001C Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) Return Parameters: Address (6 Octets) Address_Type (1 Octet) This command is used to respond to a User Confirmation Request event. 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 User Confirmation Negative Reply Command ======================================== Command Code: 0x001D Controller Index: 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 User Confirmation Request event. 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 User Passkey Reply Command ========================== Command Code: 0x001E Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) Passkey (4 Octets) Return Parameters: Address (6 Octets) Address_Type (1 Octet) This command is used to respond to a User Confirmation Passkey Request event. 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 User Passkey Negative Reply Command =================================== Command Code: 0x001F Controller Index: 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 User Passkey Request event. 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 Read Local Out Of Band Data Command =================================== Command Code: 0x0020 Controller Index: Command Parameters: Return Parameters: Hash (16 Octets) Randomizer (16 Octets) This command is used to read the local Out of Band data. 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: Not Supported Busy Invalid Parameters Not Powered Invalid Index Add Remote Out Of Band Data Command =================================== Command Code: 0x0021 Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) Hash (16 Octets) Randomizer (16 Octets) Return Parameters: Address (6 Octets) Address_Type (1 Octet) This command is used to provide Out of Band data for a remote device. Provided Out Of Band data is persistent over power down/up toggles. This command generates a Command Complete event on success or failure. Possible errors: Failed Invalid Parameters Not Powered Invalid Index Remove Remote Out Of Band Data Command ====================================== Command Code: 0x0022 Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) Return Parameters: Address (6 Octets) Address_Type (1 Octet) This command is used to remove data added using the Add Remote Out Of Band Data command. This command generates a Command Complete event on success or failure. Possible errors: Invalid Parameters Not Powered Invalid Index Start Discovery Command ======================= Command Code: 0x0023 Controller Index: Command Parameters: Address_Type (1 Octet) Return Parameters: Address_Type (1 Octet) This command is used to start the process of discovering remote devices. A Device Found event will be sent for each discovered device. 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. Possible errors: Busy Not Supported Invalid Parameters Not Powered Invalid Index Stop Discovery Command ====================== Command Code: 0x0024 Controller Index: Command Parameters: Address_Type (1 Octet) Return Parameters: Address_Type (1 Octet) This command is used to stop the discovery process started using the Start Discovery 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: Rejected Invalid Parameters Invalid Index Confirm Name Command ==================== Command Code: 0x0025 Controller Index: 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. Possible errors: Failed Invalid Parameters Invalid Index Block Device Command ==================== Command Code: 0x0026 Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) Return Parameters: Address (6 Octets) Address_Type (1 Octet) This command is used to add a device to the list of devices which should be blocked from being connect to the local controller. This command can be used when the controller is not powered. This command generates a Command Complete event on success or failure. Possible errors: Failed Invalid Parameters Invalid Index Unblock Device Command ====================== Command Code: 0x0027 Controller Index: Command Parameters: Address (6 Octets) Address_Type (1 Octet) Return Parameters: Address (6 Octets) Address_Type (1 Octet) This command is used to remove a device from the list of blocked devices (where it was added to using the Block Device command). This command can be used when the controller is not powered. This command generates a Command Complete event on success or failure. Possible errors: Invalid Parameters Invalid Index Set Device ID Command ===================== Command Code: 0x0028 Controller Index: 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. Possible errors: Invalid Parameters Invalid Index Command Complete Event ====================== Event Code 0x0001 Controller Index: or Event Parameters Command_Opcode (2 Octets) Status (1 Octet) Return_Parameters Command Status Event ==================== Event Code 0x0002 Controller Index: or Event Parameters Command_Opcode (2 Octets) Status (1 Octet) Controller Error Event ====================== Event Code 0x0003 Controller Index: Event Parameters Error_Code (1 Octet) Index Added Event ================= Event Code 0x0004 Controller Index: Event Parameters Index Removed Event =================== Event Code 0x0005 Controller Index: Event Parameters New Settings Event ================== Event Code 0x0006 Controller Index: Event Parameters: Current_Settings (4 Octets) Class Of Device Changed Event ============================= Event Code 0x0007 Controller Index: Event Parameters: Class_Of_Device (3 Octets) Local Name Changed Event ======================== Event Code 0x0008 Controller Index Event Parameters Name (249 Octets) Short_Name (11 Octets) New Link Key Event ================== Event Code 0x0009 Controller Index: 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 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: 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: 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: 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: 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: 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: Event Parameters Address (6 Octets) Address_Type (1 Octet) Authentication Failed Event =========================== Event Code 0x0011 Controller Index: Event Parameters Address (6 Octets) Address_Type (1 Octet) Status (1 Octet) Device Found Event ================== Event Code 0x0012 Controller Index 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 Event Parameters Address_Type (1 Octet) Discovering (1 Octet) Device Blocked Event ==================== Event Code 0x0014 Controller Index Event Parameters Address (6 Octets) Address_Type (1 Octet) Device Unblocked Event ====================== Event Code 0x0015 Controller Index Event Parameters Address (6 Octets) Address_Type (1 Octet) Device Unpaired Event ===================== Event Code 0x0016 Controller Index Event Parameters Address (6 Octets) Address_Type (1 Octet) Passkey Notify Event ==================== Event Code 0x0017 Controller Index Event Parameters Address (6 Octets) Address_Type (1 Octet) Passkey (4 Octets) Entered (1 Octet)