From db1e6790448ec177c27241a54adcf9c2aad7606a Mon Sep 17 00:00:00 2001 From: Cabooman <81711263+Cabooman@users.noreply.github.com> Date: Mon, 12 Feb 2024 20:16:39 +0100 Subject: [PATCH 1/2] Initial commit --- Software/src/devboard/utils/events.cpp | 3 +++ Software/src/devboard/utils/events.h | 1 + Software/src/devboard/webserver/webserver.cpp | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/Software/src/devboard/utils/events.cpp b/Software/src/devboard/utils/events.cpp index 0cc51e8d..2b426b53 100644 --- a/Software/src/devboard/utils/events.cpp +++ b/Software/src/devboard/utils/events.cpp @@ -131,6 +131,7 @@ void init_events(void) { events.entries[EVENT_SERIAL_RX_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_OTA_UPDATE_TIMEOUT].level = EVENT_LEVEL_INFO; events.entries[EVENT_DUMMY_INFO].log = true; events.entries[EVENT_DUMMY_DEBUG].log = true; @@ -213,6 +214,8 @@ const char* get_event_message_string(EVENTS_ENUM_TYPE event) { return "Error in serial function: Some ERROR level fault in transmitter, received by receiver"; case EVENT_OTA_UPDATE: return "OTA update started!"; + case EVENT_OTA_UPDATE_TIMEOUT: + return "OTA update timed out!"; default: return ""; } diff --git a/Software/src/devboard/utils/events.h b/Software/src/devboard/utils/events.h index ddd32227..fbafa5f2 100644 --- a/Software/src/devboard/utils/events.h +++ b/Software/src/devboard/utils/events.h @@ -39,6 +39,7 @@ XX(EVENT_CELL_DEVIATION_HIGH) \ XX(EVENT_UNKNOWN_EVENT_SET) \ XX(EVENT_OTA_UPDATE) \ + XX(EVENT_OTA_UPDATE_TIMEOUT) \ XX(EVENT_DUMMY_INFO) \ XX(EVENT_DUMMY_DEBUG) \ XX(EVENT_DUMMY_WARNING) \ diff --git a/Software/src/devboard/webserver/webserver.cpp b/Software/src/devboard/webserver/webserver.cpp index c2eab57a..28cb3fdd 100644 --- a/Software/src/devboard/webserver/webserver.cpp +++ b/Software/src/devboard/webserver/webserver.cpp @@ -1,6 +1,7 @@ #include "webserver.h" #include #include "../utils/events.h" +#include "../utils/timer.h" // Create AsyncWebServer object on port 80 AsyncWebServer server(80); @@ -21,6 +22,9 @@ enum WifiState { WifiState wifi_state = INIT; +MyTimer ota_timeout_timer = MyTimer(5000); +bool ota_active = false; + unsigned const long WIFI_MONITOR_INTERVAL_TIME = 15000; unsigned const long INIT_WIFI_CONNECT_TIMEOUT = 8000; // Timeout for initial WiFi connect in milliseconds unsigned const long DEFAULT_WIFI_RECONNECT_INTERVAL = 1000; // Default WiFi reconnect interval in ms @@ -299,6 +303,13 @@ void wifi_monitor() { Serial.println(" Hostname: " + String(WiFi.getHostname())); } } + + if (ota_active && ota_timeout_timer.elapsed()) { + // OTA timeout, try to restore can and clear the update event + ESP32Can.CANInit(); + clear_event(EVENT_OTA_UPDATE); + set_event(EVENT_OTA_UPDATE_TIMEOUT, 0); + } } void init_WiFi_STA(const char* ssid, const char* password, const uint8_t wifi_channel) { @@ -635,6 +646,11 @@ void onOTAStart() { // Log when OTA has started ESP32Can.CANStop(); set_event(EVENT_OTA_UPDATE, 0); + + // If already set, make a new attempt + clear_event(EVENT_OTA_UPDATE_TIMEOUT); + ota_active = true; + ota_timeout_timer.reset(); } void onOTAProgress(size_t current, size_t final) { @@ -642,6 +658,9 @@ void onOTAProgress(size_t current, size_t final) { if (millis() - ota_progress_millis > 1000) { ota_progress_millis = millis(); Serial.printf("OTA Progress Current: %u bytes, Final: %u bytes\n", current, final); + + // Reset the "watchdog" + ota_timeout_timer.reset(); } } @@ -651,7 +670,11 @@ void onOTAEnd(bool success) { Serial.println("OTA update finished successfully!"); } else { Serial.println("There was an error during OTA update!"); + + // If we fail without a timeout, try to restore CAN + ESP32Can.CANInit(); } + ota_active = false; clear_event(EVENT_OTA_UPDATE); } From 9c1e2c3333c40e0f3232bc3f3950be2b269f3d3e Mon Sep 17 00:00:00 2001 From: Cabooman <81711263+Cabooman@users.noreply.github.com> Date: Mon, 12 Feb 2024 20:23:19 +0100 Subject: [PATCH 2/2] Minor addition --- Software/src/devboard/webserver/webserver.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Software/src/devboard/webserver/webserver.cpp b/Software/src/devboard/webserver/webserver.cpp index 28cb3fdd..26de0909 100644 --- a/Software/src/devboard/webserver/webserver.cpp +++ b/Software/src/devboard/webserver/webserver.cpp @@ -309,6 +309,7 @@ void wifi_monitor() { ESP32Can.CANInit(); clear_event(EVENT_OTA_UPDATE); set_event(EVENT_OTA_UPDATE_TIMEOUT, 0); + ota_active = false; } }