fix: Added a function for printing HCI error definition

This commit is contained in:
Astha Verma
2024-10-25 11:58:40 +05:30
parent 275e6820cd
commit 46f1139a05
+167 -2
View File
@@ -32,6 +32,172 @@
#define BLE_HCI_CMD_TIMEOUT_MS 2000
/* HCI ERROR */
#define BLE_ERR_UNKNOWN_HCI_CMD 0x01
#define BLE_ERR_UNK_CONN_ID 0x02
#define BLE_ERR_HW_FAIL 0x03
#define BLE_ERR_PAGE_TMO 0x04
#define BLE_ERR_AUTH_FAIL 0x05
#define BLE_ERR_PINKEY_MISSING 0x06
#define BLE_ERR_MEM_CAPACITY 0x07
#define BLE_ERR_CONN_SPVN_TMO 0x08
#define BLE_ERR_CONN_LIMIT 0x09
#define BLE_ERR_SYNCH_CONN_LIMIT 0x0a
#define BLE_ERR_ACL_CONN_EXISTS 0x0b
#define BLE_ERR_CMD_DISALLOWED 0x0c
#define BLE_ERR_CONN_REJ_RESOURCES 0x0d
#define BLE_ERR_CONN_REJ_SECURITY 0x0e
#define BLE_ERR_CONN_REJ_BD_ADDR 0x0f
#define BLE_ERR_CONN_ACCEPT_TMO 0x10
#define BLE_ERR_UNSUPPORTED 0x11
#define BLE_ERR_INV_HCI_CMD_PARMS 0x12
#define BLE_ERR_REM_USER_CONN_TERM 0x13
#define BLE_ERR_RD_CONN_TERM_RESRCS 0x14
#define BLE_ERR_RD_CONN_TERM_PWROFF 0x15
#define BLE_ERR_CONN_TERM_LOCAL 0x16
#define BLE_ERR_REPEATED_ATTEMPTS 0x17
#define BLE_ERR_NO_PAIRING 0x18
#define BLE_ERR_UNK_LMP 0x19
#define BLE_ERR_UNSUPP_REM_FEATURE 0x1a
#define BLE_ERR_SCO_OFFSET 0x1b
#define BLE_ERR_SCO_ITVL 0x1c
#define BLE_ERR_SCO_AIR_MODE 0x1d
#define BLE_ERR_INV_LMP_LL_PARM 0x1e
#define BLE_ERR_UNSPECIFIED 0x1f
#define BLE_ERR_UNSUPP_LMP_LL_PARM 0x20
#define BLE_ERR_NO_ROLE_CHANGE 0x21
#define BLE_ERR_LMP_LL_RSP_TMO 0x22
#define BLE_ERR_LMP_COLLISION 0x23
#define BLE_ERR_LMP_PDU 0x24
#define BLE_ERR_ENCRYPTION_MODE 0x25
#define BLE_ERR_LINK_KEY_CHANGE 0x26
#define BLE_ERR_UNSUPP_QOS 0x27
#define BLE_ERR_INSTANT_PASSED 0x28
#define BLE_ERR_UNIT_KEY_PAIRING 0x29
#define BLE_ERR_DIFF_TRANS_COLL 0x2a
/*#define BLE_ERR_RESERVED 0x2b*/
#define BLE_ERR_QOS_PARM 0x2c
#define BLE_ERR_QOS_REJECTED 0x2d
#define BLE_ERR_CHAN_CLASS 0x2e
#define BLE_ERR_INSUFFICIENT_SEC 0x2f
#define BLE_ERR_PARM_OUT_OF_RANGE 0x30
/*#define BLE_ERR_RESERVED 0x31*/
#define BLE_ERR_PENDING_ROLE_SW 0x32
/*#define BLE_ERR_RESERVED 0x33*/
#define BLE_ERR_RESERVED_SLOT 0x34
#define BLE_ERR_ROLE_SW_FAIL 0x35
#define BLE_ERR_INQ_RSP_TOO_BIG 0x36
#define BLE_ERR_SEC_SIMPLE_PAIR 0x37
#define BLE_ERR_HOST_BUSY_PAIR 0x38
#define BLE_ERR_CONN_REJ_CHANNEL 0x39
#define BLE_ERR_CTLR_BUSY 0x3a
#define BLE_ERR_CONN_PARMS 0x3b
#define BLE_ERR_DIR_ADV_TMO 0x3c
#define BLE_ERR_CONN_TERM_MIC 0x3d
#define BLE_ERR_CONN_ESTABLISHMENT 0x3e
#define BLE_ERR_MAC_CONN_FAIL 0x3f
#define BLE_ERR_COARSE_CLK_ADJ 0x40
#define BLE_ERR_TYPE0_SUBMAP_NDEF 0x41
#define BLE_ERR_UNK_ADV_INDENT 0x42
#define BLE_ERR_LIMIT_REACHED 0x43
#define BLE_ERR_OPERATION_CANCELLED 0x44
#define BLE_ERR_PACKET_TOO_LONG 0x45
#define BLE_ERR_MAX 0xff
struct err_code {
int code;
char *msg;
};
static struct err_code err_code_list[] = {
{ BLE_HS_HCI_ERR(BLE_ERR_UNKNOWN_HCI_CMD), ": BLE_ERR_UNKNOWN_HCI_CMD (Unknown HCI Command)" },
{ BLE_HS_HCI_ERR(BLE_ERR_UNK_CONN_ID), ": BLE_ERR_UNK_CONN_ID (Unknown Connection Identifier)" },
{ BLE_HS_HCI_ERR(BLE_ERR_HW_FAIL), ": BLE_ERR_HW_FAIL (Hardware Failure)" },
{ BLE_HS_HCI_ERR(BLE_ERR_PAGE_TMO), ": BLE_ERR_PAGE_TMO (Page Timeout)" },
{ BLE_HS_HCI_ERR(BLE_ERR_AUTH_FAIL), ": BLE_ERR_AUTH_FAIL (Authentication Failure)" },
{ BLE_HS_HCI_ERR(BLE_ERR_PINKEY_MISSING), ": BLE_ERR_PINKEY_MISSING (PIN or Key Missing)" },
{ BLE_HS_HCI_ERR(BLE_ERR_MEM_CAPACITY), ": BLE_ERR_MEM_CAPACITY (Memory Capacity Exceeded)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_SPVN_TMO), ": BLE_ERR_CONN_SPVN_TMO (Connection Timeout)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_LIMIT), ": BLE_ERR_CONN_LIMIT (Connection Limit Exceeded)" },
{ BLE_HS_HCI_ERR(BLE_ERR_SYNCH_CONN_LIMIT), ": BLE_ERR_SYNCH_CONN_LIMIT (Synchronous Connection Limit To A Device Exceeded)" },
{ BLE_HS_HCI_ERR(BLE_ERR_ACL_CONN_EXISTS), ": BLE_ERR_ACL_CONN_EXISTS (ACL Connection Already Exists)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CMD_DISALLOWED), ": BLE_ERR_CMD_DISALLOWED (Command Disallowed)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_REJ_RESOURCES), ": BLE_ERR_CONN_REJ_RESOURCES (Connection Rejected due to Limited Resources)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_REJ_SECURITY), ": BLE_ERR_CONN_REJ_SECURITY (Connection Rejected Due To Security Reasons)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_REJ_BD_ADDR), ": BLE_ERR_CONN_REJ_BD_ADDR (Connection Rejected due to Unacceptable BD_ADDR)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_ACCEPT_TMO), ": BLE_ERR_CONN_ACCEPT_TMO (Connection Accept Timeout Exceeded)" },
{ BLE_HS_HCI_ERR(BLE_ERR_UNSUPPORTED), ": BLE_ERR_UNSUPPORTED (Unsupported Feature or Parameter Value)" },
{ BLE_HS_HCI_ERR(BLE_ERR_INV_HCI_CMD_PARMS), ": BLE_ERR_INV_HCI_CMD_PARMS (Invalid HCI Command Parameters)" },
{ BLE_HS_HCI_ERR(BLE_ERR_REM_USER_CONN_TERM), ": BLE_ERR_REM_USER_CONN_TERM (Remote User Terminated Connection)" },
{ BLE_HS_HCI_ERR(BLE_ERR_RD_CONN_TERM_RESRCS), ": BLE_ERR_RD_CONN_TERM_RESRCS (Remote Device Terminated Connection due to Low Resources)" },
{ BLE_HS_HCI_ERR(BLE_ERR_RD_CONN_TERM_PWROFF), ": BLE_ERR_RD_CONN_TERM_PWROFF (Remote Device Terminated Connection due to Power Off)" },
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_TERM_LOCAL), ": BLE_ERR_CONN_TERM_LOCAL (Connection Terminated By Local Host)" },
{ BLE_HS_HCI_ERR(BLE_ERR_REPEATED_ATTEMPTS), ": BLE_ERR_REPEATED_ATTEMPTS (Repeated Attempts)" },
{ BLE_HS_HCI_ERR(BLE_ERR_NO_PAIRING), ": BLE_ERR_NO_PAIRING (Pairing Not Allowed)" },
{ BLE_HS_HCI_ERR(BLE_ERR_UNK_LMP), ": BLE_ERR_UNK_LMP (Unknown LMP PDU)" },
{ BLE_HS_HCI_ERR(BLE_ERR_UNSUPP_REM_FEATURE), ": BLE_ERR_UNSUPP_REM_FEATURE (Unsupported Remote Feature / Unsupported LMP Feature)" },
{ BLE_HS_HCI_ERR(BLE_ERR_SCO_OFFSET), ": BLE_ERR_SCO_OFFSET (SCO Offset Rejected)" },
{ BLE_HS_HCI_ERR(BLE_ERR_SCO_ITVL), ": BLE_ERR_SCO_ITVL (SCO Interval Rejected)" },
{ BLE_HS_HCI_ERR(BLE_ERR_SCO_AIR_MODE), ": BLE_ERR_SCO_AIR_MODE (SCO Air Mode Rejected)" },
{ BLE_HS_HCI_ERR(BLE_ERR_INV_LMP_LL_PARM), ": BLE_ERR_INV_LMP_LL_PARM (Invalid LMP Parameters / Invalid LL Parameters)" },
{ BLE_HS_HCI_ERR(BLE_ERR_UNSPECIFIED), ": BLE_ERR_UNSPECIFIED (Unspecified Error)" },
{ BLE_HS_HCI_ERR(BLE_ERR_UNSUPP_LMP_LL_PARM), ": BLE_ERR_UNSUPP_LMP_LL_PARM (Unsupported LMP Parameter Value / Unsupported LL Parameter Value)" },
{ BLE_HS_HCI_ERR(BLE_ERR_NO_ROLE_CHANGE), ": BLE_ERR_NO_ROLE_CHANGE (Role Change Not Allowed)" },
{ BLE_HS_HCI_ERR(BLE_ERR_LMP_LL_RSP_TMO), ": BLE_ERR_LMP_LL_RSP_TMO (LMP Response Timeout / LL Response Timeout)" },
{ BLE_HS_HCI_ERR(BLE_ERR_LMP_COLLISION), ": BLE_ERR_LMP_COLLISION (LMP Error Transaction Collision)" },
{ BLE_HS_HCI_ERR(BLE_ERR_LMP_PDU), ": BLE_ERR_LMP_PDU (LMP PDU Not Allowed)" },
{ BLE_HS_HCI_ERR(BLE_ERR_ENCRYPTION_MODE), ": BLE_ERR_ENCRYPTION_MODE (Encryption Mode Not Acceptable)"},
{ BLE_HS_HCI_ERR(BLE_ERR_LINK_KEY_CHANGE), ": BLE_ERR_LINK_KEY_CHANGE (Link Key cannot be Changed)"},
{ BLE_HS_HCI_ERR(BLE_ERR_UNSUPP_QOS), ": BLE_ERR_UNSUPP_QOS (Requested QoS Not Supported)"},
{ BLE_HS_HCI_ERR(BLE_ERR_INSTANT_PASSED), ": BLE_ERR_INSTANT_PASSED (Instant Passed)"},
{ BLE_HS_HCI_ERR(BLE_ERR_UNIT_KEY_PAIRING), ": BLE_ERR_UNIT_KEY_PAIRING (Pairing With Unit Key Not Supported)"},
{ BLE_HS_HCI_ERR(BLE_ERR_DIFF_TRANS_COLL), ": BLE_ERR_DIFF_TRANS_COLL (Different Transaction Collision)"},
{ BLE_HS_HCI_ERR(BLE_ERR_QOS_PARM), ": BLE_ERR_QOS_PARM (QoS Unacceptable Parameter)"},
{ BLE_HS_HCI_ERR(BLE_ERR_QOS_REJECTED), ": BLE_ERR_QOS_REJECTED (QoS Rejected)"},
{ BLE_HS_HCI_ERR(BLE_ERR_CHAN_CLASS), ": BLE_ERR_CHAN_CLASS (Channel Classification Not Supported)"},
{ BLE_HS_HCI_ERR(BLE_ERR_INSUFFICIENT_SEC), ": BLE_ERR_INSUFFICIENT_SEC (Insufficient Security)"},
{ BLE_HS_HCI_ERR(BLE_ERR_PARM_OUT_OF_RANGE), ": BLE_ERR_PARM_OUT_OF_RANGE (Parameter Out Of Mandatory Range)"},
{ BLE_HS_HCI_ERR(BLE_ERR_PENDING_ROLE_SW), ": BLE_ERR_PENDING_ROLE_SW (Role Switch Pending)"},
{ BLE_HS_HCI_ERR(BLE_ERR_RESERVED_SLOT), ": BLE_ERR_RESERVED_SLOT (Reserved Slot Violation)"},
{ BLE_HS_HCI_ERR(BLE_ERR_ROLE_SW_FAIL), ": BLE_ERR_ROLE_SW_FAIL (Role Switch Failed)"},
{ BLE_HS_HCI_ERR(BLE_ERR_INQ_RSP_TOO_BIG), ": BLE_ERR_INQ_RSP_TOO_BIG (Extended Inquiry Response Too Large)"},
{ BLE_HS_HCI_ERR(BLE_ERR_SEC_SIMPLE_PAIR), ": BLE_ERR_SEC_SIMPLE_PAIR (Secure Simple Pairing Not Supported By Host)"},
{ BLE_HS_HCI_ERR(BLE_ERR_HOST_BUSY_PAIR), ": BLE_ERR_HOST_BUSY_PAIR (Host Busy - Pairing)"},
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_REJ_CHANNEL), ": BLE_ERR_CONN_REJ_CHANNEL (Connection Rejected due to No Suitable Channel Found)"},
{ BLE_HS_HCI_ERR(BLE_ERR_CTLR_BUSY), ": BLE_ERR_CTLR_BUSY (Controller Busy)"},
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_PARMS), ": BLE_ERR_CONN_PARMS (Unacceptable Connection Parameters)"},
{ BLE_HS_HCI_ERR(BLE_ERR_DIR_ADV_TMO), ": BLE_ERR_DIR_ADV_TMO (Directed Advertising Timeout)"},
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_TERM_MIC), ": BLE_ERR_CONN_TERM_MIC (Connection Terminated due to MIC Failure)"},
{ BLE_HS_HCI_ERR(BLE_ERR_CONN_ESTABLISHMENT), ": BLE_ERR_CONN_ESTABLISHMENT (Connection Failed to be Established)"},
{ BLE_HS_HCI_ERR(BLE_ERR_MAC_CONN_FAIL), ": BLE_ERR_MAC_CONN_FAIL (MAC Connection Failed)"},
{ BLE_HS_HCI_ERR(BLE_ERR_COARSE_CLK_ADJ), ": BLE_ERR_COARSE_CLK_ADJ (Coarse Clock Adjustment Rejected but Will Try to Adjust Using Clock Dragging)"},
{ BLE_HS_HCI_ERR(BLE_ERR_TYPE0_SUBMAP_NDEF), ": BLE_ERR_TYPE0_SUBMAP_NDEF (Type0 Submap Not Defined)"},
{ BLE_HS_HCI_ERR(BLE_ERR_UNK_ADV_INDENT), ": BLE_ERR_UNK_ADV_INDENT (Unknown Advertising Identifier)"},
{ BLE_HS_HCI_ERR(BLE_ERR_LIMIT_REACHED), ": BLE_ERR_LIMIT_REACHED (Limit Reached)"},
{ BLE_HS_HCI_ERR(BLE_ERR_OPERATION_CANCELLED), ": BLE_ERR_OPERATION_CANCELLED (Operation Cancelled by Host)"},
{ BLE_HS_HCI_ERR(BLE_ERR_PACKET_TOO_LONG), ": BLE_ERR_PACKET_TOO_LONG (Packet Too Long)"},
{ BLE_HS_HCI_ERR(BLE_ERR_MAX), ": BLE_ERR_MAX"}
};
static void esp_hci_err_to_name(int code)
{
if (code == 0) {
return;
}
else if (code - 0x200 < 0) {
/* Converts error code to HCI base */
code = BLE_HS_HCI_ERR(code);
}
for (int i = 0; i<sizeof(err_code_list) / sizeof(err_code_list[0]); i++) {
if (err_code_list[i].code == code ) {
MODLOG_DFLT(ERROR, "0x%02X %s\n", code, err_code_list[i].msg);
break;
}
}
return;
}
static struct ble_npl_mutex ble_hs_hci_mutex;
static struct ble_npl_sem ble_hs_hci_sem;
@@ -344,14 +510,12 @@ ble_hs_hci_cmd_tx(uint16_t opcode, const void *cmd, uint8_t cmd_len,
}
rc = ack.bha_status;
/* on success we should always get full response */
if (!rc && (ack.bha_params_len != rsp_len)) {
BLE_HS_LOG(ERROR, "Received status %d \n", rc);
ble_hs_sched_reset(rc);
goto done;
}
done:
if (ble_hs_hci_ack != NULL) {
ble_transport_free((uint8_t *) ble_hs_hci_ack);
@@ -359,6 +523,7 @@ done:
}
ble_hs_hci_unlock();
esp_hci_err_to_name(rc);
return rc;
}