Compare commits
	
		
			4 Commits
		
	
	
		
			v1.2.72
			...
			e140f8e003
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e140f8e003 | |||
| 3d0bdde476 | |||
| 3ac7d6b4f7 | |||
| 5f52775984 | 
| @@ -1,5 +1,14 @@ | ||||
| # 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 | ||||
| ### Changed | ||||
| - update webpages for version v1.2.72 | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|         <div style="display: flex; align-items: center; gap: 2rem;"> | ||||
|             <img src="/logo.png" alt="FilaMan Logo" class="logo"> | ||||
|             <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> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| ; https://docs.platformio.org/page/projectconf.html | ||||
|  | ||||
| [common] | ||||
| version = "1.2.72" | ||||
| version = "1.2.73" | ||||
|  | ||||
| [env:esp32dev] | ||||
| 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 uint32_t currentOffset = 0; | ||||
|      | ||||
|     // Offset-Definitionen aus dem Workflow | ||||
|     static const uint32_t BOOTLOADER_OFFSET = 0x1000; | ||||
|     static const uint32_t PARTITIONS_OFFSET = 0x8000; | ||||
|     static const uint32_t FIRMWARE_OFFSET = 0x10000; | ||||
|     static const uint32_t SPIFFS_OFFSET = 0x3D0000; | ||||
|     // Flash layout constants from partitions.csv | ||||
|     static const uint32_t FLASH_SIZE = 0x400000;    // 4MB total | ||||
|     static const uint32_t APP_SIZE = 0x1E0000;      // Size per app partition | ||||
|     static const uint32_t SPIFFS_OFFSET = 0x3D0000; // SPIFFS start | ||||
|      | ||||
|     if (!index) { | ||||
|         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) { | ||||
|             request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Invalid file size\"}"); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         // Stop all tasks to save resources | ||||
|         if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) { | ||||
|             stopAllTasks(); | ||||
|             tasksAreStopped = true; | ||||
|         } | ||||
|  | ||||
|         isFullImage = (contentLength > SPIFFS_OFFSET); | ||||
|         isFullImage = (contentLength >= SPIFFS_OFFSET); | ||||
|          | ||||
|         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)) { | ||||
|                 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\"}"); | ||||
|                 return; | ||||
|             } | ||||
|             Serial.println("Firmware update started"); | ||||
|             Serial.printf("Firmware update started (size: 0x%X)\n", contentLength); | ||||
|         } else { | ||||
|             // Full image update - start with bootloader | ||||
|             if (!Update.begin(contentLength, U_FLASH)) { | ||||
|                 Serial.printf("Not enough space for full image: %u required\n", contentLength); | ||||
|                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Not enough space available\"}"); | ||||
|             // Full image update | ||||
|             if (contentLength > FLASH_SIZE) { | ||||
|                 Serial.printf("Image too large: 0x%X > 0x%X\n", contentLength, FLASH_SIZE); | ||||
|                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Image too large\"}"); | ||||
|                 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; | ||||
|     } | ||||
|  | ||||
|     // Write data | ||||
|     if (Update.write(data, len) != len) { | ||||
|         String errorMsg = Update.errorString(); | ||||
|         if (errorMsg != "No Error") { | ||||
|             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 + "\"}"); | ||||
|             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; | ||||
|      | ||||
|     if (final) { | ||||
|         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}"); | ||||
|             delay(1000); | ||||
|             ESP.restart(); | ||||
|   | ||||
| @@ -3,6 +3,12 @@ | ||||
|  | ||||
| #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); | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user