mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-04 02:09:30 +02:00
Feature: Post reset reason as Event (#335)
* Add event for all reset reasons --------- Co-authored-by: Cabooman <81711263+Cabooman@users.noreply.github.com>
This commit is contained in:
parent
dcfba11a93
commit
2c434624c6
3 changed files with 145 additions and 1 deletions
|
@ -152,6 +152,8 @@ void setup() {
|
||||||
|
|
||||||
esp_task_wdt_deinit(); // Disable watchdog
|
esp_task_wdt_deinit(); // Disable watchdog
|
||||||
|
|
||||||
|
check_reset_reason();
|
||||||
|
|
||||||
xTaskCreatePinnedToCore((TaskFunction_t)&core_loop, "core_loop", 4096, &core_task_time_us, TASK_CORE_PRIO,
|
xTaskCreatePinnedToCore((TaskFunction_t)&core_loop, "core_loop", 4096, &core_task_time_us, TASK_CORE_PRIO,
|
||||||
&main_loop_task, CORE_FUNCTION_CORE);
|
&main_loop_task, CORE_FUNCTION_CORE);
|
||||||
}
|
}
|
||||||
|
@ -744,3 +746,80 @@ void storeSettings() {
|
||||||
|
|
||||||
settings.end();
|
settings.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Reset reason numbering and description
|
||||||
|
*
|
||||||
|
typedef enum {
|
||||||
|
ESP_RST_UNKNOWN, //!< 0 Reset reason can not be determined
|
||||||
|
ESP_RST_POWERON, //!< 1 OK Reset due to power-on event
|
||||||
|
ESP_RST_EXT, //!< 2 Reset by external pin (not applicable for ESP32)
|
||||||
|
ESP_RST_SW, //!< 3 OK Software reset via esp_restart
|
||||||
|
ESP_RST_PANIC, //!< 4 Software reset due to exception/panic
|
||||||
|
ESP_RST_INT_WDT, //!< 5 Reset (software or hardware) due to interrupt watchdog
|
||||||
|
ESP_RST_TASK_WDT, //!< 6 Reset due to task watchdog
|
||||||
|
ESP_RST_WDT, //!< 7 Reset due to other watchdogs
|
||||||
|
ESP_RST_DEEPSLEEP, //!< 8 Reset after exiting deep sleep mode
|
||||||
|
ESP_RST_BROWNOUT, //!< 9 Brownout reset (software or hardware)
|
||||||
|
ESP_RST_SDIO, //!< 10 Reset over SDIO
|
||||||
|
ESP_RST_USB, //!< 11 Reset by USB peripheral
|
||||||
|
ESP_RST_JTAG, //!< 12 Reset by JTAG
|
||||||
|
ESP_RST_EFUSE, //!< 13 Reset due to efuse error
|
||||||
|
ESP_RST_PWR_GLITCH, //!< 14 Reset due to power glitch detected
|
||||||
|
ESP_RST_CPU_LOCKUP, //!< 15 Reset due to CPU lock up
|
||||||
|
} esp_reset_reason_t;
|
||||||
|
*/
|
||||||
|
void check_reset_reason() {
|
||||||
|
esp_reset_reason_t reason = esp_reset_reason();
|
||||||
|
switch (reason) {
|
||||||
|
case ESP_RST_UNKNOWN:
|
||||||
|
set_event(EVENT_RESET_UNKNOWN, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_POWERON:
|
||||||
|
set_event(EVENT_RESET_POWERON, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_EXT:
|
||||||
|
set_event(EVENT_RESET_EXT, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_SW:
|
||||||
|
set_event(EVENT_RESET_SW, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_PANIC:
|
||||||
|
set_event(EVENT_RESET_PANIC, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_INT_WDT:
|
||||||
|
set_event(EVENT_RESET_INT_WDT, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_TASK_WDT:
|
||||||
|
set_event(EVENT_RESET_TASK_WDT, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_WDT:
|
||||||
|
set_event(EVENT_RESET_WDT, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_DEEPSLEEP:
|
||||||
|
set_event(EVENT_RESET_DEEPSLEEP, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_BROWNOUT:
|
||||||
|
set_event(EVENT_RESET_BROWNOUT, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_SDIO:
|
||||||
|
set_event(EVENT_RESET_SDIO, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_USB:
|
||||||
|
set_event(EVENT_RESET_USB, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_JTAG:
|
||||||
|
set_event(EVENT_RESET_JTAG, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_EFUSE:
|
||||||
|
set_event(EVENT_RESET_EFUSE, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_PWR_GLITCH:
|
||||||
|
set_event(EVENT_RESET_PWR_GLITCH, reason);
|
||||||
|
break;
|
||||||
|
case ESP_RST_CPU_LOCKUP:
|
||||||
|
set_event(EVENT_RESET_CPU_LOCKUP, reason);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -176,6 +176,22 @@ void init_events(void) {
|
||||||
events.entries[EVENT_SERIAL_TX_FAILURE].level = EVENT_LEVEL_ERROR;
|
events.entries[EVENT_SERIAL_TX_FAILURE].level = EVENT_LEVEL_ERROR;
|
||||||
events.entries[EVENT_SERIAL_TRANSMITTER_FAILURE].level = EVENT_LEVEL_ERROR;
|
events.entries[EVENT_SERIAL_TRANSMITTER_FAILURE].level = EVENT_LEVEL_ERROR;
|
||||||
events.entries[EVENT_EEPROM_WRITE].level = EVENT_LEVEL_INFO;
|
events.entries[EVENT_EEPROM_WRITE].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_UNKNOWN].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_POWERON].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_EXT].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_SW].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_PANIC].level = EVENT_LEVEL_WARNING;
|
||||||
|
events.entries[EVENT_RESET_INT_WDT].level = EVENT_LEVEL_WARNING;
|
||||||
|
events.entries[EVENT_RESET_TASK_WDT].level = EVENT_LEVEL_WARNING;
|
||||||
|
events.entries[EVENT_RESET_WDT].level = EVENT_LEVEL_WARNING;
|
||||||
|
events.entries[EVENT_RESET_DEEPSLEEP].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_BROWNOUT].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_SDIO].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_USB].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_JTAG].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_EFUSE].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_PWR_GLITCH].level = EVENT_LEVEL_INFO;
|
||||||
|
events.entries[EVENT_RESET_CPU_LOCKUP].level = EVENT_LEVEL_WARNING;
|
||||||
|
|
||||||
events.entries[EVENT_EEPROM_WRITE].log = false; // Don't log the logger...
|
events.entries[EVENT_EEPROM_WRITE].log = false; // Don't log the logger...
|
||||||
|
|
||||||
|
@ -298,6 +314,39 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) {
|
||||||
return "OTA update timed out!";
|
return "OTA update timed out!";
|
||||||
case EVENT_EEPROM_WRITE:
|
case EVENT_EEPROM_WRITE:
|
||||||
return "Info: The EEPROM was written";
|
return "Info: The EEPROM was written";
|
||||||
|
case EVENT_RESET_UNKNOWN:
|
||||||
|
return "Info: The board was reset unexpectedly, and reason can't be determined";
|
||||||
|
case EVENT_RESET_POWERON:
|
||||||
|
return "Info: The board was reset from a power-on event. Normal operation";
|
||||||
|
case EVENT_RESET_EXT:
|
||||||
|
return "Info: The board was reset from an external pin";
|
||||||
|
case EVENT_RESET_SW:
|
||||||
|
return "Info: The board was reset via software, webserver or OTA. Normal operation";
|
||||||
|
case EVENT_RESET_PANIC:
|
||||||
|
return "Warning: The board was reset due to an exception or panic. Inform developers!";
|
||||||
|
case EVENT_RESET_INT_WDT:
|
||||||
|
return "Warning: The board was reset due to an interrupt watchdog timeout. Inform developers!";
|
||||||
|
case EVENT_RESET_TASK_WDT:
|
||||||
|
return "Warning: The board was reset due to a task watchdog timeout. Inform developers!";
|
||||||
|
case EVENT_RESET_WDT:
|
||||||
|
return "Warning: The board was reset due to other watchdog timeout. Inform developers!";
|
||||||
|
case EVENT_RESET_DEEPSLEEP:
|
||||||
|
return "Info: The board was reset after exiting deep sleep mode";
|
||||||
|
case EVENT_RESET_BROWNOUT:
|
||||||
|
return "Info: The board was reset due to a momentary low voltage condition. This is expected during certain "
|
||||||
|
"operations like flashing via USB";
|
||||||
|
case EVENT_RESET_SDIO:
|
||||||
|
return "Info: The board was reset over SDIO";
|
||||||
|
case EVENT_RESET_USB:
|
||||||
|
return "Info: The board was reset by the USB peripheral";
|
||||||
|
case EVENT_RESET_JTAG:
|
||||||
|
return "Info: The board was reset by JTAG";
|
||||||
|
case EVENT_RESET_EFUSE:
|
||||||
|
return "Info: The board was reset due to an efuse error";
|
||||||
|
case EVENT_RESET_PWR_GLITCH:
|
||||||
|
return "Info: The board was reset due to a detected power glitch";
|
||||||
|
case EVENT_RESET_CPU_LOCKUP:
|
||||||
|
return "Warning: The board was reset due to CPU lockup. Inform developers!";
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
// #define INCLUDE_EVENTS_TEST // Enable to run an event test loop, see events_test_on_target.cpp
|
// #define INCLUDE_EVENTS_TEST // Enable to run an event test loop, see events_test_on_target.cpp
|
||||||
|
|
||||||
#define EE_MAGIC_HEADER_VALUE 0x0006 // 0x0000 to 0xFFFF
|
#define EE_MAGIC_HEADER_VALUE 0x0007 // 0x0000 to 0xFFFF
|
||||||
|
|
||||||
#define GENERATE_ENUM(ENUM) ENUM,
|
#define GENERATE_ENUM(ENUM) ENUM,
|
||||||
#define GENERATE_STRING(STRING) #STRING,
|
#define GENERATE_STRING(STRING) #STRING,
|
||||||
|
@ -72,6 +72,22 @@
|
||||||
XX(EVENT_SERIAL_TX_FAILURE) \
|
XX(EVENT_SERIAL_TX_FAILURE) \
|
||||||
XX(EVENT_SERIAL_TRANSMITTER_FAILURE) \
|
XX(EVENT_SERIAL_TRANSMITTER_FAILURE) \
|
||||||
XX(EVENT_EEPROM_WRITE) \
|
XX(EVENT_EEPROM_WRITE) \
|
||||||
|
XX(EVENT_RESET_UNKNOWN) \
|
||||||
|
XX(EVENT_RESET_POWERON) \
|
||||||
|
XX(EVENT_RESET_EXT) \
|
||||||
|
XX(EVENT_RESET_SW) \
|
||||||
|
XX(EVENT_RESET_PANIC) \
|
||||||
|
XX(EVENT_RESET_INT_WDT) \
|
||||||
|
XX(EVENT_RESET_TASK_WDT) \
|
||||||
|
XX(EVENT_RESET_WDT) \
|
||||||
|
XX(EVENT_RESET_DEEPSLEEP) \
|
||||||
|
XX(EVENT_RESET_BROWNOUT) \
|
||||||
|
XX(EVENT_RESET_SDIO) \
|
||||||
|
XX(EVENT_RESET_USB) \
|
||||||
|
XX(EVENT_RESET_JTAG) \
|
||||||
|
XX(EVENT_RESET_EFUSE) \
|
||||||
|
XX(EVENT_RESET_PWR_GLITCH) \
|
||||||
|
XX(EVENT_RESET_CPU_LOCKUP) \
|
||||||
XX(EVENT_NOF_EVENTS)
|
XX(EVENT_NOF_EVENTS)
|
||||||
|
|
||||||
typedef enum { EVENTS_ENUM_TYPE(GENERATE_ENUM) } EVENTS_ENUM_TYPE;
|
typedef enum { EVENTS_ENUM_TYPE(GENERATE_ENUM) } EVENTS_ENUM_TYPE;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue