suspendStripService improvements

* also suspend Transitions, Notifications and Live LED updates while strip or segments are under update from the Web UI.
This commit is contained in:
Frank
2023-06-04 20:30:03 +02:00
parent 4d64efa5cb
commit aded74d8b1
2 changed files with 14 additions and 3 deletions

View File

@@ -1527,7 +1527,7 @@ void WS2812FX::waitUntilIdle(void) {
if (isServicing()) {
unsigned long waitStarted = millis();
do {
delay(1); // Suspending for 1 tick or more gives other tasks a chance to run.
delay(2); // Suspending for 1 tick (or more) gives other tasks a chance to run.
//yield(); // seems to be a no-op on esp32
} while (isServicing() && (millis() - waitStarted < MAX_IDLE_WAIT_MS));
USER_PRINTF("strip.waitUntilIdle(): strip %sidle after %d ms. (task %s)\n", isServicing()?"not ":"", int(millis() - waitStarted), pcTaskGetTaskName(NULL));

View File

@@ -102,8 +102,16 @@ void WLED::loop()
#endif
handleConnection();
handleSerial();
handleNotifications();
handleTransitions();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_PROTECT_SERVICE) // WLEDMM experimental: handleNotifications() calls strip.show(); handleTransitions modifies segments
if (!suspendStripService) {
#endif
handleNotifications();
handleTransitions();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_PROTECT_SERVICE) // WLEDMM end
}
#endif
#ifdef WLED_ENABLE_DMX
handleDMX();
#endif
@@ -255,6 +263,9 @@ void WLED::loop()
}
yield();
#if defined(ARDUINO_ARCH_ESP32) && defined(WLEDMM_PROTECT_SERVICE) // WLEDMM experimental: pause handleWs while strip/segment data might be inconsistent
if (!suspendStripService)
#endif
handleWs();
handleStatusLED();