From 8be7546ebae62ea18889f6f24d3bfc501c8f8339 Mon Sep 17 00:00:00 2001 From: Rune Harlyk Date: Mon, 21 Apr 2025 13:12:56 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=8D=20Updates=20reset=20reason=20mappi?= =?UTF-8?q?ng?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- esp32/lib/ESP32-sveltekit/system_service.cpp | 50 +++++++++++++------- esp32/lib/ESP32-sveltekit/system_service.h | 2 +- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/esp32/lib/ESP32-sveltekit/system_service.cpp b/esp32/lib/ESP32-sveltekit/system_service.cpp index 00de159..39177e1 100644 --- a/esp32/lib/ESP32-sveltekit/system_service.cpp +++ b/esp32/lib/ESP32-sveltekit/system_service.cpp @@ -109,7 +109,7 @@ void status(JsonObject &root) { root["fs_total"] = ESPFS.totalBytes(); root["fs_used"] = ESPFS.usedBytes(); root["core_temp"] = temperatureRead(); - root["cpu_reset_reason"] = resetReason(rtc_get_reset_reason(0)); + root["cpu_reset_reason"] = resetReason(esp_reset_reason()); root["uptime"] = millis() / 1000; } @@ -144,24 +144,38 @@ void emitMetrics() { socket.emit(EVENT_ANALYTICS, analyticsMessage); } -const char *resetReason(int reason) { +const char *resetReason(esp_reset_reason_t reason) { switch (reason) { - case 1: return "Vbat power on reset"; - case 3: return "Software reset digital core"; - case 4: return "Legacy watch dog reset digital core"; - case 5: return "Deep Sleep reset digital core"; - case 6: return "Reset by SLC module, reset digital core"; - case 7: return "Timer Group0 Watch dog reset digital core"; - case 8: return "Timer Group1 Watch dog reset digital core"; - case 9: return "RTC Watch dog Reset digital core"; - case 10: return "Intrusion tested to reset CPU"; - case 11: return "Time Group reset CPU"; - case 12: return "Software reset CPU"; - case 13: return "RTC Watch dog Reset CPU"; - case 14: return "for APP CPU, reset by PRO CPU"; - case 15: return "Reset when the vdd voltage is not stable"; - case 16: return "RTC Watch dog reset digital core and rtc module"; - default: return "NO_MEAN"; + case ESP_RST_UNKNOWN: return "Reset reason can not be determined"; + case ESP_RST_POWERON: return "Reset due to power-on event"; + case ESP_RST_EXT: return "Reset by external pin (not applicable for ESP32)"; + case ESP_RST_SW: return "Software reset via esp_restart"; + case ESP_RST_PANIC: return "Software reset due to exception/panic"; + case ESP_RST_INT_WDT: return "Reset (software or hardware) due to interrupt watchdog"; + case ESP_RST_TASK_WDT: return "Reset due to task watchdog"; + case ESP_RST_WDT: return "Reset due to other watchdogs"; + case ESP_RST_DEEPSLEEP: return "Reset after exiting deep sleep mode"; + case ESP_RST_BROWNOUT: return "Brownout reset (software or hardware)"; + case ESP_RST_SDIO: return "Reset over SDIO"; +#ifdef ESP_RST_USB + case ESP_RST_USB: return "Reset by USB peripheral"; +#endif +#ifdef ESP_RST_JTAG + case ESP_RST_JTAG: return "Reset by JTAG"; +#endif +#ifdef ESP_RST_EFUSE + case ESP_RST_EFUSE: return "Reset due to efuse error"; +#endif +#ifdef ESP_RST_PWR_GLITCH + case ESP_RST_PWR_GLITCH: return "Reset due to power glitch detected"; +#endif +#ifdef ESP_RST_CPU_LOCKUP + case ESP_RST_CPU_LOCKUP: return "Reset due to CPU lock up (double exception)"; +#endif + default: + char buffer[50]; + snprintf(buffer, sizeof(buffer), "Unknown reset reason (%d)", reason); + return buffer; } } diff --git a/esp32/lib/ESP32-sveltekit/system_service.h b/esp32/lib/ESP32-sveltekit/system_service.h index 8c7b473..f03bdfc 100644 --- a/esp32/lib/ESP32-sveltekit/system_service.h +++ b/esp32/lib/ESP32-sveltekit/system_service.h @@ -27,7 +27,7 @@ void metrics(JsonObject &root); void emitMetrics(); -const char *resetReason(int reason); +const char *resetReason(esp_reset_reason_t reason); } // namespace system_service #endif \ No newline at end of file