Skip to content

Commit

Permalink
sns: some more error types
Browse files Browse the repository at this point in the history
  • Loading branch information
mcspr committed May 18, 2022
1 parent 396733d commit 8f19484
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 40 deletions.
9 changes: 8 additions & 1 deletion code/espurna/config/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
89 changes: 50 additions & 39 deletions code/espurna/sensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
}
}
}
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 8f19484

Please sign in to comment.