diff --git a/html/scan.js b/html/scan.js index 69f38d5..a01399e 100644 --- a/html/scan.js +++ b/html/scan.js @@ -202,11 +202,26 @@ function completeHandler(type_suffix) { _("progressBar_" + type_suffix).value = 0; var data = JSON.parse(event.target.responseText); if (data.status === 'ok') { - cuteAlert({ - type: 'success', - title: "Update Succeeded", - message: data.msg - }); + function show_message() { + cuteAlert({ + type: 'success', + title: "Update Succeeded", + message: data.msg + }); + } + // This is basically a delayed display of the success dialog with a fake progress + var percent = 0; + var interval = setInterval(()=>{ + percent = percent + 1; + _("progressBar_" + type_suffix).value = percent; + _("status_" + type_suffix).innerHTML = percent + "% flashed... please wait"; + if (percent == 100) { + clearInterval(interval); + _("status_" + type_suffix).innerHTML = ""; + _("progressBar_" + type_suffix).value = 0; + show_message(); + } + }, 100); } else if (data.status === 'mismatch') { cuteAlert({ type: 'question', @@ -257,9 +272,9 @@ function errorHandler(type_suffix) { _("status_" + type_suffix).innerHTML = ""; _("progressBar_" + type_suffix).value = 0; cuteAlert({ - type: "error", - title: "Update Failed", - message: event.target.responseText + type: "error", + title: "Update Failed", + message: event.target.responseText }); } } @@ -269,9 +284,9 @@ function abortHandler(type_suffix) { _("status_" + type_suffix).innerHTML = ""; _("progressBar_" + type_suffix).value = 0; cuteAlert({ - type: "info", - title: "Update Aborted", - message: event.target.responseText + type: "info", + title: "Update Aborted", + message: event.target.responseText }); } } diff --git a/lib/WIFI/devWIFI.cpp b/lib/WIFI/devWIFI.cpp index 64b8626..21bf3b6 100644 --- a/lib/WIFI/devWIFI.cpp +++ b/lib/WIFI/devWIFI.cpp @@ -76,6 +76,7 @@ static uint8_t target_pos = 0; static String target_found; static bool target_complete = false; static bool force_update = false; +static bool do_flash = false; static uint32_t totalSize; static UpdateWrapper updater = UpdateWrapper(); @@ -290,7 +291,7 @@ static void WebUploadResponseHandler(AsyncWebServerRequest *request) { response->addHeader("Connection", "close"); request->send(response); request->client()->close(); - rebootTime = millis() + 200; + do_flash = true; } else { String message = String("{\"status\": \"mismatch\", \"msg\": \"Current target: ") + (const char *)&target_name[4] + ".
"; if (target_found.length() != 0) { @@ -369,31 +370,11 @@ static void WebUploadDataHandler(AsyncWebServerRequest *request, const String& f totalSize += len; } } - if (final && !updater.hasError()) { - DBGVLN("finish"); - if (target_seen) { - if (updater.end(true)) { //true to set the size to the current progress - DBGLN("Upload Success: %ubytes\nPlease wait for LED to turn on before disconnecting power", totalSize); - } else { - updater.printError(Serial); - } - } else { - #if defined(PLATFORM_ESP32) - updater->abort(); - #endif - DBGLN("Wrong firmware uploaded, not %s, update aborted", &target_name[4]); - } - } } static void WebUploadForceUpdateHandler(AsyncWebServerRequest *request) { target_seen = true; if (request->arg("action").equals("confirm")) { - if (updater.end(true)) { //true to set the size to the current progress - DBGLN("Upload Success: %ubytes\nPlease wait for LED to turn on before disconnecting power", totalSize); - } else { - updater.printError(Serial); - } WebUploadResponseHandler(request); } else { #if defined(PLATFORM_ESP32) @@ -598,6 +579,15 @@ static void HandleWebUpdate() // In AP mode, it doesn't seem to make a measurable difference, but does not hurt if (!updater.isRunning()) delay(1); + if (do_flash) { + do_flash = false; + if (updater.end(true)) { //true to set the size to the current progress + DBGLN("Upload Success: %ubytes\nPlease wait for LED to turn on before disconnecting power", totalSize); + } else { + updater.printError(Serial); + } + rebootTime = millis() + 200; + } } } diff --git a/lib/WIFI/stmUpdateClass.cpp b/lib/WIFI/stmUpdateClass.cpp index b4bae15..bbecec4 100644 --- a/lib/WIFI/stmUpdateClass.cpp +++ b/lib/WIFI/stmUpdateClass.cpp @@ -6,6 +6,8 @@ #include "logging.h" +static const char *spiffs_firmware_filename = "firmware.bin"; + void STMUpdateClass::setFilename(const String& filename) { this->filename = filename; @@ -16,8 +18,8 @@ bool STMUpdateClass::begin(size_t size) _error = UPDATE_ERROR_OK; /* Remove old file */ - if (SPIFFS.exists(filename.c_str())) - SPIFFS.remove(filename.c_str()); + if (SPIFFS.exists(spiffs_firmware_filename)) + SPIFFS.remove(spiffs_firmware_filename); FSInfo fs_info; if (SPIFFS.info(fs_info)) @@ -41,7 +43,7 @@ bool STMUpdateClass::begin(size_t size) _error = UPDATE_ERROR_READ; return false; } - fsUploadFile = SPIFFS.open(filename.c_str(), "w"); // Open the file for writing in SPIFFS (create if it doesn't exist) + fsUploadFile = SPIFFS.open(spiffs_firmware_filename, "w"); // Open the file for writing in SPIFFS (create if it doesn't exist) return true; } @@ -55,8 +57,8 @@ bool STMUpdateClass::end(bool evenIfRemaining) fsUploadFile.close(); // Close the file again _error = flashSTM32(BEGIN_ADDRESS); - if (SPIFFS.exists(filename.c_str())) - SPIFFS.remove(filename.c_str()); + if (SPIFFS.exists(spiffs_firmware_filename)) + SPIFFS.remove(spiffs_firmware_filename); return !hasError(); } @@ -78,9 +80,10 @@ void STMUpdateClass::printError(Print &out){ int8_t STMUpdateClass::flashSTM32(uint32_t flash_addr) { if (filename.endsWith(".elrs")) { - _errmsg = stk500_write_file(filename.c_str()); + _errmsg = stk500_write_file(spiffs_firmware_filename); + reset_stm32_to_app_mode(); } else if (filename.endsWith(".bin")) { - _errmsg = esp8266_spiffs_write_file(filename.c_str(), flash_addr); + _errmsg = esp8266_spiffs_write_file(spiffs_firmware_filename, flash_addr); } Serial.begin(460800); if (_errmsg != NULL)