| 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", |
| } |