blob: 0a23b6a39e75244fddbdaa761a9d8e7ee10b5357 [file] [log] [blame]
package hci
import "errors"
// errors
var (
ErrBusyScanning = errors.New("busy scanning")
ErrBusyAdvertising = errors.New("busy advertising")
ErrBusyDialing = errors.New("busy dialing")
ErrBusyListening = errors.New("busy listening")
ErrInvalidAddr = errors.New("invalid address")
)
// HCI Command Errors [Vol2, Part D, 1.3 ]
// FIXME: Terrible shorthand. Name them properly.
const (
ErrUnknownCommand ErrCommand = 0x01 // Unknown HCI Command
ErrConnID ErrCommand = 0x02 // Unknown Connection Identifier
ErrHardware ErrCommand = 0x03 // Hardware Failure
ErrPageTimeout ErrCommand = 0x04 // Page Timeout
ErrAuth ErrCommand = 0x05 // Authentication Failure
ErrPINMissing ErrCommand = 0x06 // PIN or Key Missing
ErrMemoryCapacity ErrCommand = 0x07 // Memory Capacity Exceeded
ErrConnTimeout ErrCommand = 0x08 // Connection Timeout
ErrConnLimit ErrCommand = 0x09 // Connection Limit Exceeded
ErrSCOConnLimit ErrCommand = 0x0A // Synchronous Connection Limit To A Device Exceeded
ErrACLConnExists ErrCommand = 0x0B // ACL Connection Already Exists
ErrDisallowed ErrCommand = 0x0C // Command Disallowed
ErrLimitedResource ErrCommand = 0x0D // Connection Rejected due to Limited Resources
ErrSecurity ErrCommand = 0x0E // Connection Rejected Due To Security Reasons
ErrBDADDR ErrCommand = 0x0F // Connection Rejected due to Unacceptable BD_ADDR
ErrConnAcceptTimeout ErrCommand = 0x10 // Connection Accept Timeout Exceeded
ErrUnsupportedParams ErrCommand = 0x11 // Unsupported Feature or Parameter Value
ErrInvalidParams ErrCommand = 0x12 // Invalid HCI Command Parameters
ErrRemoteUser ErrCommand = 0x13 // Remote User Terminated Connection
ErrRemoteLowResources ErrCommand = 0x14 // Remote Device Terminated Connection due to Low Resources
ErrRemotePowerOff ErrCommand = 0x15 // Remote Device Terminated Connection due to Power Off
ErrLocalHost ErrCommand = 0x16 // Connection Terminated By Local Host
ErrRepeatedAttempts ErrCommand = 0x17 // Repeated Attempts
ErrPairingNotAllowed ErrCommand = 0x18 // Pairing Not Allowed
ErrUnknownLMP ErrCommand = 0x19 // Unknown LMP PDU
ErrUnsupportedLMP ErrCommand = 0x1A // Unsupported Remote Feature / Unsupported LMP Feature
ErrSCOOffset ErrCommand = 0x1B // SCO Offset Rejected
ErrSCOInterval ErrCommand = 0x1C // SCO Interval Rejected
ErrSCOAirMode ErrCommand = 0x1D // SCO Air Mode Rejected
ErrInvalidLLParams ErrCommand = 0x1E // Invalid LMP Parameters / Invalid LL Parameters
ErrUnspecified ErrCommand = 0x1F // Unspecified Error
ErrUnsupportedLLParams ErrCommand = 0x20 // Unsupported LMP Parameter Value / Unsupported LL Parameter Value
ErrRoleChangeNotAllowed ErrCommand = 0x21 // Role Change Not Allowed
ErrLLResponseTimeout ErrCommand = 0x22 // LMP Response Timeout / LL Response Timeout
ErrLMPTransColl ErrCommand = 0x23 // LMP Error Transaction Collision
ErrLMPPDU ErrCommand = 0x24 // LMP PDU Not Allowed
ErrEncNotAccepted ErrCommand = 0x25 // Encryption Mode Not Acceptable
ErrLinkKey ErrCommand = 0x26 // Link Key cannot be Changed
ErrQoSNotSupported ErrCommand = 0x27 // Requested QoS Not Supported
ErrInstantPassed ErrCommand = 0x28 // Instant Passed
ErrUnitKeyNotSupported ErrCommand = 0x29 // Pairing With Unit Key Not Supported
ErrDifferentTransColl ErrCommand = 0x2A // Different Transaction Collision
ErrQOSParameter ErrCommand = 0x2C // QoS Unacceptable Parameter
ErrQOSReject ErrCommand = 0x2D // QoS Rejected
ErrChannelClass ErrCommand = 0x2E // Channel Classification Not Supported
ErrInsufficientSecurity ErrCommand = 0x2F // Insufficient Security
ErrOutOfRange ErrCommand = 0x30 // Parameter Out Of Mandatory Range
ErrRoleSwitchPending ErrCommand = 0x32 // Role Switch Pending
ErrReservedSlot ErrCommand = 0x34 // Reserved Slot Violation
ErrRoleSwitch ErrCommand = 0x35 // Role Switch Failed
ErrEIRTooLarge ErrCommand = 0x36 // Extended Inquiry Response Too Large
ErrSecureSimplePairing ErrCommand = 0x37 // Secure Simple Pairing Not Supported By Host
ErrHostBusy ErrCommand = 0x38 // Host Busy - Pairing
ErrNoChannel ErrCommand = 0x39 // Connection Rejected due to No Suitable Channel Found
ErrControllerBusy ErrCommand = 0x3A // Controller Busy
ErrConnParams ErrCommand = 0x3B // Unacceptable Connection Parameters
ErrDirAdvTimeout ErrCommand = 0x3C // Directed Advertising Timeout
ErrMIC ErrCommand = 0x3D // Connection Terminated due to MIC Failure
ErrEstablished ErrCommand = 0x3E // Connection Failed to be Established
ErrMACConn ErrCommand = 0x3F // MAC Connection Failed
ErrCoarseClock ErrCommand = 0x40 // Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging
// 0x2B // Reserved
// 0x31 // Reserved
// 0x33 // Reserved
)
// ErrCommand [Vol2, Part D, 1.3 ]
type ErrCommand byte
func (e ErrCommand) Error() string {
if s, ok := errCmd[e]; ok {
return s
}
// A Host shall consider any error code that it does not explicitly
// understand equivalent to the “Unspecified Error (0x1F).”
return errCmd[0x1F]
}
var errCmd = map[ErrCommand]string{
0x00: "Success",
0x01: "Unknown HCI Command",
0x02: "Unknown Connection Identifier",
0x03: "Hardware Failure",
0x04: "Page Timeou",
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: "ACL 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 / Unsupported LMP 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",
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",
0x2C: "QoS Unacceptable Parameter",
0x2D: "QoS Rejected",
0x2E: "Channel Classification Not Supported",
0x2F: "Insufficient Security",
0x30: "Parameter Out Of Mandatory Range",
0x31: "Reserved",
0x32: "Role Switch Pending",
0x33: "Reserved",
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: "Directed Advertising Timeout",
0x3D: "Connection Terminated due to MIC Failure",
0x3E: "Connection Failed to be Established",
0x3F: "MAC Connection Failed",
0x40: "Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging",
}