Compare commits
	
		
			4 Commits
		
	
	
		
			v1.2.72
			...
			e140f8e003
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e140f8e003 | |||
| 3d0bdde476 | |||
| 3ac7d6b4f7 | |||
| 5f52775984 | 
| @@ -1,5 +1,14 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## [1.2.73] - 2025-02-20 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.2.73 | ||||||
|  | - improve OTA update process with enhanced size checks and progress logging | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - enhance OTA update process with improved size checks and debugging output | ||||||
|  |  | ||||||
|  |  | ||||||
| ## [1.2.72] - 2025-02-20 | ## [1.2.72] - 2025-02-20 | ||||||
| ### Changed | ### Changed | ||||||
| - update webpages for version v1.2.72 | - update webpages for version v1.2.72 | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -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.72</span></h1> |                 <h1>FilaMan<span class="version">v1.2.73</span></h1> | ||||||
|                 <h4>Filament Management Tool</h4> |                 <h4>Filament Management Tool</h4> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ | |||||||
| ; https://docs.platformio.org/page/projectconf.html | ; https://docs.platformio.org/page/projectconf.html | ||||||
|  |  | ||||||
| [common] | [common] | ||||||
| version = "1.2.72" | version = "1.2.73" | ||||||
|  |  | ||||||
| [env:esp32dev] | [env:esp32dev] | ||||||
| platform = espressif32 | platform = espressif32 | ||||||
|   | |||||||
							
								
								
									
										55
									
								
								src/ota.cpp
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								src/ota.cpp
									
									
									
									
									
								
							| @@ -29,63 +29,82 @@ void handleOTAUpload(AsyncWebServerRequest *request, String filename, size_t ind | |||||||
|     static bool isFullImage = false; |     static bool isFullImage = false; | ||||||
|     static uint32_t currentOffset = 0; |     static uint32_t currentOffset = 0; | ||||||
|      |      | ||||||
|     // Offset-Definitionen aus dem Workflow |     // Flash layout constants from partitions.csv | ||||||
|     static const uint32_t BOOTLOADER_OFFSET = 0x1000; |     static const uint32_t FLASH_SIZE = 0x400000;    // 4MB total | ||||||
|     static const uint32_t PARTITIONS_OFFSET = 0x8000; |     static const uint32_t APP_SIZE = 0x1E0000;      // Size per app partition | ||||||
|     static const uint32_t FIRMWARE_OFFSET = 0x10000; |     static const uint32_t SPIFFS_OFFSET = 0x3D0000; // SPIFFS start | ||||||
|     static const uint32_t SPIFFS_OFFSET = 0x3D0000; |  | ||||||
|      |      | ||||||
|     if (!index) { |     if (!index) { | ||||||
|         contentLength = request->contentLength(); |         contentLength = request->contentLength(); | ||||||
|         Serial.printf("Update size: %u bytes\n", contentLength); |         Serial.printf("Update size: %u bytes (0x%X)\n", contentLength, contentLength); | ||||||
|          |          | ||||||
|         if (contentLength == 0) { |         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; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Stop all tasks to save resources |  | ||||||
|         if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) { |         if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) { | ||||||
|             stopAllTasks(); |             stopAllTasks(); | ||||||
|             tasksAreStopped = true; |             tasksAreStopped = true; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         isFullImage = (contentLength > SPIFFS_OFFSET); |         isFullImage = (contentLength >= SPIFFS_OFFSET); | ||||||
|  |          | ||||||
|         if (!isFullImage) { |         if (!isFullImage) { | ||||||
|             // Regular firmware update |             // Regular firmware update must not exceed app partition size | ||||||
|  |             if (contentLength > APP_SIZE) { | ||||||
|  |                 Serial.printf("Firmware too large: 0x%X > 0x%X\n", contentLength, APP_SIZE); | ||||||
|  |                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Firmware too large\"}"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |              | ||||||
|             if (!Update.begin(contentLength)) { |             if (!Update.begin(contentLength)) { | ||||||
|                 Serial.printf("Not enough space: %u required\n", contentLength); |                 Serial.printf("Not enough space for firmware: %u required\n", contentLength); | ||||||
|                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Not enough space available\"}"); |                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Not enough space available\"}"); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             Serial.println("Firmware update started"); |             Serial.printf("Firmware update started (size: 0x%X)\n", contentLength); | ||||||
|         } else { |         } else { | ||||||
|             // Full image update - start with bootloader |             // Full image update | ||||||
|             if (!Update.begin(contentLength, U_FLASH)) { |             if (contentLength > FLASH_SIZE) { | ||||||
|                 Serial.printf("Not enough space for full image: %u required\n", contentLength); |                 Serial.printf("Image too large: 0x%X > 0x%X\n", contentLength, FLASH_SIZE); | ||||||
|                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Not enough space available\"}"); |                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Image too large\"}"); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|             Serial.println("Full image update started"); |              | ||||||
|  |             if (!Update.begin(FLASH_SIZE, U_FLASH)) { | ||||||
|  |                 Serial.println("Could not begin full image update"); | ||||||
|  |                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Could not start full update\"}"); | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             Serial.printf("Full image update started (size: 0x%X)\n", contentLength); | ||||||
|         } |         } | ||||||
|         currentOffset = 0; |         currentOffset = 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Write data |  | ||||||
|     if (Update.write(data, len) != len) { |     if (Update.write(data, len) != len) { | ||||||
|         String errorMsg = Update.errorString(); |         String errorMsg = Update.errorString(); | ||||||
|         if (errorMsg != "No Error") { |         if (errorMsg != "No Error") { | ||||||
|             Update.printError(Serial); |             Update.printError(Serial); | ||||||
|  |             Serial.printf("Error at offset: 0x%X of 0x%X bytes\n", currentOffset, contentLength); | ||||||
|             request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Error writing update: " + errorMsg + "\"}"); |             request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Error writing update: " + errorMsg + "\"}"); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  |     // Progress logging | ||||||
|  |     if ((currentOffset % 0x40000) == 0) { // Log every 256KB | ||||||
|  |         Serial.printf("Update progress: 0x%X of 0x%X bytes (%.1f%%)\n",  | ||||||
|  |             currentOffset,  | ||||||
|  |             contentLength,  | ||||||
|  |             (currentOffset * 100.0) / contentLength); | ||||||
|  |     } | ||||||
|  |      | ||||||
|     currentOffset += len; |     currentOffset += len; | ||||||
|      |      | ||||||
|     if (final) { |     if (final) { | ||||||
|         if (Update.end(true)) { |         if (Update.end(true)) { | ||||||
|             Serial.println("Update complete"); |             Serial.printf("Update complete: 0x%X bytes written\n", currentOffset); | ||||||
|             request->send(200, "application/json", "{\"status\":\"success\",\"message\":\"Update successful! Device will restart...\",\"restart\":true}"); |             request->send(200, "application/json", "{\"status\":\"success\",\"message\":\"Update successful! Device will restart...\",\"restart\":true}"); | ||||||
|             delay(1000); |             delay(1000); | ||||||
|             ESP.restart(); |             ESP.restart(); | ||||||
|   | |||||||
| @@ -3,6 +3,12 @@ | |||||||
|  |  | ||||||
| #include <ESPAsyncWebServer.h> | #include <ESPAsyncWebServer.h> | ||||||
|  |  | ||||||
|  | // Update size unknown constant, falls nicht bereits definiert | ||||||
|  | #ifndef UPDATE_SIZE_UNKNOWN | ||||||
|  | #define UPDATE_SIZE_UNKNOWN 0xFFFFFFFF | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | 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); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
		Reference in New Issue
	
	Block a user