415 lines
26 KiB
C
415 lines
26 KiB
C
#ifndef RWBLE_HL_ERROR_H_
|
|
#define RWBLE_HL_ERROR_H_
|
|
|
|
|
|
/**
|
|
****************************************************************************************
|
|
* @addtogroup ROOT
|
|
* @brief High layer error codes
|
|
*
|
|
* This module contains the primitives that allow an application accessing and running the
|
|
* BLE protocol stack
|
|
*
|
|
* @{
|
|
****************************************************************************************
|
|
*/
|
|
|
|
|
|
|
|
/// Error code from HCI TO HL Range - from 0x90 to 0xD0
|
|
#define RW_ERR_HCI_TO_HL(err) (((err) != 0) ? ((err) + 0x90) : (0))
|
|
|
|
|
|
/// Error code from HL TO HCI Range - from 0x90 to 0xD0
|
|
#define RW_ERR_HL_TO_HCI(err) (((err) > 0x90) ? ((err) - 0x90) : (0))
|
|
|
|
/**
|
|
* List all HL error codes
|
|
*/
|
|
enum hl_err
|
|
{
|
|
/// No error
|
|
GAP_ERR_NO_ERROR = 0x00,
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
// ------------------------- ATT Specific Error ------------------------------------
|
|
// ----------------------------------------------------------------------------------
|
|
/// No error
|
|
ATT_ERR_NO_ERROR = 0x00,
|
|
/// 0x01: Handle is invalid
|
|
ATT_ERR_INVALID_HANDLE = 0x01,
|
|
/// 0x02: Read permission disabled
|
|
ATT_ERR_READ_NOT_PERMITTED = 0x02,
|
|
/// 0x03: Write permission disabled
|
|
ATT_ERR_WRITE_NOT_PERMITTED = 0x03,
|
|
/// 0x04: Incorrect PDU
|
|
ATT_ERR_INVALID_PDU = 0x04,
|
|
/// 0x05: Authentication privilege not enough
|
|
ATT_ERR_INSUFF_AUTHEN = 0x05,
|
|
/// 0x06: Request not supported or not understood
|
|
ATT_ERR_REQUEST_NOT_SUPPORTED = 0x06,
|
|
/// 0x07: Incorrect offset value
|
|
ATT_ERR_INVALID_OFFSET = 0x07,
|
|
/// 0x08: Authorization privilege not enough
|
|
ATT_ERR_INSUFF_AUTHOR = 0x08,
|
|
/// 0x09: Capacity queue for reliable write reached
|
|
ATT_ERR_PREPARE_QUEUE_FULL = 0x09,
|
|
/// 0x0A: Attribute requested not existing
|
|
ATT_ERR_ATTRIBUTE_NOT_FOUND = 0x0A,
|
|
/// 0x0B: Attribute requested not long
|
|
ATT_ERR_ATTRIBUTE_NOT_LONG = 0x0B,
|
|
/// 0x0C: Encryption size not sufficient
|
|
ATT_ERR_INSUFF_ENC_KEY_SIZE = 0x0C,
|
|
/// 0x0D: Invalid length of the attribute value
|
|
ATT_ERR_INVALID_ATTRIBUTE_VAL_LEN = 0x0D,
|
|
/// 0x0E: Operation not fit to condition
|
|
ATT_ERR_UNLIKELY_ERR = 0x0E,
|
|
/// 0x0F: Attribute requires encryption before operation
|
|
ATT_ERR_INSUFF_ENC = 0x0F,
|
|
/// 0x10: Attribute grouping not supported
|
|
ATT_ERR_UNSUPP_GRP_TYPE = 0x10,
|
|
/// 0x11: Resources not sufficient to complete the request
|
|
ATT_ERR_INSUFF_RESOURCE = 0x11,
|
|
/// 0x80: Application error (also used in PRF Errors)
|
|
ATT_ERR_APP_ERROR = 0x80,
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
// -------------------------- L2C Specific Error ------------------------------------
|
|
// ----------------------------------------------------------------------------------
|
|
/// Message cannot be sent because connection lost. (disconnected)
|
|
L2C_ERR_CONNECTION_LOST = 0x30,
|
|
/// Invalid PDU length exceed MTU
|
|
L2C_ERR_INVALID_MTU_EXCEED = 0x31,
|
|
/// Invalid PDU length exceed MPS
|
|
L2C_ERR_INVALID_MPS_EXCEED = 0x32,
|
|
/// Invalid Channel ID
|
|
L2C_ERR_INVALID_CID = 0x33,
|
|
/// Invalid PDU
|
|
L2C_ERR_INVALID_PDU = 0x34,
|
|
/// Connection refused - no resources available
|
|
L2C_ERR_NO_RES_AVAIL = 0x35,
|
|
/// Connection refused - insufficient authentication
|
|
L2C_ERR_INSUFF_AUTHEN = 0x36,
|
|
/// Connection refused - insufficient authorization
|
|
L2C_ERR_INSUFF_AUTHOR = 0x37,
|
|
/// Connection refused - insufficient encryption key size
|
|
L2C_ERR_INSUFF_ENC_KEY_SIZE = 0x38,
|
|
/// Connection Refused - insufficient encryption
|
|
L2C_ERR_INSUFF_ENC = 0x39,
|
|
/// Connection refused - LE_PSM not supported
|
|
L2C_ERR_LEPSM_NOT_SUPP = 0x3A,
|
|
/// No more credit
|
|
L2C_ERR_INSUFF_CREDIT = 0x3B,
|
|
/// Command not understood by peer device
|
|
L2C_ERR_NOT_UNDERSTOOD = 0x3C,
|
|
/// Credit error, invalid number of credit received
|
|
L2C_ERR_CREDIT_ERROR = 0x3D,
|
|
/// Channel identifier already allocated
|
|
L2C_ERR_CID_ALREADY_ALLOC = 0x3E,
|
|
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
// -------------------------- GAP Specific Error ------------------------------------
|
|
// ----------------------------------------------------------------------------------
|
|
/// Invalid parameters set
|
|
GAP_ERR_INVALID_PARAM = 0x40,
|
|
/// Problem with protocol exchange, get unexpected response
|
|
GAP_ERR_PROTOCOL_PROBLEM = 0x41,
|
|
/// Request not supported by software configuration
|
|
GAP_ERR_NOT_SUPPORTED = 0x42,
|
|
/// Request not allowed in current state.
|
|
GAP_ERR_COMMAND_DISALLOWED = 0x43,
|
|
/// Requested operation canceled.
|
|
GAP_ERR_CANCELED = 0x44,
|
|
/// Requested operation timeout.
|
|
GAP_ERR_TIMEOUT = 0x45,
|
|
/// Link connection lost during operation.
|
|
GAP_ERR_DISCONNECTED = 0x46,
|
|
/// Search algorithm finished, but no result found
|
|
GAP_ERR_NOT_FOUND = 0x47,
|
|
/// Request rejected by peer device
|
|
GAP_ERR_REJECTED = 0x48,
|
|
/// Problem with privacy configuration
|
|
GAP_ERR_PRIVACY_CFG_PB = 0x49,
|
|
/// Duplicate or invalid advertising data
|
|
GAP_ERR_ADV_DATA_INVALID = 0x4A,
|
|
/// Insufficient resources
|
|
GAP_ERR_INSUFF_RESOURCES = 0x4B,
|
|
/// Unexpected Error
|
|
GAP_ERR_UNEXPECTED = 0x4C,
|
|
/// Feature mismatch
|
|
GAP_ERR_MISMATCH = 0x4D,
|
|
/// Limit Reached
|
|
GAP_ERR_LIMIT_REACHED = 0x4E,
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
// ------------------------- GATT Specific Error ------------------------------------
|
|
// ----------------------------------------------------------------------------------
|
|
/// Problem with ATTC protocol response
|
|
GATT_ERR_INVALID_ATT_LEN = 0x50,
|
|
/// Error in service search
|
|
GATT_ERR_INVALID_TYPE_IN_SVC_SEARCH = 0x51,
|
|
/// Invalid write data
|
|
GATT_ERR_WRITE = 0x52,
|
|
/// Signed write error
|
|
GATT_ERR_SIGNED_WRITE = 0x53,
|
|
/// No attribute client defined
|
|
GATT_ERR_ATTRIBUTE_CLIENT_MISSING = 0x54,
|
|
/// No attribute server defined
|
|
GATT_ERR_ATTRIBUTE_SERVER_MISSING = 0x55,
|
|
/// Permission set in service/attribute are invalid
|
|
GATT_ERR_INVALID_PERM = 0x56,
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
// ------------------------- SMP Specific Error -------------------------------------
|
|
// ----------------------------------------------------------------------------------
|
|
// SMP Protocol Errors detected on local device
|
|
/// The user input of pass key failed, for example, the user canceled the operation.
|
|
SMP_ERROR_LOC_PASSKEY_ENTRY_FAILED = 0x61,
|
|
/// The OOB Data is not available.
|
|
SMP_ERROR_LOC_OOB_NOT_AVAILABLE = 0x62,
|
|
/// The pairing procedure cannot be performed as authentication requirements cannot be met
|
|
/// due to IO capabilities of one or both devices.
|
|
SMP_ERROR_LOC_AUTH_REQ = 0x63,
|
|
/// The confirm value does not match the calculated confirm value.
|
|
SMP_ERROR_LOC_CONF_VAL_FAILED = 0x64,
|
|
/// Pairing is not supported by the device.
|
|
SMP_ERROR_LOC_PAIRING_NOT_SUPP = 0x65,
|
|
/// The resultant encryption key size is insufficient for the security requirements of
|
|
/// this device.
|
|
SMP_ERROR_LOC_ENC_KEY_SIZE = 0x66,
|
|
/// The SMP command received is not supported on this device.
|
|
SMP_ERROR_LOC_CMD_NOT_SUPPORTED = 0x67,
|
|
/// Pairing failed due to an unspecified reason.
|
|
SMP_ERROR_LOC_UNSPECIFIED_REASON = 0x68,
|
|
/// Pairing or Authentication procedure is disallowed because too little time has elapsed
|
|
/// since last pairing request or security request.
|
|
SMP_ERROR_LOC_REPEATED_ATTEMPTS = 0x69,
|
|
/// The command length is invalid or a parameter is outside of the specified range.
|
|
SMP_ERROR_LOC_INVALID_PARAM = 0x6A,
|
|
/// Indicates to the remote device that the DHKey Check value received doesn't
|
|
/// match the one calculated by the local device.
|
|
SMP_ERROR_LOC_DHKEY_CHECK_FAILED = 0x6B,
|
|
/// Indicates that the confirm values in the numeric comparison protocol do not match.
|
|
SMP_ERROR_LOC_NUMERIC_COMPARISON_FAILED = 0x6C,
|
|
/// Indicates that the pairing over the LE transport failed due to a Pairing Request sent
|
|
/// over the BR/EDR transport in process.
|
|
SMP_ERROR_LOC_BREDR_PAIRING_IN_PROGRESS = 0x6D,
|
|
/// Indicates that the BR/EDR Link Key generated on the BR/EDR transport cannot be
|
|
/// used to derive and distribute keys for the LE transport.
|
|
SMP_ERROR_LOC_CROSS_TRANSPORT_KEY_GENERATION_NOT_ALLOWED = 0x6E,
|
|
// SMP Protocol Errors detected by remote device
|
|
/// The user input of passkey failed, for example, the user canceled the operation.
|
|
SMP_ERROR_REM_PASSKEY_ENTRY_FAILED = 0x71,
|
|
/// The OOB Data is not available.
|
|
SMP_ERROR_REM_OOB_NOT_AVAILABLE = 0x72,
|
|
/// The pairing procedure cannot be performed as authentication requirements cannot be
|
|
/// met due to IO capabilities of one or both devices.
|
|
SMP_ERROR_REM_AUTH_REQ = 0x73,
|
|
/// The confirm value does not match the calculated confirm value.
|
|
SMP_ERROR_REM_CONF_VAL_FAILED = 0x74,
|
|
/// Pairing is not supported by the device.
|
|
SMP_ERROR_REM_PAIRING_NOT_SUPP = 0x75,
|
|
/// The resultant encryption key size is insufficient for the security requirements of
|
|
/// this device.
|
|
SMP_ERROR_REM_ENC_KEY_SIZE = 0x76,
|
|
/// The SMP command received is not supported on this device.
|
|
SMP_ERROR_REM_CMD_NOT_SUPPORTED = 0x77,
|
|
/// Pairing failed due to an unspecified reason.
|
|
SMP_ERROR_REM_UNSPECIFIED_REASON = 0x78,
|
|
/// Pairing or Authentication procedure is disallowed because too little time has elapsed
|
|
/// since last pairing request or security request.
|
|
SMP_ERROR_REM_REPEATED_ATTEMPTS = 0x79,
|
|
/// The command length is invalid or a parameter is outside of the specified range.
|
|
SMP_ERROR_REM_INVALID_PARAM = 0x7A,
|
|
/// Indicates to the remote device that the DHKey Check value received doesn't
|
|
/// match the one calculated by the local device.
|
|
SMP_ERROR_REM_DHKEY_CHECK_FAILED = 0x7B,
|
|
/// Indicates that the confirm values in the numeric comparison protocol do not match.
|
|
SMP_ERROR_REM_NUMERIC_COMPARISON_FAILED = 0x7C,
|
|
/// Indicates that the pairing over the LE transport failed due to a Pairing Request sent
|
|
/// over the BR/EDR transport in process.
|
|
SMP_ERROR_REM_BREDR_PAIRING_IN_PROGRESS = 0x7D,
|
|
/// Indicates that the BR/EDR Link Key generated on the BR/EDR transport cannot be
|
|
/// used to derive and distribute keys for the LE transport.
|
|
SMP_ERROR_REM_CROSS_TRANSPORT_KEY_GENERATION_NOT_ALLOWED = 0x7E,
|
|
// SMP Errors triggered by local device
|
|
/// The provided resolvable address has not been resolved.
|
|
SMP_ERROR_ADDR_RESOLV_FAIL = 0xD0,
|
|
/// The Signature Verification Failed
|
|
SMP_ERROR_SIGN_VERIF_FAIL = 0xD1,
|
|
/// The encryption procedure failed because the slave device didn't find the LTK
|
|
/// needed to start an encryption session.
|
|
SMP_ERROR_ENC_KEY_MISSING = 0xD2,
|
|
/// The encryption procedure failed because the slave device doesn't support the
|
|
/// encryption feature.
|
|
SMP_ERROR_ENC_NOT_SUPPORTED = 0xD3,
|
|
/// A timeout has occurred during the start encryption session.
|
|
SMP_ERROR_ENC_TIMEOUT = 0xD4,
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
//------------------------ Profiles specific error codes ----------------------------
|
|
// ----------------------------------------------------------------------------------
|
|
/// Application Error
|
|
PRF_APP_ERROR = 0x80,
|
|
/// Invalid parameter in request
|
|
PRF_ERR_INVALID_PARAM = 0x81,
|
|
/// Inexistent handle for sending a read/write characteristic request
|
|
PRF_ERR_INEXISTENT_HDL = 0x82,
|
|
/// Discovery stopped due to missing attribute according to specification
|
|
PRF_ERR_STOP_DISC_CHAR_MISSING = 0x83,
|
|
/// Too many SVC instances found -> protocol violation
|
|
PRF_ERR_MULTIPLE_SVC = 0x84,
|
|
/// Discovery stopped due to found attribute with incorrect properties
|
|
PRF_ERR_STOP_DISC_WRONG_CHAR_PROP = 0x85,
|
|
/// Too many Char. instances found-> protocol violation
|
|
PRF_ERR_MULTIPLE_CHAR = 0x86,
|
|
/// Attribute write not allowed
|
|
PRF_ERR_NOT_WRITABLE = 0x87,
|
|
/// Attribute read not allowed
|
|
PRF_ERR_NOT_READABLE = 0x88,
|
|
/// Request not allowed
|
|
PRF_ERR_REQ_DISALLOWED = 0x89,
|
|
/// Notification Not Enabled
|
|
PRF_ERR_NTF_DISABLED = 0x8A,
|
|
/// Indication Not Enabled
|
|
PRF_ERR_IND_DISABLED = 0x8B,
|
|
/// Feature not supported by profile
|
|
PRF_ERR_FEATURE_NOT_SUPPORTED = 0x8C,
|
|
/// Read value has an unexpected length
|
|
PRF_ERR_UNEXPECTED_LEN = 0x8D,
|
|
/// Disconnection occurs
|
|
PRF_ERR_DISCONNECTED = 0x8E,
|
|
/// Procedure Timeout
|
|
PRF_ERR_PROC_TIMEOUT = 0x8F,
|
|
/// Client characteristic configuration improperly configured
|
|
PRF_CCCD_IMPR_CONFIGURED = 0xFD,
|
|
/// Procedure already in progress
|
|
PRF_PROC_IN_PROGRESS = 0xFE,
|
|
/// Out of Range
|
|
PRF_OUT_OF_RANGE = 0xFF,
|
|
|
|
// ----------------------------------------------------------------------------------
|
|
//-------------------- LL Error codes conveyed to upper layer -----------------------
|
|
// ----------------------------------------------------------------------------------
|
|
/// Unknown HCI Command
|
|
LL_ERR_UNKNOWN_HCI_COMMAND = 0x91,
|
|
/// Unknown Connection Identifier
|
|
LL_ERR_UNKNOWN_CONNECTION_ID = 0x92,
|
|
/// Hardware Failure
|
|
LL_ERR_HARDWARE_FAILURE = 0x93,
|
|
/// BT Page Timeout
|
|
LL_ERR_PAGE_TIMEOUT = 0x94,
|
|
/// Authentication failure
|
|
LL_ERR_AUTH_FAILURE = 0x95,
|
|
/// Pin code missing
|
|
LL_ERR_PIN_MISSING = 0x96,
|
|
/// Memory capacity exceed
|
|
LL_ERR_MEMORY_CAPA_EXCEED = 0x97,
|
|
/// Connection Timeout
|
|
LL_ERR_CON_TIMEOUT = 0x98,
|
|
/// Connection limit Exceed
|
|
LL_ERR_CON_LIMIT_EXCEED = 0x99,
|
|
/// Synchronous Connection limit exceed
|
|
LL_ERR_SYNC_CON_LIMIT_DEV_EXCEED = 0x9A,
|
|
/// ACL Connection exits
|
|
LL_ERR_ACL_CON_EXISTS = 0x9B,
|
|
/// Command Disallowed
|
|
LL_ERR_COMMAND_DISALLOWED = 0x9C,
|
|
/// Connection rejected due to limited resources
|
|
LL_ERR_CONN_REJ_LIMITED_RESOURCES = 0x9D,
|
|
/// Connection rejected due to security reason
|
|
LL_ERR_CONN_REJ_SECURITY_REASONS = 0x9E,
|
|
/// Connection rejected due to unacceptable BD Addr
|
|
LL_ERR_CONN_REJ_UNACCEPTABLE_BDADDR = 0x9F,
|
|
/// Connection rejected due to Accept connection timeout
|
|
LL_ERR_CONN_ACCEPT_TIMEOUT_EXCEED = 0xA0,
|
|
/// Not Supported
|
|
LL_ERR_UNSUPPORTED = 0xA1,
|
|
/// invalid parameters
|
|
LL_ERR_INVALID_HCI_PARAM = 0xA2,
|
|
/// Remote user terminate connection
|
|
LL_ERR_REMOTE_USER_TERM_CON = 0xA3,
|
|
/// Remote device terminate connection due to low resources
|
|
LL_ERR_REMOTE_DEV_TERM_LOW_RESOURCES = 0xA4,
|
|
/// Remote device terminate connection due to power off
|
|
LL_ERR_REMOTE_DEV_POWER_OFF = 0xA5,
|
|
/// Connection terminated by local host
|
|
LL_ERR_CON_TERM_BY_LOCAL_HOST = 0xA6,
|
|
/// Repeated attempts
|
|
LL_ERR_REPEATED_ATTEMPTS = 0xA7,
|
|
/// Pairing not Allowed
|
|
LL_ERR_PAIRING_NOT_ALLOWED = 0xA8,
|
|
/// Unknown PDU Error
|
|
LL_ERR_UNKNOWN_LMP_PDU = 0xA9,
|
|
/// Unsupported remote feature
|
|
LL_ERR_UNSUPPORTED_REMOTE_FEATURE = 0xAA,
|
|
/// Sco Offset rejected
|
|
LL_ERR_SCO_OFFSET_REJECTED = 0xAB,
|
|
/// SCO Interval Rejected
|
|
LL_ERR_SCO_INTERVAL_REJECTED = 0xAC,
|
|
/// SCO air mode Rejected
|
|
LL_ERR_SCO_AIR_MODE_REJECTED = 0xAD,
|
|
/// Invalid LMP parameters
|
|
LL_ERR_INVALID_LMP_PARAM = 0xAE,
|
|
/// Unspecified error
|
|
LL_ERR_UNSPECIFIED_ERROR = 0xAF,
|
|
/// Unsupported LMP Parameter value
|
|
LL_ERR_UNSUPPORTED_LMP_PARAM_VALUE = 0xB0,
|
|
/// Role Change Not allowed
|
|
LL_ERR_ROLE_CHANGE_NOT_ALLOWED = 0xB1,
|
|
/// LMP Response timeout
|
|
LL_ERR_LMP_RSP_TIMEOUT = 0xB2,
|
|
/// LMP Collision
|
|
LL_ERR_LMP_COLLISION = 0xB3,
|
|
/// LMP Pdu not allowed
|
|
LL_ERR_LMP_PDU_NOT_ALLOWED = 0xB4,
|
|
/// Encryption mode not accepted
|
|
LL_ERR_ENC_MODE_NOT_ACCEPT = 0xB5,
|
|
/// Link Key Cannot be changed
|
|
LL_ERR_LINK_KEY_CANT_CHANGE = 0xB6,
|
|
/// Quality of Service not supported
|
|
LL_ERR_QOS_NOT_SUPPORTED = 0xB7,
|
|
/// Error, instant passed
|
|
LL_ERR_INSTANT_PASSED = 0xB8,
|
|
/// Pairing with unit key not supported
|
|
LL_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUP = 0xB9,
|
|
/// Transaction collision
|
|
LL_ERR_DIFF_TRANSACTION_COLLISION = 0xBA,
|
|
/// Unacceptable parameters
|
|
LL_ERR_QOS_UNACCEPTABLE_PARAM = 0xBC,
|
|
/// Quality of Service rejected
|
|
LL_ERR_QOS_REJECTED = 0xBD,
|
|
/// Channel class not supported
|
|
LL_ERR_CHANNEL_CLASS_NOT_SUP = 0xBE,
|
|
/// Insufficient security
|
|
LL_ERR_INSUFFICIENT_SECURITY = 0xBF,
|
|
/// Parameters out of mandatory range
|
|
LL_ERR_PARAM_OUT_OF_MAND_RANGE = 0xC0,
|
|
/// Role switch pending
|
|
LL_ERR_ROLE_SWITCH_PEND = 0xC2,
|
|
/// Reserved slot violation
|
|
LL_ERR_RESERVED_SLOT_VIOLATION = 0xC4,
|
|
/// Role Switch fail
|
|
LL_ERR_ROLE_SWITCH_FAIL = 0xC5,
|
|
/// Error, EIR too large
|
|
LL_ERR_EIR_TOO_LARGE = 0xC6,
|
|
/// Simple pairing not supported by host
|
|
LL_ERR_SP_NOT_SUPPORTED_HOST = 0xC7,
|
|
/// Host pairing is busy
|
|
LL_ERR_HOST_BUSY_PAIRING = 0xC8,
|
|
/// Controller is busy
|
|
LL_ERR_CONTROLLER_BUSY = 0xCA,
|
|
/// Unacceptable connection initialization
|
|
LL_ERR_UNACCEPTABLE_CONN_INT = 0xCB,
|
|
/// Direct Advertising Timeout
|
|
LL_ERR_DIRECT_ADV_TO = 0xCC,
|
|
/// Connection Terminated due to a MIC failure
|
|
LL_ERR_TERMINATED_MIC_FAILURE = 0xCD,
|
|
/// Connection failed to be established
|
|
LL_ERR_CONN_FAILED_TO_BE_EST = 0xCE,
|
|
};
|
|
|
|
/// @} RWBLE_HL_ERROR_H
|
|
|
|
#endif // RWBLE_HL_ERROR_H_
|