From 651688219c7cea81128fbbc6176d97d49d53a6d9 Mon Sep 17 00:00:00 2001 From: proddy Date: Mon, 20 Jan 2025 21:03:52 +0100 Subject: [PATCH] fix logic for uploading so it restarts --- src/core/emsesp.cpp | 12 ++++-------- src/core/system.cpp | 11 +++++------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/core/emsesp.cpp b/src/core/emsesp.cpp index 8fc450989..c7c5e798a 100644 --- a/src/core/emsesp.cpp +++ b/src/core/emsesp.cpp @@ -1736,7 +1736,6 @@ void EMSESP::loop() { // run the loop, unless we're in the middle of an OTA upload if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_NORMAL) { - // service loops webLogService.loop(); // log in Web UI rxservice_.loop(); // process any incoming Rx telegrams shower_.loop(); // check for shower on/off @@ -1752,13 +1751,10 @@ void EMSESP::loop() { } if (EMSESP::system_.systemStatus() == SYSTEM_STATUS::SYSTEM_STATUS_PENDING_UPLOAD) { - // start an upload from a URL, assuming if the URL exists from a previous pass. - // Note this function is synchronous and blocking. - if (system_.uploadFirmwareURL()) { - // firmware has been uploaded, set status to uploading - EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING); - } else { - // if it fails to pass, reset + // start an upload from a URL, assuming the URL exists and set from a previous pass + // Note this next call is synchronous and blocking. + if (!system_.uploadFirmwareURL()) { + // upload failed, send a "reset" to return back to normal Shell::loop_all(); // flush log buffers so latest error message are shown in console system_.uploadFirmwareURL("reset"); EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_ERROR_UPLOAD); diff --git a/src/core/system.cpp b/src/core/system.cpp index 08c4fa19b..31fec722b 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -2010,29 +2010,27 @@ bool System::uploadFirmwareURL(const char * url) { static String saved_url; - // if the URL is not empty, store the URL for the 2nd pass and exit if (url && strlen(url) > 0) { // if the passed URL is "reset" abort the current upload. This is called when an error happens during OTA if (strncmp(url, "reset", 5) == 0) { LOG_DEBUG("Firmware upload - resetting"); saved_url.clear(); - EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_NORMAL); return true; } - // given a URL to download from, save it + // given a URL to download from, save it ready for the 2nd pass saved_url = url; + LOG_INFO("Firmware location: %s", saved_url.c_str()); EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_PENDING_UPLOAD); // we're ready to start the upload return true; } - // assumed we have a valid URL from the 1st pass + // check we have a valid URL from the 1st pass if (saved_url.isEmpty()) { LOG_ERROR("Firmware upload failed - invalid URL"); return false; // error } - LOG_INFO("Firmware downloading from %s", saved_url.c_str()); Shell::loop_all(); // flush log buffers so latest messages are shown in console // Configure temporary client @@ -2059,9 +2057,10 @@ bool System::uploadFirmwareURL(const char * url) { return false; // error } - Shell::loop_all(); // flush log buffers so latest messages are shown in console + // we're about to start the upload, set the status so the Web System Monitor spots it + EMSESP::system_.systemStatus(SYSTEM_STATUS::SYSTEM_STATUS_UPLOADING); // TODO do we need to stop the UART with EMSuart::stop() ? // get tcp stream and send it to Updater