changed low freq. clock source to IRC
Dependencies: BLE_API mbed nRF51822_IRC
Fork of BLE_ANCS_SDAPI by
Diff: debug.cpp
- Revision:
- 0:1f985a7c0a8b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debug.cpp Tue Jun 03 04:25:33 2014 +0000 @@ -0,0 +1,338 @@ + +// Set error string based on error number for +// convinience debugging purpose. +// See: API Reference>S110>SofDevice Global Error Codes +#include <stdint.h> +#include <stdio.h> + +#include "nRF51822n.h" + +#define MAX_BUFFER 100 +char m_error_string[MAX_BUFFER]; +char m_event_string[MAX_BUFFER]; +char m_nrfevent_string[MAX_BUFFER]; +char m_ancs_string[MAX_BUFFER]; + + +char *get_error_unknown(uint32_t error_num) { + snprintf(m_error_string, MAX_BUFFER, "Unknown"); + return m_error_string; +} + +// Global error base. +char *get_error_global(uint32_t error_num) { + if(error_num == NRF_ERROR_BASE_NUM + 0){ + snprintf(m_error_string, MAX_BUFFER, "Successful command. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 1){ + snprintf(m_error_string, MAX_BUFFER, "SVC handler is missing. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 2){ + snprintf(m_error_string, MAX_BUFFER, "SoftDevice has not been enabled. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 3){ + snprintf(m_error_string, MAX_BUFFER, "Internal Error. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 4){ + snprintf(m_error_string, MAX_BUFFER, "No Memory for operation. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 5){ + snprintf(m_error_string, MAX_BUFFER, "Not found. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 6){ + snprintf(m_error_string, MAX_BUFFER, "Not supported. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 7){ + snprintf(m_error_string, MAX_BUFFER, "Invalid Parameter. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 8){ + snprintf(m_error_string, MAX_BUFFER, "Invalid state, operation disallowed in this state. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 9){ + snprintf(m_error_string, MAX_BUFFER, "Invalid Length. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 10){ + snprintf(m_error_string, MAX_BUFFER, "Invalid Flags. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 11){ + snprintf(m_error_string, MAX_BUFFER, "Invalid Data. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 12){ + snprintf(m_error_string, MAX_BUFFER, "Data size exceeds limit. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 13){ + snprintf(m_error_string, MAX_BUFFER, "Operation timed out. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 14){ + snprintf(m_error_string, MAX_BUFFER, "Null Pointer. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 15){ + snprintf(m_error_string, MAX_BUFFER, "Forbidden Operation. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 16){ + snprintf(m_error_string, MAX_BUFFER, "Bad Memory Address. "); + } else if(error_num == NRF_ERROR_BASE_NUM + 17){ + snprintf(m_error_string, MAX_BUFFER, "Busy. "); + } else { + return get_error_unknown(error_num); + } + return m_error_string; +} + +// SDM error base. +char *get_error_sdm(uint32_t error_num) { + if(error_num == NRF_ERROR_SDM_BASE_NUM + 0){ + snprintf(m_error_string, MAX_BUFFER, "Unknown lfclk source. "); + } else if(error_num == NRF_ERROR_SDM_BASE_NUM + 1){ + snprintf(m_error_string, MAX_BUFFER, "Incorrect interrupt configuration (can be caused by using illegal priority levels, or having enabled SoftDevice interrupts) "); + } else if(error_num == NRF_ERROR_SDM_BASE_NUM + 2){ + snprintf(m_error_string, MAX_BUFFER, "Incorrect CLENR0 (can be caused by erronous SoftDevice flashing) "); + } else { + return get_error_unknown(error_num); + } + return m_error_string; +} + +// SoC error base. +char *get_error_soc(uint32_t error_num) { + if(error_num == NRF_ERROR_SOC_BASE_NUM + 0){ + snprintf(m_error_string, MAX_BUFFER, "Mutex already taken. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 1){ + snprintf(m_error_string, MAX_BUFFER, "NVIC interrupt not available. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 2){ + snprintf(m_error_string, MAX_BUFFER, "NVIC interrupt priority not allowed. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 3){ + snprintf(m_error_string, MAX_BUFFER, "NVIC should not return. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 4){ + snprintf(m_error_string, MAX_BUFFER, "Power mode unknown. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 5){ + snprintf(m_error_string, MAX_BUFFER, "Power POF threshold unknown. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 6){ + snprintf(m_error_string, MAX_BUFFER, "Power off should not return. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 7){ + snprintf(m_error_string, MAX_BUFFER, "RAND not enough values. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 8){ + snprintf(m_error_string, MAX_BUFFER, "Invalid PPI Channel. "); + } else if(error_num == NRF_ERROR_SOC_BASE_NUM + 9){ + snprintf(m_error_string, MAX_BUFFER, "Invalid PPI Group. "); + } else { + return get_error_unknown(error_num); + } + return m_error_string; +} + +// STK error base. +char *get_error_stk(uint32_t error_num) { + snprintf(m_error_string, MAX_BUFFER, "stk error."); + return m_error_string; +} + +char *error2string(uint32_t error_num) { + + if(error_num<NRF_ERROR_SDM_BASE_NUM) { + return get_error_global(error_num); + } else if(error_num<NRF_ERROR_SDM_BASE_NUM) { + return get_error_sdm(error_num); + } else if(error_num<NRF_ERROR_SOC_BASE_NUM) { + return get_error_soc(error_num); + } else if(error_num<NRF_ERROR_STK_BASE_NUM) { + return get_error_stk(error_num); + } else { + return get_error_unknown(error_num); + } + +} + +char *event2string(ble_evt_t * p_ble_evt) { + switch (p_ble_evt->header.evt_id) { + // GAP + case BLE_GAP_EVT_CONNECTED: + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_CONNECTED", "Connection established."); + break; + case BLE_GAP_EVT_DISCONNECTED : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_DISCONNECTED ", "Disconnected from peer."); + break; + case BLE_GAP_EVT_CONN_PARAM_UPDATE: + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_CONN_PARAM_UPDATE", "Connection Parameters updated."); + break; + case BLE_GAP_EVT_SEC_PARAMS_REQUEST : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_SEC_PARAMS_REQUEST ", "Request to provide security parameters."); + break; + case BLE_GAP_EVT_SEC_INFO_REQUEST : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_SEC_INFO_REQUEST ", "Request to provide security information."); + break; + case BLE_GAP_EVT_PASSKEY_DISPLAY: + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_PASSKEY_DISPLAY", "Request to display a passkey to the user."); + break; + case BLE_GAP_EVT_AUTH_KEY_REQUEST: + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_AUTH_KEY_REQUEST", "Request to provide an authentication key."); + break; + case BLE_GAP_EVT_AUTH_STATUS : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_AUTH_STATUS ", "Authentication procedure completed with status."); + break; + case BLE_GAP_EVT_CONN_SEC_UPDATE: + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_CONN_SEC_UPDATE ", "Connection security updated."); + break; + case BLE_GAP_EVT_TIMEOUT : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_TIMEOUT ", "Timeout expired."); + break; + case BLE_GAP_EVT_RSSI_CHANGED : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GAP_EVT_RSSI_CHANGED ", "Signal strength measurement report."); + break; + // GATTC + case BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_PRIM_SRVC_DISC_RSP ", "Primary Service Discovery Response event."); + break; + case BLE_GATTC_EVT_REL_DISC_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_REL_DISC_RSP ", "Relationship Discovery Response event."); + break; + case BLE_GATTC_EVT_CHAR_DISC_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_CHAR_DISC_RSP ", "Characteristic Discovery Response event."); + break; + case BLE_GATTC_EVT_DESC_DISC_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_DESC_DISC_RSP ", "Descriptor Discovery Response event."); + break; + case BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_CHAR_VAL_BY_UUID_READ_RSP", "Read By UUID Response event."); + break; + case BLE_GATTC_EVT_READ_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_READ_RSP ", "Read Response event."); + break; + case BLE_GATTC_EVT_CHAR_VALS_READ_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_CHAR_VALS_READ_RSP ", "Read multiple Response event."); + break; + case BLE_GATTC_EVT_WRITE_RSP : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_WRITE_RSP", "Write Response event."); + break; + case BLE_GATTC_EVT_HVX : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_HVX ", "Handle Value Notification or Indication event."); + break; + case BLE_GATTC_EVT_TIMEOUT : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTC_EVT_TIMEOUT ", "Timeout event."); + break; + // GATTS + case BLE_GATTS_EVT_WRITE : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTS_EVT_WRITE ", "Write operation performed."); + break; + case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST ", "Read/Write Authorization request."); + break; + case BLE_GATTS_EVT_SYS_ATTR_MISSING : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTS_EVT_SYS_ATTR_MISSING ", "A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set()."); + break; + case BLE_GATTS_EVT_HVC : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTS_EVT_HVC ", "Handle Value Confirmation."); + break; + case BLE_GATTS_EVT_SC_CONFIRM : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTS_EVT_SC_CONFIRM ", "Service Changed Confirmation."); + break; + case BLE_GATTS_EVT_TIMEOUT : + snprintf(m_event_string, MAX_BUFFER, "%s (%s)", "BLE_GATTS_EVT_TIMEOUT ", "Timeout."); + break; + // + default: + snprintf(m_event_string, MAX_BUFFER, "Event: Unknown (%d)", p_ble_evt->header.evt_id); + break; + } + + return m_event_string; +} + + +char *nrfevent2string(uint32_t evt_id) { + switch (evt_id) { +// case NRF_EVT_HFCLKSTARTED : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_HFCLKSTARTED", "Event indicating that the HFCLK has started."); +// break; +// case NRF_EVT_POWER_FAILURE_WARNING : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_POWER_FAILURE_WARNING", "Event indicating that a power failure warning has occurred."); +// break; +// case NRF_EVT_FLASH_OPERATION_SUCCESS : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_FLASH_OPERATION_SUCCESS", "Event indicating that the ongoing flash operation has completed successfully."); +// break; +// case NRF_EVT_FLASH_OPERATION_ERROR : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_FLASH_OPERATION_ERROR", "Event indicating that the ongoing flash operation has timed out with an error."); +// break; +// case NRF_EVT_HFCLKSTARTED : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_HFCLKSTARTED ", "Event indicating that the HFCLK has started."); +// break; +// case NRF_EVT_POWER_FAILURE_WARNING : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_POWER_FAILURE_WARNING", "Event indicating that a power failure warning has occurred."); +// break; +// case NRF_EVT_FLASH_OPERATION_SUCCESS : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_FLASH_OPERATION_SUCCESS", "Event indicating that the ongoing flash operation has completed successfully."); +// break; +// case NRF_EVT_FLASH_OPERATION_ERROR : +// snprintf(m_nrfevent_string, MAX_BUFFER, "%s (%s)", "NRF_EVT_FLASH_OPERATION_ERROR ", "Event indicating that the ongoing flash operation has timed out with an error."); +// break; + default: + snprintf(m_nrfevent_string, MAX_BUFFER, "Event: Unknown (%d)", evt_id); + break; + } + + return m_nrfevent_string; +} + +char *eventid2string(uint8_t d) { + switch (d) { + case 0 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Notification Added"); + break; + case 1 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Notification Modified"); + break; + case 2 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Notification Removed"); + break; + default: + snprintf(m_ancs_string, MAX_BUFFER, "Reserved (%d)", d); + break; + } + + return m_ancs_string; +} + +char *eventflags2string(uint8_t d) { + snprintf(m_ancs_string, MAX_BUFFER, "(no flags)"); + if(d & 3) { + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Silent & Important"); + } else if(d & 1) { + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Silent"); + } else if(d & 2) { + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Important"); + } + + return m_ancs_string; +} + +char *categoryid2string(uint8_t d) { + switch (d) { + case 0 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Other"); + break; + case 1 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Incomming Call"); + break; + case 2 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Missed Call"); + break; + case 3 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Voice Mail"); + break; + case 4 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Social"); + break; + case 5 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Schedule"); + break; + case 6 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Email"); + break; + case 7 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "News"); + break; + case 8 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Health And Fitness"); + break; + case 9 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Business And Finance"); + break; + case 10 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Location"); // iBeacon? + break; + case 11 : + snprintf(m_ancs_string, MAX_BUFFER, "%s", "Entertainment"); + break; + default: + snprintf(m_ancs_string, MAX_BUFFER, "Reserved (%d)", d); + break; + } + + return m_ancs_string; +} + +