mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 10:49:42 +02:00
Merge pull request #175 from dalathegreat/bugfix/ota-improvement
Bugfix/ota improvement
This commit is contained in:
commit
e6ad60dbe7
3 changed files with 28 additions and 0 deletions
|
@ -142,6 +142,7 @@ void init_events(void) {
|
||||||
events.entries[EVENT_CELL_DEVIATION_HIGH].level = EVENT_LEVEL_WARNING;
|
events.entries[EVENT_CELL_DEVIATION_HIGH].level = EVENT_LEVEL_WARNING;
|
||||||
events.entries[EVENT_UNKNOWN_EVENT_SET].level = EVENT_LEVEL_ERROR;
|
events.entries[EVENT_UNKNOWN_EVENT_SET].level = EVENT_LEVEL_ERROR;
|
||||||
events.entries[EVENT_OTA_UPDATE].level = EVENT_LEVEL_UPDATE;
|
events.entries[EVENT_OTA_UPDATE].level = EVENT_LEVEL_UPDATE;
|
||||||
|
events.entries[EVENT_OTA_UPDATE_TIMEOUT].level = EVENT_LEVEL_INFO;
|
||||||
events.entries[EVENT_DUMMY_INFO].level = EVENT_LEVEL_INFO;
|
events.entries[EVENT_DUMMY_INFO].level = EVENT_LEVEL_INFO;
|
||||||
events.entries[EVENT_DUMMY_DEBUG].level = EVENT_LEVEL_DEBUG;
|
events.entries[EVENT_DUMMY_DEBUG].level = EVENT_LEVEL_DEBUG;
|
||||||
events.entries[EVENT_DUMMY_WARNING].level = EVENT_LEVEL_WARNING;
|
events.entries[EVENT_DUMMY_WARNING].level = EVENT_LEVEL_WARNING;
|
||||||
|
@ -235,6 +236,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";
|
return "Error in serial function: Some ERROR level fault in transmitter, received by receiver";
|
||||||
case EVENT_OTA_UPDATE:
|
case EVENT_OTA_UPDATE:
|
||||||
return "OTA update started!";
|
return "OTA update started!";
|
||||||
|
case EVENT_OTA_UPDATE_TIMEOUT:
|
||||||
|
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";
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
XX(EVENT_CELL_DEVIATION_HIGH) \
|
XX(EVENT_CELL_DEVIATION_HIGH) \
|
||||||
XX(EVENT_UNKNOWN_EVENT_SET) \
|
XX(EVENT_UNKNOWN_EVENT_SET) \
|
||||||
XX(EVENT_OTA_UPDATE) \
|
XX(EVENT_OTA_UPDATE) \
|
||||||
|
XX(EVENT_OTA_UPDATE_TIMEOUT) \
|
||||||
XX(EVENT_DUMMY_INFO) \
|
XX(EVENT_DUMMY_INFO) \
|
||||||
XX(EVENT_DUMMY_DEBUG) \
|
XX(EVENT_DUMMY_DEBUG) \
|
||||||
XX(EVENT_DUMMY_WARNING) \
|
XX(EVENT_DUMMY_WARNING) \
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "webserver.h"
|
#include "webserver.h"
|
||||||
#include <Preferences.h>
|
#include <Preferences.h>
|
||||||
#include "../utils/events.h"
|
#include "../utils/events.h"
|
||||||
|
#include "../utils/timer.h"
|
||||||
|
|
||||||
// Create AsyncWebServer object on port 80
|
// Create AsyncWebServer object on port 80
|
||||||
AsyncWebServer server(80);
|
AsyncWebServer server(80);
|
||||||
|
@ -21,6 +22,9 @@ enum WifiState {
|
||||||
|
|
||||||
WifiState wifi_state = INIT;
|
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 WIFI_MONITOR_INTERVAL_TIME = 15000;
|
||||||
unsigned const long INIT_WIFI_CONNECT_TIMEOUT = 8000; // Timeout for initial WiFi connect in milliseconds
|
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
|
unsigned const long DEFAULT_WIFI_RECONNECT_INTERVAL = 1000; // Default WiFi reconnect interval in ms
|
||||||
|
@ -299,6 +303,14 @@ void wifi_monitor() {
|
||||||
Serial.println(" Hostname: " + String(WiFi.getHostname()));
|
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);
|
||||||
|
ota_active = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void init_WiFi_STA(const char* ssid, const char* password, const uint8_t wifi_channel) {
|
void init_WiFi_STA(const char* ssid, const char* password, const uint8_t wifi_channel) {
|
||||||
|
@ -635,6 +647,11 @@ void onOTAStart() {
|
||||||
// Log when OTA has started
|
// Log when OTA has started
|
||||||
ESP32Can.CANStop();
|
ESP32Can.CANStop();
|
||||||
set_event(EVENT_OTA_UPDATE, 0);
|
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) {
|
void onOTAProgress(size_t current, size_t final) {
|
||||||
|
@ -642,6 +659,9 @@ void onOTAProgress(size_t current, size_t final) {
|
||||||
if (millis() - ota_progress_millis > 1000) {
|
if (millis() - ota_progress_millis > 1000) {
|
||||||
ota_progress_millis = millis();
|
ota_progress_millis = millis();
|
||||||
Serial.printf("OTA Progress Current: %u bytes, Final: %u bytes\n", current, final);
|
Serial.printf("OTA Progress Current: %u bytes, Final: %u bytes\n", current, final);
|
||||||
|
|
||||||
|
// Reset the "watchdog"
|
||||||
|
ota_timeout_timer.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -651,7 +671,11 @@ void onOTAEnd(bool success) {
|
||||||
Serial.println("OTA update finished successfully!");
|
Serial.println("OTA update finished successfully!");
|
||||||
} else {
|
} else {
|
||||||
Serial.println("There was an error during OTA update!");
|
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);
|
clear_event(EVENT_OTA_UPDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue