From 8a93cccfce9db0d3f219f20f1aff6605bdfefb69 Mon Sep 17 00:00:00 2001 From: Manuel Weiser Date: Thu, 20 Feb 2025 16:14:49 +0100 Subject: [PATCH] refactor: update Gitea and GitHub release workflows to improve binary preparation and verification fix: correct version number in HTML files and platformio.ini to v1.2.76 enhance: streamline OTA update handling by removing unnecessary magic byte checks --- .github/workflows/providers/gitea-release.yml | 46 +++++++++++++------ .../workflows/providers/github-release.yml | 46 +++++++++++++------ html/header.html | 2 +- html/index.html | 2 +- html/rfid.html | 2 +- html/spoolman.html | 2 +- html/upgrade.html | 2 +- html/waage.html | 2 +- html/wifi.html | 2 +- platformio.ini | 2 +- src/ota.cpp | 31 ++++--------- 11 files changed, 80 insertions(+), 59 deletions(-) diff --git a/.github/workflows/providers/gitea-release.yml b/.github/workflows/providers/gitea-release.yml index ae2fdaf..b30e524 100644 --- a/.github/workflows/providers/gitea-release.yml +++ b/.github/workflows/providers/gitea-release.yml @@ -30,33 +30,51 @@ jobs: - name: Install PlatformIO run: | python -m pip install --upgrade pip - pip install --upgrade platformio + pip install --upgrade platformio esptool - name: Build Firmware run: | pio run -t buildfs # Build SPIFFS pio run # Build firmware - - name: Install esptool + - name: Prepare binaries run: | - pip install esptool + cd .pio/build/esp32dev - - name: Merge firmware and SPIFFS - run: | + # Debug: Show all generated files + echo "Files in build directory:" + ls -la + + # Create OTA binary (already has correct magic byte) + cp firmware.bin filaman_ota.bin + + # Create a magic byte prepended binary for the bootloader + echo -ne '\xE9' > bootloader_with_magic.bin + cat bootloader.bin >> bootloader_with_magic.bin + + echo "Creating full binary with magic byte..." esptool.py --chip esp32 merge_bin \ + --fill-flash-size 4MB \ --flash_mode dio \ --flash_freq 40m \ --flash_size 4MB \ - -o .pio/build/esp32dev/filaman_full.bin \ - 0x1000 .pio/build/esp32dev/bootloader.bin \ - 0x8000 .pio/build/esp32dev/partitions.bin \ - 0x10000 .pio/build/esp32dev/firmware.bin \ - 0x3D0000 .pio/build/esp32dev/spiffs.bin + -o filaman_full.bin \ + 0x0000 bootloader_with_magic.bin \ + 0x8000 partitions.bin \ + 0x10000 firmware.bin \ + 0x3D0000 spiffs.bin + + # Verify magic bytes + echo "Checking magic bytes:" + echo "OTA binary first bytes:" + hexdump -C -n 16 filaman_ota.bin + echo "Full binary first bytes:" + hexdump -C -n 16 filaman_full.bin + + # Verify file sizes + echo "File sizes:" + ls -lh *.bin - - name: Prepare OTA firmware - run: | - cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin - - name: Create Release env: TOKEN: ${{ secrets.GITEA_TOKEN }} diff --git a/.github/workflows/providers/github-release.yml b/.github/workflows/providers/github-release.yml index f99c992..e1bf6fe 100644 --- a/.github/workflows/providers/github-release.yml +++ b/.github/workflows/providers/github-release.yml @@ -19,32 +19,50 @@ jobs: - name: Install PlatformIO run: | python -m pip install --upgrade pip - pip install --upgrade platformio + pip install --upgrade platformio esptool - name: Build Firmware run: | pio run -t buildfs # Build SPIFFS pio run # Build firmware - - name: Install esptool + - name: Prepare binaries run: | - pip install esptool + cd .pio/build/esp32dev - - name: Merge firmware and SPIFFS - run: | + # Debug: Show all generated files + echo "Files in build directory:" + ls -la + + # Create OTA binary (already has correct magic byte) + cp firmware.bin filaman_ota.bin + + # Create a magic byte prepended binary for the bootloader + echo -ne '\xE9' > bootloader_with_magic.bin + cat bootloader.bin >> bootloader_with_magic.bin + + echo "Creating full binary with magic byte..." esptool.py --chip esp32 merge_bin \ + --fill-flash-size 4MB \ --flash_mode dio \ --flash_freq 40m \ --flash_size 4MB \ - -o .pio/build/esp32dev/filaman_full.bin \ - 0x1000 .pio/build/esp32dev/bootloader.bin \ - 0x8000 .pio/build/esp32dev/partitions.bin \ - 0x10000 .pio/build/esp32dev/firmware.bin \ - 0x3D0000 .pio/build/esp32dev/spiffs.bin - - - name: Prepare OTA firmware - run: | - cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin + -o filaman_full.bin \ + 0x0000 bootloader_with_magic.bin \ + 0x8000 partitions.bin \ + 0x10000 firmware.bin \ + 0x3D0000 spiffs.bin + + # Verify magic bytes + echo "Checking magic bytes:" + echo "OTA binary first bytes:" + hexdump -C -n 16 filaman_ota.bin + echo "Full binary first bytes:" + hexdump -C -n 16 filaman_full.bin + + # Verify file sizes + echo "File sizes:" + ls -lh *.bin - name: Get version from tag id: get_version diff --git a/html/header.html b/html/header.html index f2c2f27..2921464 100644 --- a/html/header.html +++ b/html/header.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/html/index.html b/html/index.html index 10ce83f..5fb0cf3 100644 --- a/html/index.html +++ b/html/index.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/html/rfid.html b/html/rfid.html index d449f29..88e381a 100644 --- a/html/rfid.html +++ b/html/rfid.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/html/spoolman.html b/html/spoolman.html index a16bd36..0e53f90 100644 --- a/html/spoolman.html +++ b/html/spoolman.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/html/upgrade.html b/html/upgrade.html index 4e7255d..57a22b0 100644 --- a/html/upgrade.html +++ b/html/upgrade.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/html/waage.html b/html/waage.html index be14f63..3b508f2 100644 --- a/html/waage.html +++ b/html/waage.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/html/wifi.html b/html/wifi.html index 5a363e5..72707a0 100644 --- a/html/wifi.html +++ b/html/wifi.html @@ -12,7 +12,7 @@
-

FilaManv1.2.77

+

FilaManv1.2.76

Filament Management Tool

diff --git a/platformio.ini b/platformio.ini index 56e0004..4444161 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,7 +9,7 @@ ; https://docs.platformio.org/page/projectconf.html [common] -version = "1.2.77" +version = "1.2.76" [env:esp32dev] platform = espressif32 diff --git a/src/ota.cpp b/src/ota.cpp index 2e53b68..aab79f6 100644 --- a/src/ota.cpp +++ b/src/ota.cpp @@ -21,52 +21,37 @@ void stopAllTasks() { } void handleOTAUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) { - static size_t contentLength = 0; - if (!index) { - contentLength = request->contentLength(); - Serial.printf("Update Start: %s (size: %u bytes)\n", filename.c_str(), contentLength); - - if (contentLength == 0) { + Serial.printf("Update Start: %s\n", filename.c_str()); + if (request->contentLength() == 0) { request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Invalid file size\"}"); return; } - // Stoppe alle Tasks vor dem Update if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) { stopAllTasks(); tasksAreStopped = true; } - // Für full.bin keine Magic Byte Prüfung - bool isFullImage = (contentLength > 0x300000); - if (!isFullImage && data[0] != 0xE9) { - Serial.printf("Wrong magic byte: 0x%02X (expected 0xE9)\n", data[0]); - request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Invalid firmware format\"}"); - return; - } - - // Bei full.bin UPDATE_SIZE_UNKNOWN verwenden - if (!Update.begin(isFullImage ? UPDATE_SIZE_UNKNOWN : contentLength)) { + // Da die full.bin jetzt das korrekte Magic Byte hat, + // können wir ein normales Update ohne spezielle Flags starten + if (!Update.begin()) { Update.printError(Serial); - request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"OTA could not begin\"}"); + request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Update start failed\"}"); return; } - Serial.printf("Starting %s update\n", isFullImage ? "full" : "firmware"); } - // Schreibe Update-Daten if (Update.write(data, len) != len) { Update.printError(Serial); - request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"OTA write failed\"}"); + request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Write failed\"}"); return; } - // Update abschließen if (final) { if (!Update.end(true)) { Update.printError(Serial); - request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"OTA end failed\"}"); + request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Update failed\"}"); return; } Serial.println("Update successful, restarting...");