76 lines
4.1 KiB
Go
76 lines
4.1 KiB
Go
|
package ble
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
// ErrEIRPacketTooLong is the error returned when an AdvertisingPacket
|
||
|
// or ScanResponsePacket is too long.
|
||
|
var ErrEIRPacketTooLong = errors.New("max packet length is 31")
|
||
|
|
||
|
// ErrNotImplemented means the functionality is not implemented.
|
||
|
var ErrNotImplemented = errors.New("not implemented")
|
||
|
|
||
|
// ATTError is the error code of Attribute Protocol [Vol 3, Part F, 3.4.1.1].
|
||
|
type ATTError byte
|
||
|
|
||
|
// ATTError is the error code of Attribute Protocol [Vol 3, Part F, 3.4.1.1].
|
||
|
const (
|
||
|
ErrSuccess ATTError = 0x00 // ErrSuccess measn the operation is success.
|
||
|
ErrInvalidHandle ATTError = 0x01 // ErrInvalidHandle means the attribute handle given was not valid on this server.
|
||
|
ErrReadNotPerm ATTError = 0x02 // ErrReadNotPerm eans the attribute cannot be read.
|
||
|
ErrWriteNotPerm ATTError = 0x03 // ErrWriteNotPerm eans the attribute cannot be written.
|
||
|
ErrInvalidPDU ATTError = 0x04 // ErrInvalidPDU means the attribute PDU was invalid.
|
||
|
ErrAuthentication ATTError = 0x05 // ErrAuthentication means the attribute requires authentication before it can be read or written.
|
||
|
ErrReqNotSupp ATTError = 0x06 // ErrReqNotSupp means the attribute server does not support the request received from the client.
|
||
|
ErrInvalidOffset ATTError = 0x07 // ErrInvalidOffset means the specified was past the end of the attribute.
|
||
|
ErrAuthorization ATTError = 0x08 // ErrAuthorization means the attribute requires authorization before it can be read or written.
|
||
|
ErrPrepQueueFull ATTError = 0x09 // ErrPrepQueueFull means too many prepare writes have been queued.
|
||
|
ErrAttrNotFound ATTError = 0x0a // ErrAttrNotFound means no attribute found within the given attribute handle range.
|
||
|
ErrAttrNotLong ATTError = 0x0b // ErrAttrNotLong means the attribute cannot be read or written using the Read Blob Request.
|
||
|
ErrInsuffEncrKeySize ATTError = 0x0c // ErrInsuffEncrKeySize means the Encryption Key Size used for encrypting this link is insufficient.
|
||
|
ErrInvalAttrValueLen ATTError = 0x0d // ErrInvalAttrValueLen means the attribute value length is invalid for the operation.
|
||
|
ErrUnlikely ATTError = 0x0e // ErrUnlikely means the attribute request that was requested has encountered an error that was unlikely, and therefore could not be completed as requested.
|
||
|
ErrInsuffEnc ATTError = 0x0f // ErrInsuffEnc means the attribute requires encryption before it can be read or written.
|
||
|
ErrUnsuppGrpType ATTError = 0x10 // ErrUnsuppGrpType means the attribute type is not a supported grouping attribute as defined by a higher layer specification.
|
||
|
ErrInsuffResources ATTError = 0x11 // ErrInsuffResources means insufficient resources to complete the request.
|
||
|
)
|
||
|
|
||
|
func (e ATTError) Error() string {
|
||
|
switch i := int(e); {
|
||
|
case i < 0x11:
|
||
|
return errName[e]
|
||
|
case i >= 0x12 && i <= 0x7F: // Reserved for future use.
|
||
|
return fmt.Sprintf("reserved error code (0x%02X)", i)
|
||
|
case i >= 0x80 && i <= 0x9F: // Application error, defined by higher level.
|
||
|
return fmt.Sprintf("application error code (0x%02X)", i)
|
||
|
case i >= 0xA0 && i <= 0xDF: // Reserved for future use.
|
||
|
return fmt.Sprintf("reserved error code (0x%02X)", i)
|
||
|
case i >= 0xE0 && i <= 0xFF: // Common profile and service error codes.
|
||
|
return "profile or service error"
|
||
|
}
|
||
|
return "unknown error"
|
||
|
}
|
||
|
|
||
|
var errName = map[ATTError]string{
|
||
|
ErrSuccess: "success",
|
||
|
ErrInvalidHandle: "invalid handle",
|
||
|
ErrReadNotPerm: "read not permitted",
|
||
|
ErrWriteNotPerm: "write not permitted",
|
||
|
ErrInvalidPDU: "invalid PDU",
|
||
|
ErrAuthentication: "insufficient authentication",
|
||
|
ErrReqNotSupp: "request not supported",
|
||
|
ErrInvalidOffset: "invalid offset",
|
||
|
ErrAuthorization: "insufficient authorization",
|
||
|
ErrPrepQueueFull: "prepare queue full",
|
||
|
ErrAttrNotFound: "attribute not found",
|
||
|
ErrAttrNotLong: "attribute not long",
|
||
|
ErrInsuffEncrKeySize: "insufficient encryption key size",
|
||
|
ErrInvalAttrValueLen: "invalid attribute value length",
|
||
|
ErrUnlikely: "unlikely error",
|
||
|
ErrInsuffEnc: "insufficient encryption",
|
||
|
ErrUnsuppGrpType: "unsupported group type",
|
||
|
ErrInsuffResources: "insufficient resources",
|
||
|
}
|