Compare commits

..

No commits in common. "8edd50f7868583b54c9a34d5deeca72200fa53f2" and "c374069f36b96605d367441eeb0b868fb7fbbc91" have entirely different histories.

12 changed files with 64 additions and 92 deletions

View File

@ -30,49 +30,33 @@ jobs:
- name: Install PlatformIO - name: Install PlatformIO
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install --upgrade platformio esptool pip install --upgrade platformio
- name: Build Firmware - name: Build Firmware
run: | run: |
pio run -t buildfs # Build SPIFFS pio run -t buildfs # Build SPIFFS
pio run # Build firmware pio run # Build firmware
- name: Prepare binaries - name: Install esptool
run: | run: |
cd .pio/build/esp32dev pip install esptool
# Create OTA binary (firmware only) - name: Merge firmware and SPIFFS
cp firmware.bin filaman_ota.bin run: |
esptool.py --chip esp32 merge_bin \
# Create basic flash layout --flash_mode dio \
echo "Creating initial 4MB flash image..." --flash_freq 40m \
dd if=/dev/zero bs=1M count=4 of=flash_4mb.bin --flash_size 4MB \
-o .pio/build/esp32dev/filaman_full.bin \
# Create partition layout 0x1000 .pio/build/esp32dev/bootloader.bin \
echo "Writing bootloader..." 0x8000 .pio/build/esp32dev/partitions.bin \
dd if=bootloader.bin of=flash_4mb.bin bs=1 seek=$((0x1000)) conv=notrunc 0x10000 .pio/build/esp32dev/firmware.bin \
0x3D0000 .pio/build/esp32dev/spiffs.bin
echo "Writing partitions..."
dd if=partitions.bin of=flash_4mb.bin bs=1 seek=$((0x8000)) conv=notrunc
echo "Writing firmware..."
dd if=firmware.bin of=flash_4mb.bin bs=1 seek=$((0x10000)) conv=notrunc
echo "Writing SPIFFS..."
dd if=spiffs.bin of=flash_4mb.bin bs=1 seek=$((0x3D0000)) conv=notrunc
# Rename to final name
cp flash_4mb.bin filaman_full.bin
# Verify file sizes and content
echo "File sizes:"
ls -lh *.bin
echo "Binary information:"
esptool.py --chip esp32 image_info filaman_ota.bin || true
echo "Full binary info:"
xxd -l 64 filaman_full.bin
- name: Prepare OTA firmware
run: |
cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin
- name: Create Release - name: Create Release
env: env:
TOKEN: ${{ secrets.GITEA_TOKEN }} TOKEN: ${{ secrets.GITEA_TOKEN }}

View File

@ -19,50 +19,32 @@ jobs:
- name: Install PlatformIO - name: Install PlatformIO
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip
pip install --upgrade platformio esptool pip install --upgrade platformio
- name: Build Firmware - name: Build Firmware
run: | run: |
pio run -t buildfs # Build SPIFFS pio run -t buildfs # Build SPIFFS
pio run # Build firmware pio run # Build firmware
- name: Prepare binaries - name: Install esptool
run: | run: |
cd .pio/build/esp32dev pip install esptool
# Debug: Show all generated files - name: Merge firmware and SPIFFS
echo "Files in build directory:" run: |
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 \ esptool.py --chip esp32 merge_bin \
--fill-flash-size 4MB \
--flash_mode dio \ --flash_mode dio \
--flash_freq 40m \ --flash_freq 40m \
--flash_size 4MB \ --flash_size 4MB \
-o filaman_full.bin \ -o .pio/build/esp32dev/filaman_full.bin \
0x0000 bootloader_with_magic.bin \ 0x1000 .pio/build/esp32dev/bootloader.bin \
0x8000 partitions.bin \ 0x8000 .pio/build/esp32dev/partitions.bin \
0x10000 firmware.bin \ 0x10000 .pio/build/esp32dev/firmware.bin \
0x3D0000 spiffs.bin 0x3D0000 .pio/build/esp32dev/spiffs.bin
# Verify magic bytes - name: Prepare OTA firmware
echo "Checking magic bytes:" run: |
echo "OTA binary first bytes:" cp .pio/build/esp32dev/firmware.bin .pio/build/esp32dev/filaman_ota.bin
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 - name: Get version from tag
id: get_version id: get_version

View File

@ -1,14 +1,5 @@
# Changelog # Changelog
## [1.2.78] - 2025-02-20
### Changed
- update webpages for version v1.2.78
- streamline Gitea release workflow and update version to 1.2.77
### Fixed
- 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
## [1.2.77] - 2025-02-20 ## [1.2.77] - 2025-02-20
### Changed ### Changed
- optimize Gitea release workflow by simplifying build steps and improving file handling - optimize Gitea release workflow by simplifying build steps and improving file handling

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -12,7 +12,7 @@
<div style="display: flex; align-items: center; gap: 2rem;"> <div style="display: flex; align-items: center; gap: 2rem;">
<img src="/logo.png" alt="FilaMan Logo" class="logo"> <img src="/logo.png" alt="FilaMan Logo" class="logo">
<div class="logo-text"> <div class="logo-text">
<h1>FilaMan<span class="version">v1.2.78</span></h1> <h1>FilaMan<span class="version">v1.2.77</span></h1>
<h4>Filament Management Tool</h4> <h4>Filament Management Tool</h4>
</div> </div>
</div> </div>

View File

@ -9,7 +9,7 @@
; https://docs.platformio.org/page/projectconf.html ; https://docs.platformio.org/page/projectconf.html
[common] [common]
version = "1.2.78" version = "1.2.77"
[env:esp32dev] [env:esp32dev]
platform = espressif32 platform = espressif32

View File

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