From e7bb42f72b3b26733104ef9607470b90f079b8c2 Mon Sep 17 00:00:00 2001 From: Marcus Date: Mon, 21 Oct 2024 23:57:13 +0200 Subject: [PATCH] web firmware update implemented --- Arduino/CanGrow/include/CanGrow.h | 5 ++- Arduino/CanGrow/include/CanGrow_Webserver.h | 4 ++ .../CanGrow/include/Webserver/Page_system.h | 43 ++++++++++++++++++- .../include/Webserver/Page_system_HTML.h | 21 +++++++++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/Arduino/CanGrow/include/CanGrow.h b/Arduino/CanGrow/include/CanGrow.h index 4d35988..93186e7 100644 --- a/Arduino/CanGrow/include/CanGrow.h +++ b/Arduino/CanGrow/include/CanGrow.h @@ -44,8 +44,9 @@ #define CANGROW_SSID "CanGrow-unconfigured" // do we need a restart? (e.g. after wifi settings change) -bool needRestart; -bool doRestart; +bool needRestart = false; +// this triggers Restart() from the main loop +bool doRestart = false; // previous value of millis within the scheduler loop unsigned long schedulerPrevMillis = 0; diff --git a/Arduino/CanGrow/include/CanGrow_Webserver.h b/Arduino/CanGrow/include/CanGrow_Webserver.h index b93aed3..7462a4d 100644 --- a/Arduino/CanGrow/include/CanGrow_Webserver.h +++ b/Arduino/CanGrow/include/CanGrow_Webserver.h @@ -89,6 +89,10 @@ void Webserver_Init() { webserver.on("/wifi/", HTTP_POST, WebPage_wifi); webserver.on("/system/", HTTP_GET, WebPage_system); webserver.on("/system/", HTTP_POST, WebPage_system); + + webserver.on("/system/update", HTTP_GET, WebPage_system_update); + webserver.on("/system/update", HTTP_POST, WebPage_system_update, WebPage_system_update_ApplyUpdate); + webserver.on("/system/restart", HTTP_GET, WebPage_system_restart); webserver.on("/system/restart", HTTP_POST, WebPage_system_restart); diff --git a/Arduino/CanGrow/include/Webserver/Page_system.h b/Arduino/CanGrow/include/Webserver/Page_system.h index a4dee70..7b248c8 100644 --- a/Arduino/CanGrow/include/Webserver/Page_system.h +++ b/Arduino/CanGrow/include/Webserver/Page_system.h @@ -49,7 +49,7 @@ void WebPage_system(AsyncWebServerRequest *request) { /* - * Page subpage restart + * Subpage restart */ String Proc_WebPage_system_restart(const String& var) { if(TestHeaderFooter(var)) { @@ -84,3 +84,44 @@ void WebPage_system_restart(AsyncWebServerRequest *request) { } } + + + +/* + * Subpage update + */ + +void WebPage_system_update_ApplyUpdate(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final){ + if(!index){ + Serial.printf("Update Start: %s\n", filename.c_str()); + Update.runAsync(true); + if(!Update.begin((ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000)){ + Update.printError(Serial); + } + } + if(!Update.hasError()){ + if(Update.write(data, len) != len){ + Update.printError(Serial); + } + } + if(final){ + if(Update.end(true)){ + Serial.printf("Update Success: %uB\n", index+len); + } else { + Update.printError(Serial); + } + } + } + +void WebPage_system_update(AsyncWebServerRequest *request) { + if(request->method() == HTTP_POST) { + needRestart = !Update.hasError(); + AsyncWebServerResponse *response = request->beginResponse(200, "text/plain", needRestart?"OK":"FAIL"); + response->addHeader("Connection", "close"); + request->send(response); + } else { + request->send_P(200, "text/html", Page_system_update_HTML, AddHeaderFooter); + } +} + + diff --git a/Arduino/CanGrow/include/Webserver/Page_system_HTML.h b/Arduino/CanGrow/include/Webserver/Page_system_HTML.h index 8e6b35e..93b7054 100644 --- a/Arduino/CanGrow/include/Webserver/Page_system_HTML.h +++ b/Arduino/CanGrow/include/Webserver/Page_system_HTML.h @@ -74,6 +74,27 @@ ESP32-Cam IP (optional): 🔄 Firmware update +Version: %CGVER%
+Build : %CGBUILD%
+ +

You find the latest CanGrow firmware version on the release page of the git repository.

+
+ Select .bin file:
+ + +
+