diff --git a/code/espurna/config/types.h b/code/espurna/config/types.h index 5fe5a20b..c70d7707 100644 --- a/code/espurna/config/types.h +++ b/code/espurna/config/types.h @@ -375,6 +375,9 @@ #define MAGNITUDE_MAX 39 +// TODO: backwards compatible sensor integer values. should probably allow custom messsages +// (even with the increased flash arequirements) + #define SENSOR_ERROR_OK 0 // No error #define SENSOR_ERROR_OUT_OF_RANGE 1 // Result out of sensor range #define SENSOR_ERROR_WARM_UP 2 // Sensor is warming-up @@ -384,9 +387,13 @@ #define SENSOR_ERROR_I2C 6 // Wrong or locked I2C address #define SENSOR_ERROR_GPIO_USED 7 // The GPIO is already in use #define SENSOR_ERROR_CALIBRATION 8 // Calibration error or Not calibrated +#define SENSOR_ERROR_OVERFLOW 9 // Value overflow +#define SENSOR_ERROR_NOT_READY 10 // Device is not ready / available / disconnected +#define SENSOR_ERROR_CONFIG 11 // Configuration values were invalid +#define SENSOR_ERROR_SUPPORT 12 // Not supported #define SENSOR_ERROR_OTHER 99 // Any other error -#define SENSOR_ERROR_MAX 9 +#define SENSOR_ERROR_MAX 13 //------------------------------------------------------------------------------ // Telnet server diff --git a/code/espurna/sensor.cpp b/code/espurna/sensor.cpp index 0ed730bd..4b339e6e 100644 --- a/code/espurna/sensor.cpp +++ b/code/espurna/sensor.cpp @@ -1824,41 +1824,52 @@ bool _sensorWebSocketOnKeyCheck(const char* key, JsonVariant&) { } String _sensorError(unsigned char error) { - - const __FlashStringHelper* result = nullptr; + const char* result { nullptr }; switch (error) { - case SENSOR_ERROR_OK: - result = F("OK"); - break; - case SENSOR_ERROR_OUT_OF_RANGE: - result = F("Out of Range"); - break; - case SENSOR_ERROR_WARM_UP: - result = F("Warming Up"); - break; - case SENSOR_ERROR_TIMEOUT: - result = F("Timeout"); - break; - case SENSOR_ERROR_UNKNOWN_ID: - result = F("Unknown ID"); - break; - case SENSOR_ERROR_CRC: - result = F("CRC / Data Error"); - break; - case SENSOR_ERROR_I2C: - result = F("I2C Error"); - break; - case SENSOR_ERROR_GPIO_USED: - result = F("GPIO Already Used"); - break; - case SENSOR_ERROR_CALIBRATION: - result = F("Calibration Error"); - break; - default: - case SENSOR_ERROR_OTHER: - result = F("Other / Unknown Error"); - break; + case SENSOR_ERROR_OK: + result = PSTR("OK"); + break; + case SENSOR_ERROR_OUT_OF_RANGE: + result = PSTR("Out of Range"); + break; + case SENSOR_ERROR_WARM_UP: + result = PSTR("Warming Up"); + break; + case SENSOR_ERROR_TIMEOUT: + result = PSTR("Timeout"); + break; + case SENSOR_ERROR_UNKNOWN_ID: + result = PSTR("Unknown ID"); + break; + case SENSOR_ERROR_CRC: + result = PSTR("CRC / Data Error"); + break; + case SENSOR_ERROR_I2C: + result = PSTR("I2C Error"); + break; + case SENSOR_ERROR_GPIO_USED: + result = PSTR("GPIO Already Used"); + break; + case SENSOR_ERROR_CALIBRATION: + result = PSTR("Calibration Error"); + break; + case SENSOR_ERROR_OVERFLOW: + result = PSTR("Value Overflow"); + break; + case SENSOR_ERROR_NOT_READY: + result = PSTR("Not Ready"); + break; + case SENSOR_ERROR_CONFIG: + result = PSTR("Invalid Configuration"); + break; + case SENSOR_ERROR_SUPPORT: + result = PSTR("Not Supported"); + break; + default: + case SENSOR_ERROR_OTHER: + result = PSTR("Other / Unknown Error"); + break; } return result; @@ -2488,10 +2499,8 @@ void _sensorPre() { for (auto sensor : _sensors) { sensor->pre(); if (!sensor->status()) { - DEBUG_MSG_P(PSTR("[SENSOR] Error reading data from %s (error: %d)\n"), - sensor->description().c_str(), - sensor->error() - ); + DEBUG_MSG_P(PSTR("[SENSOR] Could not read from %s (%s)\n"), + sensor->description().c_str(), _sensorError(sensor->error()).c_str()); } } } @@ -3235,8 +3244,10 @@ void _sensorInit() { sensor->begin(); if (!sensor->ready()) { - if (0 != sensor->error()) { - DEBUG_MSG_P(PSTR("[SENSOR] -> ERROR %d\n"), sensor->error()); + const auto error = sensor->error(); + if (error != SENSOR_ERROR_OK) { + DEBUG_MSG_P(PSTR("[SENSOR] -> ERROR %s (%hhu)\n"), + _sensorError(error).c_str(), error); } _sensors_ready = false; break;