fix: add timeout handling and error states for vendor and filament operations
This commit is contained in:
		
							
								
								
									
										93
									
								
								src/api.cpp
									
									
									
									
									
								
							
							
						
						
									
										93
									
								
								src/api.cpp
									
									
									
									
									
								
							| @@ -325,14 +325,25 @@ void sendToApi(void *parameter) { | ||||
|         case API_REQUEST_BAMBU_UPDATE: | ||||
|             oledShowProgressBar(1, 1, "Failure!", "Bambu update"); | ||||
|             break; | ||||
|         case API_REQUEST_VENDOR_CHECK: | ||||
|             oledShowProgressBar(1, 1, "Failure!", "Vendor check"); | ||||
|             foundVendorId = 0; // Set to 0 to indicate error/not found | ||||
|             break; | ||||
|         case API_REQUEST_VENDOR_CREATE: | ||||
|             oledShowProgressBar(1, 1, "Failure!", "Vendor create"); | ||||
|             createdVendorId = 0; // Set to 0 to indicate error | ||||
|             break; | ||||
|         case API_REQUEST_FILAMENT_CHECK: | ||||
|             oledShowProgressBar(1, 1, "Failure!", "Filament check"); | ||||
|             foundFilamentId = 0; // Set to 0 to indicate error/not found | ||||
|             break; | ||||
|         case API_REQUEST_FILAMENT_CREATE: | ||||
|             oledShowProgressBar(1, 1, "Failure!", "Filament create"); | ||||
|             createdFilamentId = 0; // Set to 0 to indicate error | ||||
|             break; | ||||
|         case API_REQUEST_SPOOL_CREATE: | ||||
|             oledShowProgressBar(1, 1, "Failure!", "Spool create"); | ||||
|             createdSpoolId = 0; // Set to 0 to indicate error instead of hanging | ||||
|             break; | ||||
|         } | ||||
|         Serial.println("Fehler beim Senden an Spoolman! HTTP Code: " + String(httpCode)); | ||||
| @@ -676,8 +687,20 @@ uint16_t createVendor(const JsonDocument& payload) { | ||||
|  | ||||
|     // Wait for task completion and return the created vendor ID | ||||
|     // Note: createdVendorId will be set by sendToApi when response is received | ||||
|     while(createdVendorId == 65535) { | ||||
|     uint16_t timeout_counter = 0; | ||||
|     const uint16_t max_timeout = 200; // 10 seconds timeout (200 * 50ms) | ||||
|      | ||||
|     while(createdVendorId == 65535 && timeout_counter < max_timeout) { | ||||
|         vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|         timeout_counter++; | ||||
|     } | ||||
|      | ||||
|     // Check if we got a valid response or timed out | ||||
|     if (createdVendorId == 65535) { | ||||
|         Serial.println("ERROR: Timeout waiting for vendor creation response"); | ||||
|         createdVendorId = 0; // Set to error state | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|      | ||||
|     return createdVendorId; | ||||
| @@ -723,9 +746,21 @@ uint16_t checkVendor(const JsonDocument& payload) { | ||||
|     ); | ||||
|      | ||||
|     // Wait until foundVendorId is updated by the API response (not 65535 anymore) | ||||
|     while (foundVendorId == 65535) | ||||
|     uint16_t timeout_counter = 0; | ||||
|     const uint16_t max_timeout = 200; // 10 seconds timeout (200 * 50ms) | ||||
|      | ||||
|     while (foundVendorId == 65535 && timeout_counter < max_timeout) | ||||
|     { | ||||
|         vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|         timeout_counter++; | ||||
|     } | ||||
|      | ||||
|     // Check for timeout | ||||
|     if (foundVendorId == 65535) { | ||||
|         Serial.println("ERROR: Timeout waiting for vendor check response"); | ||||
|         foundVendorId = 0; // Set to error state | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     // Check if vendor was found | ||||
| @@ -831,8 +866,26 @@ uint16_t createFilament(uint16_t vendorId, const JsonDocument& payload) { | ||||
|  | ||||
|     // Wait for task completion and return the created filament ID | ||||
|     // Note: createdFilamentId will be set by sendToApi when response is received | ||||
|     while(createdFilamentId == 65535) { | ||||
|     uint16_t timeout_counter = 0; | ||||
|     const uint16_t max_timeout = 200; // 10 seconds timeout (200 * 50ms) | ||||
|      | ||||
|     while(createdFilamentId == 65535 && timeout_counter < max_timeout) { | ||||
|         vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|         timeout_counter++; | ||||
|     } | ||||
|      | ||||
|     // Check if we got a valid response or timed out | ||||
|     if (createdFilamentId == 65535) { | ||||
|         Serial.println("ERROR: Timeout waiting for filament creation response"); | ||||
|         createdFilamentId = 0; // Set to error state | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|      | ||||
|     if (createdFilamentId == 0) { | ||||
|         Serial.println("ERROR: Filament creation failed (HTTP error)"); | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|      | ||||
|     return createdFilamentId; | ||||
| @@ -869,8 +922,20 @@ uint16_t checkFilament(uint16_t vendorId, const JsonDocument& payload) { | ||||
|     ); | ||||
|      | ||||
|     // Wait until foundFilamentId is updated by the API response (not 65535 anymore) | ||||
|     while (foundFilamentId == 65535) { | ||||
|     uint16_t timeout_counter = 0; | ||||
|     const uint16_t max_timeout = 200; // 10 seconds timeout (200 * 50ms) | ||||
|      | ||||
|     while (foundFilamentId == 65535 && timeout_counter < max_timeout) { | ||||
|         vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|         timeout_counter++; | ||||
|     } | ||||
|      | ||||
|     // Check for timeout | ||||
|     if (foundFilamentId == 65535) { | ||||
|         Serial.println("ERROR: Timeout waiting for filament check response"); | ||||
|         foundFilamentId = 0; // Set to error state | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     // Check if filament was found | ||||
| @@ -949,8 +1014,26 @@ uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& paylo | ||||
|      | ||||
|     // Wait for task completion and return the created spool ID | ||||
|     // Note: createdSpoolId will be set by sendToApi when response is received | ||||
|     while(createdSpoolId == 65535) { | ||||
|     uint16_t timeout_counter = 0; | ||||
|     const uint16_t max_timeout = 200; // 10 seconds timeout (200 * 50ms) | ||||
|      | ||||
|     while(createdSpoolId == 65535 && timeout_counter < max_timeout) { | ||||
|         vTaskDelay(50 / portTICK_PERIOD_MS); | ||||
|         timeout_counter++; | ||||
|     } | ||||
|      | ||||
|     // Check if we got a valid response or timed out | ||||
|     if (createdSpoolId == 65535) { | ||||
|         Serial.println("ERROR: Timeout waiting for spool creation response"); | ||||
|         createdSpoolId = 0; // Set to error state | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|      | ||||
|     if (createdSpoolId == 0) { | ||||
|         Serial.println("ERROR: Spool creation failed (HTTP error)"); | ||||
|         nfcReaderState = NFC_IDLE; // Reset NFC state | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     // Write data to tag with startWriteJsonToTag | ||||
|   | ||||
		Reference in New Issue
	
	Block a user