diff --git a/include/WebApi_firmware.h b/include/WebApi_firmware.h index 990a5e0..9e473f2 100644 --- a/include/WebApi_firmware.h +++ b/include/WebApi_firmware.h @@ -6,9 +6,13 @@ class WebApiFirmwareClass { public: + WebApiFirmwareClass(); void init(AsyncWebServer& server, Scheduler& scheduler); private: void onFirmwareUpdateFinish(AsyncWebServerRequest* request); void onFirmwareUpdateUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final); + + Task _rebootTask; + void rebootTaskCb(); }; diff --git a/src/WebApi_firmware.cpp b/src/WebApi_firmware.cpp index 9491f93..f730bf9 100644 --- a/src/WebApi_firmware.cpp +++ b/src/WebApi_firmware.cpp @@ -10,6 +10,11 @@ #include "helper.h" #include +WebApiFirmwareClass::WebApiFirmwareClass() + : _rebootTask(TASK_IMMEDIATE, TASK_ONCE, std::bind(&WebApiFirmwareClass::rebootTaskCb, this)) +{ +} + void WebApiFirmwareClass::init(AsyncWebServer& server, Scheduler& scheduler) { using std::placeholders::_1; @@ -22,6 +27,8 @@ void WebApiFirmwareClass::init(AsyncWebServer& server, Scheduler& scheduler) server.on("/api/firmware/update", HTTP_POST, std::bind(&WebApiFirmwareClass::onFirmwareUpdateFinish, this, _1), std::bind(&WebApiFirmwareClass::onFirmwareUpdateUpload, this, _1, _2, _3, _4, _5, _6)); + + scheduler.addTask(_rebootTask); } void WebApiFirmwareClass::onFirmwareUpdateFinish(AsyncWebServerRequest* request) @@ -37,7 +44,8 @@ void WebApiFirmwareClass::onFirmwareUpdateFinish(AsyncWebServerRequest* request) response->addHeader("Connection", "close"); response->addHeader("Access-Control-Allow-Origin", "*"); request->send(response); - Utils::restartDtu(); + _rebootTask.enable(); + _rebootTask.restart(); } void WebApiFirmwareClass::onFirmwareUpdateUpload(AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final) @@ -78,3 +86,8 @@ void WebApiFirmwareClass::onFirmwareUpdateUpload(AsyncWebServerRequest* request, return; } } + +void WebApiFirmwareClass::rebootTaskCb() +{ + Utils::restartDtu(); +}