Compare commits
	
		
			3 Commits
		
	
	
		
			v1.2.71
			...
			463eaf4b6f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 463eaf4b6f | |||
| 4bf6b11d3a | |||
| b0c4af7c4e | 
| @@ -1,5 +1,11 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## [1.2.72] - 2025-02-20 | ||||
| ### Changed | ||||
| - update webpages for version v1.2.72 | ||||
| - simplify OTA update process by removing unnecessary buffer and adjusting offsets | ||||
|  | ||||
|  | ||||
| ## [1.2.71] - 2025-02-20 | ||||
| ### Added | ||||
| - update version number to v1.2.65 in HTML files and platformio.ini; add script to create full binary | ||||
|   | ||||
| @@ -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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</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.71</span></h1> | ||||
|                 <h1>FilaMan<span class="version">v1.2.72</span></h1> | ||||
|                 <h4>Filament Management Tool</h4> | ||||
|             </div> | ||||
|         </div> | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| ; https://docs.platformio.org/page/projectconf.html | ||||
|  | ||||
| [common] | ||||
| version = "1.2.71" | ||||
| version = "1.2.72" | ||||
|  | ||||
| [env:esp32dev] | ||||
| platform = espressif32 | ||||
| @@ -66,7 +66,7 @@ extra_scripts = | ||||
|     pre:scripts/pre_spiffs.py    ; wird als zweites ausgeführt | ||||
|     pre:scripts/combine_html.py  ; wird als drittes ausgeführt | ||||
|     scripts/gzip_files.py | ||||
|     scripts/create_full_bin.py  ; Neues Skript zur Erstellung der full.bin | ||||
|     # scripts/create_full_bin.py  # Nicht mehr benötigt, da full.bin im Workflow erstellt wird | ||||
|  | ||||
| ; Remove or comment out the targets line | ||||
| ;targets = buildfs, build | ||||
|   | ||||
							
								
								
									
										136
									
								
								src/ota.cpp
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								src/ota.cpp
									
									
									
									
									
								
							| @@ -28,24 +28,14 @@ void handleOTAUpload(AsyncWebServerRequest *request, String filename, size_t ind | ||||
|     static size_t contentLength = 0; | ||||
|     static bool isFullImage = false; | ||||
|     static uint32_t currentOffset = 0; | ||||
|     static uint8_t *spiffsBuffer = nullptr; | ||||
|     static size_t spiffsSize = 0; | ||||
|     static const uint32_t SPIFFS_START = 0x3D0000;  // Korrigierter SPIFFS start address aus partitions.csv | ||||
|     static const uint32_t SPIFFS_SIZE = 0x30000;   // Korrigierte SPIFFS size aus partitions.csv | ||||
|      | ||||
|     // Stop all tasks to save resources | ||||
|     if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) { | ||||
|         stopAllTasks(); | ||||
|         tasksAreStopped = true; | ||||
|     } | ||||
|     // 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; | ||||
|      | ||||
|     if (!index) { | ||||
|         // Reset static variables | ||||
|         if (spiffsBuffer) { | ||||
|             free(spiffsBuffer); | ||||
|             spiffsBuffer = nullptr; | ||||
|         } | ||||
|          | ||||
|         contentLength = request->contentLength(); | ||||
|         Serial.printf("Update size: %u bytes\n", contentLength); | ||||
|          | ||||
| @@ -54,69 +44,34 @@ void handleOTAUpload(AsyncWebServerRequest *request, String filename, size_t ind | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (data[0] == ESP_MAGIC) { | ||||
|             isFullImage = (contentLength > SPIFFS_START); | ||||
|              | ||||
|             if (isFullImage) { | ||||
|                 if (!Update.begin(SPIFFS_START, U_FLASH)) { | ||||
|                     Serial.printf("Not enough space for firmware: %u required\n", SPIFFS_START); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Not enough space available\"}"); | ||||
|                     return; | ||||
|         // Stop all tasks to save resources | ||||
|         if (!tasksAreStopped && (RfidReaderTask || BambuMqttTask || ScaleTask)) { | ||||
|             stopAllTasks(); | ||||
|             tasksAreStopped = true; | ||||
|         } | ||||
|  | ||||
|                 spiffsSize = SPIFFS_SIZE; | ||||
|                 spiffsBuffer = (uint8_t*)malloc(spiffsSize); | ||||
|                 if (!spiffsBuffer) { | ||||
|                     Serial.println("Failed to allocate SPIFFS buffer"); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Memory allocation failed\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|                 memset(spiffsBuffer, 0xFF, spiffsSize); | ||||
|                 Serial.println("Full image update started"); | ||||
|             } else { | ||||
|                 if (!Update.begin(contentLength, U_FLASH)) { | ||||
|         isFullImage = (contentLength > SPIFFS_OFFSET); | ||||
|         if (!isFullImage) { | ||||
|             // Regular firmware update | ||||
|             if (!Update.begin(contentLength)) { | ||||
|                 Serial.printf("Not enough space: %u required\n", contentLength); | ||||
|                 request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Not enough space available\"}"); | ||||
|                 return; | ||||
|             } | ||||
|             Serial.println("Firmware update started"); | ||||
|             } | ||||
|         } else { | ||||
|             request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Invalid image format\"}"); | ||||
|             // 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\"}"); | ||||
|                 return; | ||||
|             } | ||||
|             Serial.println("Full image update started"); | ||||
|         } | ||||
|         currentOffset = 0; | ||||
|     } | ||||
|  | ||||
|     if (isFullImage) { | ||||
|         // Firmware Teil | ||||
|         if (currentOffset < SPIFFS_START) { | ||||
|             size_t writeLen = min(len, (size_t)(SPIFFS_START - currentOffset)); | ||||
|             if (Update.write(data, writeLen) != writeLen) { | ||||
|                 String errorMsg = Update.errorString(); | ||||
|                 if (errorMsg != "No Error") { | ||||
|                     Update.printError(Serial); | ||||
|                     if (spiffsBuffer) free(spiffsBuffer); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"Error writing firmware: " + errorMsg + "\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         // SPIFFS Teil | ||||
|         if (currentOffset + len > SPIFFS_START) { | ||||
|             uint32_t spiffsOffset = (currentOffset >= SPIFFS_START) ?  | ||||
|                                   (currentOffset - SPIFFS_START) : 0; | ||||
|             uint32_t dataOffset = (currentOffset < SPIFFS_START) ?  | ||||
|                                 (SPIFFS_START - currentOffset) : 0; | ||||
|              | ||||
|             if (spiffsOffset < spiffsSize) { | ||||
|                 size_t copyLen = min(len - dataOffset, spiffsSize - spiffsOffset); | ||||
|                 memcpy(spiffsBuffer + spiffsOffset, data + dataOffset, copyLen); | ||||
|                 Serial.printf("Collecting SPIFFS data: offset=%u, len=%u\n", spiffsOffset, copyLen); | ||||
|             } | ||||
|         } | ||||
|     } else { | ||||
|     // Write data | ||||
|     if (Update.write(data, len) != len) { | ||||
|         String errorMsg = Update.errorString(); | ||||
|         if (errorMsg != "No Error") { | ||||
| @@ -125,65 +80,16 @@ void handleOTAUpload(AsyncWebServerRequest *request, String filename, size_t ind | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
|     } | ||||
|      | ||||
|     currentOffset += len; | ||||
|      | ||||
|     if (final) { | ||||
|         if (Update.end(true)) { | ||||
|             Serial.println("Firmware update complete"); | ||||
|              | ||||
|             if (isFullImage && spiffsBuffer) { | ||||
|                 Serial.println("Starting SPIFFS update"); | ||||
|                  | ||||
|                 if (SPIFFS.begin(true)) { | ||||
|                     SPIFFS.end(); | ||||
|                 } | ||||
|                  | ||||
|                 if (!Update.begin(spiffsSize, U_SPIFFS)) { | ||||
|                     Serial.println("Could not begin SPIFFS update"); | ||||
|                     free(spiffsBuffer); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"SPIFFS update initialization failed\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|                  | ||||
|                 Serial.printf("Writing SPIFFS data: %u bytes\n", spiffsSize); | ||||
|                 if (Update.write(spiffsBuffer, spiffsSize) != spiffsSize) { | ||||
|                     Serial.println("SPIFFS Write Failed"); | ||||
|                     Update.printError(Serial); | ||||
|                     free(spiffsBuffer); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"SPIFFS write failed\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|                  | ||||
|                 if (!Update.end(true)) { | ||||
|                     Serial.println("SPIFFS End Failed"); | ||||
|                     Update.printError(Serial); | ||||
|                     free(spiffsBuffer); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"SPIFFS finish failed\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|                  | ||||
|                 free(spiffsBuffer); | ||||
|                 spiffsBuffer = nullptr; | ||||
|                 Serial.println("SPIFFS update complete"); | ||||
|                  | ||||
|                 if (!SPIFFS.begin(true)) { | ||||
|                     Serial.println("SPIFFS mount after update failed"); | ||||
|                     request->send(400, "application/json", "{\"status\":\"error\",\"message\":\"SPIFFS verification failed\"}"); | ||||
|                     return; | ||||
|                 } | ||||
|                 SPIFFS.end(); | ||||
|             } | ||||
|              | ||||
|             Serial.println("Update complete"); | ||||
|             request->send(200, "application/json", "{\"status\":\"success\",\"message\":\"Update successful! Device will restart...\",\"restart\":true}"); | ||||
|             delay(1000); | ||||
|             ESP.restart(); | ||||
|         } else { | ||||
|             if (spiffsBuffer) { | ||||
|                 free(spiffsBuffer); | ||||
|                 spiffsBuffer = nullptr; | ||||
|             } | ||||
|             String errorMsg = Update.errorString(); | ||||
|             if (errorMsg != "No Error") { | ||||
|                 Update.printError(Serial); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user