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)