forked from go-ble/ble
/
error.go
161 lines (155 loc) · 7.92 KB
/
error.go
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
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",
}