blob: f79a5b421c4e9004054835d36fea33d73f6f1ca6 [file] [log] [blame]
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",
}