Skip to main content

Bluetooth Core Specification

Part F. Controller Error Codes

vAtlanta r00

1. Overview of error codes

This document lists the various possible error codes. When a command fails, or an LMP or LL message needs to indicate a failure, error codes are used to indicate the reason for the error. Error codes have a size of one octet.

1.1. Usage descriptions

The purpose of this section is to give descriptions of how the error codes should be used. It is beyond the scope of this document to give detailed descriptions of all situations where error codes can be used, especially as this is implementation dependent.

1.2. [This section is no longer used]
1.3. List of error codes

The error code of 0x00 means Success. The possible range of failure error codes is 0x01 to 0xFF. Section 2 provides an error code usage description for each failure error code.

Values marked as “Reserved for future use” or not listed in Table 1.1 can be used in future versions of the specification. A Host shall consider any error code that it does not explicitly understand equivalent to the error code Unspecified Error (0x1F).

Error Code

Name

0x00

Success

0x01

Unknown HCI Command

0x02

Unknown Connection Identifier

0x03

Hardware Failure

0x04

Page Timeout

0x05

Authentication Failure

0x06

PIN or Key Missing

0x07

Memory Capacity Exceeded

0x08

Connection Timeout

0x09

Connection Limit Exceeded

0x0A

Synchronous Connection Limit To A Device Exceeded

0x0B

Connection Already Exists

0x0C

Command Disallowed

0x0D

Connection Rejected due to Limited Resources

0x0E

Connection Rejected Due To Security Reasons

0x0F

Connection Rejected due to Unacceptable BD_ADDR

0x10

Connection Accept Timeout Exceeded

0x11

Unsupported Feature or Parameter Value

0x12

Invalid HCI Command Parameters

0x13

Remote User Terminated Connection

0x14

Remote Device Terminated Connection due to Low Resources

0x15

Remote Device Terminated Connection due to Power Off

0x16

Connection Terminated By Local Host

0x17

Repeated Attempts

0x18

Pairing Not Allowed

0x19

Unknown LMP PDU

0x1A

Unsupported Remote Feature

0x1B

SCO Offset Rejected

0x1C

SCO Interval Rejected

0x1D

SCO Air Mode Rejected

0x1E

Invalid LMP Parameters / Invalid LL Parameters

0x1F

Unspecified Error

0x20

Unsupported LMP Parameter Value / Unsupported LL Parameter Value

0x21

Role Change Not Allowed

0x22

LMP Response Timeout / LL Response Timeout

0x23

LMP Error Transaction Collision / LL Procedure Collision

0x24

LMP PDU Not Allowed

0x25

Encryption Mode Not Acceptable

0x26

Link Key cannot be Changed

0x27

Requested QoS Not Supported

0x28

Instant Passed

0x29

Pairing With Unit Key Not Supported

0x2A

Different Transaction Collision

0x2B

Reserved for future use

0x2C

QoS Unacceptable Parameter

0x2D

QoS Rejected

0x2E

Channel Classification Not Supported

0x2F

Insufficient Security

0x30

Parameter Out Of Mandatory Range

0x31

Reserved for future use

0x32

Role Switch Pending

0x33

Reserved for future use

0x34

Reserved Slot Violation

0x35

Role Switch Failed

0x36

Extended Inquiry Response Too Large

0x37

Secure Simple Pairing Not Supported By Host

0x38

Host Busy - Pairing

0x39

Connection Rejected due to No Suitable Channel Found

0x3A

Controller Busy

0x3B

Unacceptable Connection Parameters

0x3C

Advertising Timeout

0x3D

Connection Terminated due to MIC Failure

0x3E

Connection Failed to be Established / Synchronization Timeout

0x3F

Previously used

0x40

Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging

0x41

Type0 Submap Not Defined

0x42

Unknown Advertising Identifier

0x43

Limit Reached

0x44

Operation Cancelled by Host

0x45

Packet Too Long

0x46

Too Late

0x47

Too Early

Table 1.1: List of possible error codes


2. Error code descriptions

2.1. Unknown HCI command (0x01)

The Unknown HCI Command error code indicates that the Controller does not understand the HCI Command packet opcode that the Host sent. The opcode given might not correspond to any of the opcodes specified in this document, or any vendor-specific opcodes, or the command may have not been implemented.

2.2. Unknown Connection Identifier (0x02)

The Unknown Connection Identifier error code indicates that a command was sent from the Host that should identify a connection, but that connection does not exist or does not identify the correct type of connection.

2.3. Hardware Failure (0x03)

The Hardware Failure error code indicates to the Host that something in the Controller has failed in a manner that cannot be described with any other error code. The meaning implied with this error code is implementation dependent.

2.4. Page Timeout (0x04)

The Page Timeout error code indicates that a page timed out because of the Page Timeout configuration parameter. This error code may occur only with the HCI_Remote_Name_Request and HCI_Create_Connection commands.

2.5. Authentication Failure (0x05)

The Authentication Failure error code indicates that pairing or authentication failed due to incorrect results in the pairing or authentication procedure. This could be due to an incorrect PIN or Link Key.

2.6. PIN or Key Missing (0x06)

The PIN or Key Missing error code is used when pairing failed because of a missing PIN, or authentication failed because of a missing Key.

2.7. Memory Capacity Exceeded (0x07)

The Memory Capacity Exceeded error code indicates to the Host that the Controller has run out of memory to store new parameters.

2.8. Connection Timeout (0x08)

The Connection Timeout error code indicates that either the link supervision timeout has expired for a given connection or that the synchronization timeout has expired for a given broadcast.

2.9. Connection Limit Exceeded (0x09)

The Connection Limit Exceeded error code indicates that an attempt to create another connection failed because the Controller is already at its limit of the number of connections it can support. The number of connections a device can support is implementation dependent.

2.10. Synchronous Connection Limit to a Device Exceeded (0x0A)

The Synchronous Connection Limit to a Device Exceeded error code indicates that the Controller has reached the limit to the number of synchronous connections that can be achieved to a device. The number of synchronous connections a device can support is implementation dependent.

2.11. Connection Already Exists (0x0B)

The Connection Already Exists error code indicates that an attempt was made to create a new Connection to a device when there is already a connection to this device and multiple connections to the same device are not permitted.

2.12. Command Disallowed (0x0C)

The Command Disallowed error code indicates that the command requested cannot be executed because the Controller is in a state where it cannot process this command at this time. This error shall not be used for command opcodes where the error code Unknown HCI Command is valid.

2.13. Connection Rejected due to Limited Resources (0x0D)

The Connection Rejected Due To Limited Resources error code indicates that a connection was rejected due to limited resources.

2.14. Connection Rejected due to Security Reasons (0x0E)

The Connection Rejected Due To Security Reasons error code indicates that a connection was rejected due to security requirements not being fulfilled, like authentication or pairing.

2.15. Connection Rejected due to Unacceptable BD_ADDR (0x0F)

The Connection Rejected due to Unacceptable BD_ADDR error code indicates that a connection was rejected because this device does not accept the BD_ADDR. This may be because the device will only accept connections from specific BD_ADDRs.

2.16. Connection Accept Timeout Exceeded (0x10)

The Connection Accept Timeout Exceeded error code indicates that the Connection Accept Timeout has been exceeded for this connection attempt.

2.17. Unsupported Feature or Parameter Value (0x11)

The Unsupported Feature Or Parameter Value error code indicates that a feature or parameter value in the HCI command is not supported. This error code shall not be used in an LMP PDU.

2.18. Invalid HCI Command Parameters (0x12)

The Invalid HCI Command Parameters error code indicates that at least one of the HCI command parameters is invalid.

This shall be used when:

  • the parameter total length is invalid.

  • a command parameter is an invalid type.

  • a connection identifier does not match the corresponding event.

  • a parameter is odd when it is required to be even.

  • a parameter is outside of the specified range.

  • two or more parameter values have inconsistent values.

Note

Note: An invalid type can be, for example, when a SCO Connection_Handle is used where an ACL Connection_Handle is required.

2.19. Remote User Terminated Connection (0x13)

The Remote User Terminated Connection error code indicates that the user on the remote device either terminated the connection or stopped broadcasting packets.

2.20. Remote Device Terminated Connection due to Low Resources (0x14)

The Remote Device Terminated Connection due to Low Resources error code indicates that the remote device terminated the connection because of low resources.

2.21. Remote Device Terminated Connection due to Power Off (0x15)

The Remote Device Terminated Connection due to Power Off error code indicates that the remote device terminated the connection because the device is about to power off.

2.22. Connection Terminated by Local Host (0x16)

The Connection Terminated By Local Host error code indicates that either the local device terminated the connection, terminated synchronization with a broadcaster, or terminated broadcasting packets.

2.23. Repeated Attempts (0x17)

The Repeated Attempts error code indicates that the Controller is disallowing an authentication or pairing procedure because too little time has elapsed since the last authentication or pairing attempt failed.

2.24. Pairing not Allowed (0x18)

The Pairing Not Allowed error code indicates that the device does not allow pairing. For example, when a device only allows pairing during a certain time window after some user input allows pairing.

2.25. Unknown LMP PDU (0x19)

The Unknown LMP PDU error code indicates that the Controller has received an unknown LMP opcode.

2.26. Unsupported Remote Feature (0x1A)

The Unsupported Remote Feature error code indicates that the remote device does not support the feature associated with the issued command, LMP PDU, or Link Layer Control PDU.

2.27. SCO Offset Rejected (0x1B)

The SCO Offset Rejected error code indicates that the offset requested in the LMP_SCO_LINK_REQ PDU has been rejected.

2.28. SCO Interval Rejected (0x1C)

The SCO Interval Rejected error code indicates that the interval requested in the LMP_SCO_LINK_REQ PDU has been rejected.

2.29. SCO Air Mode Rejected (0x1D)

The SCO Air Mode Rejected error code indicates that the air mode requested in the LMP_SCO_LINK_REQ PDU has been rejected.

2.30. Invalid LMP Parameters / Invalid LL Parameters (0x1E)

The Invalid LMP Parameters / Invalid LL Parameters error code indicates that some LMP PDU / LL Control PDU parameters were invalid. This shall be used when:

  • the PDU length is invalid.

  • a parameter is odd when it is required to be even.

  • a parameter is outside of the specified range.

  • two or more parameters have inconsistent values.

2.31. Unspecified Error (0x1F)

The Unspecified Error error code indicates that no other error code specified is appropriate to use.

2.32. Unsupported LMP Parameter Value / Unsupported LL Parameter Value (0x20)

The Unsupported LMP Parameter Value / Unsupported LL Parameter Value error code indicates that an LMP PDU or an LL Control PDU contains at least one parameter value that is not supported by the Controller at this time. This is normally used after a long negotiation procedure, for example during an LMP_HOLD_REQ, LMP_SNIFF_REQ and LMP_ENCRYPTION_KEY_SIZE_REQ PDU exchanges. This may be used by the Link Layer, for example during the Connection Parameters Request Link Layer Control procedure.

2.33. Role Change not Allowed (0x21)

The Role Change Not Allowed error code indicates that a Controller will not allow a role change at this time.

2.34. LMP Response Timeout / LL Response Timeout (0x22)

The LMP Response Timeout / LL Response Timeout error code indicates that an LMP transaction failed to respond within the LMP response timeout or an LL transaction failed to respond within the LL response timeout.

2.35. LMP Error Transaction Collision / LL Procedure Collision (0x23)

The LMP Error Transaction Collision / LL Procedure Collision error code indicates that an LMP transaction or LL procedure has collided with the same transaction or procedure that is already in progress.

2.36. LMP PDU not Allowed (0x24)

The LMP PDU Not Allowed error code indicates that a Controller sent an LMP PDU with an opcode that was not allowed.

2.37. Encryption Mode not Acceptable (0x25)

The Encryption Mode Not Acceptable error code indicates that the requested encryption mode is not acceptable at this time.

2.38. Link Key cannot be Changed (0x26)

The Link Key cannot be Changed error code indicates that a link key cannot be changed because a fixed unit key is being used.

2.39. Requested QoS not Supported (0x27)

The Requested QoS Not Supported error code indicates that the requested Quality of Service is not supported.

2.40. Instant Passed (0x28)

The Instant Passed error code indicates that an LMP PDU or LL PDU that includes an instant cannot be performed because the instant when this would have occurred has passed.

2.41. Pairing with Unit Key not Supported (0x29)

The Pairing With Unit Key Not Supported error code indicates that it was not possible to pair as a unit key was requested and it is not supported.

2.42. Different Transaction Collision (0x2A)

The Different Transaction Collision error code indicates that an LMP transaction or LL Procedure was started that collides with an ongoing transaction.

2.43. QoS Unacceptable Parameter (0x2C)

The QoS Unacceptable Parameter error code indicates that the specified quality of service parameters could not be accepted at this time, but other parameters may be acceptable.

2.44. QoS Rejected (0x2D)

The QoS Rejected error code indicates that the specified quality of service parameters cannot be accepted and QoS negotiation should be terminated.

2.45. Channel Assessment Not Supported (0x2E)

The Channel Assessment Not Supported error code indicates that the Controller cannot perform channel assessment because it is not supported.

2.46. Insufficient Security (0x2F)

The Insufficient Security error code indicates that the HCI command or LMP PDU sent is only possible on an encrypted link.

2.47. Parameter Out of Mandatory Range (0x30)

The Parameter Out Of Mandatory Range error code indicates that a parameter value requested is outside the mandatory range of parameters for the given HCI command or LMP PDU and the recipient does not accept that value.

2.48. Role Switch Pending (0x32)

The Role Switch Pending error code indicates that a Role Switch is pending. This can be used when an HCI command or LMP PDU cannot be accepted because of a pending role switch. This can also be used to notify a peer device about a pending role switch.

2.49. Reserved Slot Violation (0x34)

The Reserved Slot Violation error code indicates that the current Synchronous negotiation was terminated with the negotiation state set to Reserved Slot Violation.

2.50. Role Switch Failed (0x35)

The Role Switch Failed error code indicates that a role switch was attempted but it failed and the original piconet structure is restored. The switch may have failed because the TDD switch or piconet switch failed.

2.51. Extended Inquiry Response too Large (0x36)

The Extended Inquiry Response Too Large error code indicates that the extended inquiry response, with the requested requirements for FEC, is too large to fit in any of the packet types supported by the Controller.

2.52. Secure Simple Pairing not Supported by Host (0x37)

The Secure Simple Pairing Not Supported by Host error code indicates that the IO capabilities request or response was rejected because the sending Host does not support Secure Simple Pairing even though the receiving Link Manager does.

2.53. Host Busy–Pairing (0x38)

The Host Busy - Pairing error code indicates that the Host is busy with another pairing operation and unable to support the requested pairing. The receiving device should retry pairing again later.

2.54. Connection Rejected due to no Suitable Channel Found (0x39)

The Connection Rejected due to No Suitable Channel Found error code indicates that the Controller could not calculate an appropriate value for the Channel selection operation.

2.55. Controller Busy (0x3A)

The Controller Busy error code indicates that the operation was rejected because the Controller was busy and unable to process the request.

2.56. Unacceptable Connection Parameters (0x3B)

The Unacceptable Connection Parameters error code indicates that the remote device either terminated the connection or rejected a request because of one or more unacceptable connection parameters.

2.57. Advertising Timeout (0x3C)

[1] Formerly called Directed Advertising Timeout

The Advertising Timeout error code indicates that advertising for a fixed duration completed or, for directed advertising, that advertising completed without a connection being created.

2.58. Connection Terminated due to MIC Failure (0x3D)

The Connection Terminated Due to MIC Failure error code indicates that either the connection or the synchronization was terminated because the Message Integrity Check (MIC) failed on a received packet.

2.59. Connection Failed to be Established / Synchronization Timeout (0x3E)

The Connection Failed to be Established / Synchronization Timeout error code indicates that the LL initiated a connection or initiated synchronization to periodic advertising but the connection has failed to be established or the Link Layer failed to synchronize with the periodic advertising within 6 periodic advertising events of the first attempt.

2.60. [This section is no longer used]
2.61. Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging (0x40)

The Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging error code indicates that the Central, at this time, is unable to make a coarse adjustment to the piconet clock, using the supplied parameters. Instead the Central will attempt to move the clock using clock dragging.

2.62. Type0 Submap not Defined (0x41)

The Type0 Submap Not Defined error code indicates that the LMP PDU is rejected because the Type 0 submap is not currently defined.

2.63. Unknown Advertising Identifier (0x42)

The Unknown Advertising Identifier error code indicates that a command was sent from the Host that should identify an Advertising or Sync handle, but the Advertising or Sync handle does not exist.

2.64. Limit Reached (0x43)

The Limit Reached error code indicates that number of operations requested has been reached and has indicated the completion of the activity (e.g., advertising or scanning).

2.65. Operation Cancelled by Host (0x44)

The Operation Cancelled by Host error code indicates a request to the Controller issued by the Host and still pending was successfully canceled.

2.66. Packet Too Long (0x45)

The Packet Too Long error code indicates that an attempt was made to send or receive a packet that exceeds the maximum allowed packet length.

2.67. Too Late (0x46)

The Too Late error code indicates that information was provided too late to the Controller.

2.68. Too Early (0x47)

The Too Early error code indicates that information was provided too early to the Controller.




[1] Formerly called Directed Advertising Timeout