From 46f1139a055246d05c0744c2195c5f82155b5e6d Mon Sep 17 00:00:00 2001 From: Astha Verma Date: Fri, 25 Oct 2024 11:58:40 +0530 Subject: [PATCH] fix: Added a function for printing HCI error definition --- nimble/host/src/ble_hs_hci.c | 169 ++++++++++++++++++++++++++++++++++- 1 file changed, 167 insertions(+), 2 deletions(-) diff --git a/nimble/host/src/ble_hs_hci.c b/nimble/host/src/ble_hs_hci.c index 0996cfbb0..a10991ada 100644 --- a/nimble/host/src/ble_hs_hci.c +++ b/nimble/host/src/ble_hs_hci.c @@ -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