Browse Source

sns: some more error types

pull/2516/head
Maxim Prokhorov 2 years ago
parent
commit
8f194848ee
2 changed files with 58 additions and 40 deletions
  1. +8
    -1
      code/espurna/config/types.h
  2. +50
    -39
      code/espurna/sensor.cpp

+ 8
- 1
code/espurna/config/types.h View File

@ -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


+ 50
- 39
code/espurna/sensor.cpp View File

@ -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;


Loading…
Cancel
Save