From d6a32f6a1979de5353e1cbf028b2794747b2a10d Mon Sep 17 00:00:00 2001 From: David Crocker Date: Wed, 25 Aug 2021 10:53:00 +0100 Subject: Fall back to /sys if IAP not found in /firmware --- src/Platform/RepRap.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Platform/RepRap.cpp b/src/Platform/RepRap.cpp index 9137bb14..f63efce3 100644 --- a/src/Platform/RepRap.cpp +++ b/src/Platform/RepRap.cpp @@ -2740,7 +2740,7 @@ bool RepRap::CheckFirmwareUpdatePrerequisites(const StringRef& reply, const Stri return false; } - if (!platform->FileExists(FIRMWARE_DIRECTORY, IAP_UPDATE_FILE)) + if (!platform->FileExists(FIRMWARE_DIRECTORY, IAP_UPDATE_FILE) && !platform->FileExists(DEFAULT_SYS_DIR, IAP_UPDATE_FILE)) { reply.printf("In-application programming binary \"%s\" not found", FIRMWARE_DIRECTORY IAP_UPDATE_FILE); return false; @@ -2754,14 +2754,18 @@ bool RepRap::CheckFirmwareUpdatePrerequisites(const StringRef& reply, const Stri void RepRap::UpdateFirmware(const StringRef& filenameRef) noexcept { #if HAS_MASS_STORAGE - FileStore * const iapFile = platform->OpenFile(FIRMWARE_DIRECTORY, IAP_UPDATE_FILE, OpenMode::read); + FileStore * iapFile = platform->OpenFile(FIRMWARE_DIRECTORY, IAP_UPDATE_FILE, OpenMode::read); if (iapFile == nullptr) { - platform->Message(FirmwareUpdateMessage, "IAP file '" FIRMWARE_DIRECTORY IAP_UPDATE_FILE "' not found\n"); - return; + iapFile = platform->OpenFile(DEFAULT_SYS_DIR, IAP_UPDATE_FILE, OpenMode::read); + if (iapFile == nullptr) + { + // This should not happen because we already checked that the file exists, so use a simplified error message + platform->Message(FirmwareUpdateMessage, "Missing IAP"); + return; + } } - PrepareToLoadIap(); // Use RAM-based IAP -- cgit v1.2.3 From 1b9a248dd5e1cb4c1a03c0c6159183f45de359d5 Mon Sep 17 00:00:00 2001 From: David Crocker Date: Wed, 25 Aug 2021 11:08:40 +0100 Subject: Fall back to /sys if wifi firmware not found in /firmware --- src/Comms/FirmwareUpdater.cpp | 2 +- src/GCodes/GCodes3.cpp | 2 +- src/Networking/ESP8266WiFi/WifiFirmwareUploader.cpp | 13 +++++++++---- src/Networking/ESP8266WiFi/WifiFirmwareUploader.h | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Comms/FirmwareUpdater.cpp b/src/Comms/FirmwareUpdater.cpp index 3d7d2de7..5b671bcf 100644 --- a/src/Comms/FirmwareUpdater.cpp +++ b/src/Comms/FirmwareUpdater.cpp @@ -122,7 +122,7 @@ namespace FirmwareUpdater if (uploader != nullptr) { const char* binaryFilename = filenameRef.IsEmpty() ? WIFI_FIRMWARE_FILE : filenameRef.c_str(); - uploader->SendUpdateFile(binaryFilename, FIRMWARE_DIRECTORY, WifiFirmwareUploader::FirmwareAddress); + uploader->SendUpdateFile(binaryFilename, WifiFirmwareUploader::FirmwareAddress); } } break; diff --git a/src/GCodes/GCodes3.cpp b/src/GCodes/GCodes3.cpp index b48ae06b..4999b7d8 100644 --- a/src/GCodes/GCodes3.cpp +++ b/src/GCodes/GCodes3.cpp @@ -1177,7 +1177,7 @@ GCodeResult GCodes::UpdateFirmware(GCodeBuffer& gb, const StringRef &reply) { if (firmwareUpdateModuleMap.CountSetBits() > 1) { - reply.copy("Filename can only be provided when updating excactly one module\n"); + reply.copy("Filename can only be provided when updating exactly one module\n"); firmwareUpdateModuleMap.Clear(); return GCodeResult::error; } diff --git a/src/Networking/ESP8266WiFi/WifiFirmwareUploader.cpp b/src/Networking/ESP8266WiFi/WifiFirmwareUploader.cpp index fe38ee6d..17a922c2 100644 --- a/src/Networking/ESP8266WiFi/WifiFirmwareUploader.cpp +++ b/src/Networking/ESP8266WiFi/WifiFirmwareUploader.cpp @@ -733,14 +733,19 @@ void WifiFirmwareUploader::Spin() noexcept } // Try to upload the given file at the given address -void WifiFirmwareUploader::SendUpdateFile(const char *file, const char *dir, uint32_t address) noexcept +void WifiFirmwareUploader::SendUpdateFile(const char *file, uint32_t address) noexcept { Platform& platform = reprap.GetPlatform(); - uploadFile = platform.OpenFile(dir, file, OpenMode::read); + uploadFile = platform.OpenFile(FIRMWARE_DIRECTORY, file, OpenMode::read); if (uploadFile == nullptr) { - MessageF("Failed to open file %s\n", file); - return; + // Fall back to /sys if the wifi file wasn't found in /firmware + uploadFile = platform.OpenFile(DEFAULT_SYS_DIR, file, OpenMode::read); + if (uploadFile == nullptr) + { + MessageF("Failed to open file %s%s\n", FIRMWARE_DIRECTORY, file); + return; + } } fileSize = uploadFile->Length(); diff --git a/src/Networking/ESP8266WiFi/WifiFirmwareUploader.h b/src/Networking/ESP8266WiFi/WifiFirmwareUploader.h index 470d1328..77c60203 100644 --- a/src/Networking/ESP8266WiFi/WifiFirmwareUploader.h +++ b/src/Networking/ESP8266WiFi/WifiFirmwareUploader.h @@ -17,7 +17,7 @@ class WifiFirmwareUploader public: WifiFirmwareUploader(UARTClass& port, WiFiInterface &iface) noexcept; bool IsReady() const noexcept; - void SendUpdateFile(const char *file, const char *dir, uint32_t address) noexcept; + void SendUpdateFile(const char *file, uint32_t address) noexcept; void Spin() noexcept; static const uint32_t FirmwareAddress = 0x00000000; -- cgit v1.2.3