refactor: improve task synchronization in vendor, filament, and spool creation functions
This commit is contained in:
		
							
								
								
									
										32
									
								
								src/api.cpp
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								src/api.cpp
									
									
									
									
									
								
							| @@ -616,6 +616,7 @@ bool updateSpoolBambuData(String payload) { | |||||||
| uint16_t createVendor(String vendor) { | uint16_t createVendor(String vendor) { | ||||||
|     // Create new vendor in Spoolman database using task system |     // Create new vendor in Spoolman database using task system | ||||||
|     // Note: Due to async nature, the ID will be stored in createdVendorId global variable |     // Note: Due to async nature, the ID will be stored in createdVendorId global variable | ||||||
|  |     // Note: This function assumes that the caller has already ensured API is IDLE | ||||||
|     createdVendorId = 0; // Reset previous value |     createdVendorId = 0; // Reset previous value | ||||||
|      |      | ||||||
|     String spoolsUrl = spoolmanUrl + apiUrl + "/vendor"; |     String spoolsUrl = spoolmanUrl + apiUrl + "/vendor"; | ||||||
| @@ -645,9 +646,7 @@ uint16_t createVendor(String vendor) { | |||||||
|     params->spoolsUrl = spoolsUrl; |     params->spoolsUrl = spoolsUrl; | ||||||
|     params->updatePayload = vendorPayload; |     params->updatePayload = vendorPayload; | ||||||
|  |  | ||||||
|     // Check if API is idle before creating task |     // Create task without additional API state check since caller ensures synchronization | ||||||
|     if(spoolmanApiState == API_IDLE){ |  | ||||||
|         // Erstelle die Task |  | ||||||
|     BaseType_t result = xTaskCreate( |     BaseType_t result = xTaskCreate( | ||||||
|         sendToApi,                // Task-Funktion |         sendToApi,                // Task-Funktion | ||||||
|         "SendToApiTask",          // Task-Name |         "SendToApiTask",          // Task-Name | ||||||
| @@ -656,8 +655,9 @@ uint16_t createVendor(String vendor) { | |||||||
|         0,                        // Priorität |         0,                        // Priorität | ||||||
|         NULL                      // Task-Handle (nicht benötigt) |         NULL                      // Task-Handle (nicht benötigt) | ||||||
|     ); |     ); | ||||||
|     } else { |  | ||||||
|         Serial.println("Not spawning new task, API still active!"); |     if (result != pdPASS) { | ||||||
|  |         Serial.println("Failed to create vendor task!"); | ||||||
|         delete params; |         delete params; | ||||||
|         vendorDoc.clear(); |         vendorDoc.clear(); | ||||||
|         return 0; |         return 0; | ||||||
| @@ -736,6 +736,7 @@ uint16_t checkVendor(String vendor) { | |||||||
| uint16_t createFilament(uint16_t vendorId, const JsonDocument& payload) { | uint16_t createFilament(uint16_t vendorId, const JsonDocument& payload) { | ||||||
|     // Create new filament in Spoolman database using task system |     // Create new filament in Spoolman database using task system | ||||||
|     // Note: Due to async nature, the ID will be stored in createdFilamentId global variable |     // Note: Due to async nature, the ID will be stored in createdFilamentId global variable | ||||||
|  |     // Note: This function assumes that the caller has already ensured API is IDLE | ||||||
|     createdFilamentId = 0; // Reset previous value |     createdFilamentId = 0; // Reset previous value | ||||||
|      |      | ||||||
|     String spoolsUrl = spoolmanUrl + apiUrl + "/filament"; |     String spoolsUrl = spoolmanUrl + apiUrl + "/filament"; | ||||||
| @@ -790,9 +791,7 @@ uint16_t createFilament(uint16_t vendorId, const JsonDocument& payload) { | |||||||
|     params->spoolsUrl = spoolsUrl; |     params->spoolsUrl = spoolsUrl; | ||||||
|     params->updatePayload = filamentPayload; |     params->updatePayload = filamentPayload; | ||||||
|  |  | ||||||
|     // Check if API is idle before creating task |     // Create task without additional API state check since caller ensures synchronization | ||||||
|     if(spoolmanApiState == API_IDLE){ |  | ||||||
|         // Erstelle die Task |  | ||||||
|     BaseType_t result = xTaskCreate( |     BaseType_t result = xTaskCreate( | ||||||
|         sendToApi,                // Task-Funktion |         sendToApi,                // Task-Funktion | ||||||
|         "SendToApiTask",          // Task-Name |         "SendToApiTask",          // Task-Name | ||||||
| @@ -801,8 +800,9 @@ uint16_t createFilament(uint16_t vendorId, const JsonDocument& payload) { | |||||||
|         0,                        // Priorität |         0,                        // Priorität | ||||||
|         NULL                      // Task-Handle (nicht benötigt) |         NULL                      // Task-Handle (nicht benötigt) | ||||||
|     ); |     ); | ||||||
|     } else { |  | ||||||
|         Serial.println("Not spawning new task, API still active!"); |     if (result != pdPASS) { | ||||||
|  |         Serial.println("Failed to create filament task!"); | ||||||
|         delete params; |         delete params; | ||||||
|         filamentDoc.clear(); |         filamentDoc.clear(); | ||||||
|         return 0; |         return 0; | ||||||
| @@ -881,6 +881,7 @@ uint16_t checkFilament(uint16_t vendorId, const JsonDocument& payload) { | |||||||
| uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& payload, String uidString) { | uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& payload, String uidString) { | ||||||
|     // Create new spool in Spoolman database using task system |     // Create new spool in Spoolman database using task system | ||||||
|     // Note: Due to async nature, the ID will be stored in createdSpoolId global variable |     // Note: Due to async nature, the ID will be stored in createdSpoolId global variable | ||||||
|  |     // Note: This function assumes that the caller has already ensured API is IDLE | ||||||
|     createdSpoolId = 0; // Reset previous value |     createdSpoolId = 0; // Reset previous value | ||||||
|      |      | ||||||
|     String spoolsUrl = spoolmanUrl + apiUrl + "/spool"; |     String spoolsUrl = spoolmanUrl + apiUrl + "/spool"; | ||||||
| @@ -918,9 +919,7 @@ uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& paylo | |||||||
|     params->spoolsUrl = spoolsUrl; |     params->spoolsUrl = spoolsUrl; | ||||||
|     params->updatePayload = spoolPayload; |     params->updatePayload = spoolPayload; | ||||||
|  |  | ||||||
|     // Check if API is idle before creating task |     // Create task without additional API state check since caller ensures synchronization | ||||||
|     if(spoolmanApiState == API_IDLE){ |  | ||||||
|         // Erstelle die Task |  | ||||||
|     BaseType_t result = xTaskCreate( |     BaseType_t result = xTaskCreate( | ||||||
|         sendToApi,                // Task-Funktion |         sendToApi,                // Task-Funktion | ||||||
|         "SendToApiTask",          // Task-Name |         "SendToApiTask",          // Task-Name | ||||||
| @@ -929,8 +928,9 @@ uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& paylo | |||||||
|         0,                        // Priorität |         0,                        // Priorität | ||||||
|         NULL                      // Task-Handle (nicht benötigt) |         NULL                      // Task-Handle (nicht benötigt) | ||||||
|     ); |     ); | ||||||
|     } else { |  | ||||||
|         Serial.println("Not spawning new task, API still active!"); |     if (result != pdPASS) { | ||||||
|  |         Serial.println("Failed to create spool task!"); | ||||||
|         delete params; |         delete params; | ||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
| @@ -941,7 +941,7 @@ uint16_t createSpool(uint16_t vendorId, uint16_t filamentId, JsonDocument& paylo | |||||||
|         vTaskDelay(100 / portTICK_PERIOD_MS); |         vTaskDelay(100 / portTICK_PERIOD_MS); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // daten mit startWriteJsonToTag schreiben |     // Write data to tag with startWriteJsonToTag | ||||||
|     // void startWriteJsonToTag(const bool isSpoolTag, const char* payload); |     // void startWriteJsonToTag(const bool isSpoolTag, const char* payload); | ||||||
|     payload["sm_id"].set(String(createdSpoolId)); |     payload["sm_id"].set(String(createdSpoolId)); | ||||||
|      |      | ||||||
|   | |||||||
| @@ -48,7 +48,9 @@ void scale_loop(void * parameter) { | |||||||
|   Serial.println("Scale Loop started"); |   Serial.println("Scale Loop started"); | ||||||
|   Serial.println("++++++++++++++++++++++++++++++"); |   Serial.println("++++++++++++++++++++++++++++++"); | ||||||
|  |  | ||||||
|  |   vTaskDelay(pdMS_TO_TICKS(500)); | ||||||
|   scale.tare(); |   scale.tare(); | ||||||
|  |   vTaskDelay(pdMS_TO_TICKS(500)); | ||||||
|    |    | ||||||
|   for(;;) { |   for(;;) { | ||||||
|     if (scale.is_ready())  |     if (scale.is_ready())  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user