From 8bd716c056943a2a47059fe1fffdcb3315c63565 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Mon, 20 Dec 2021 16:43:47 +0100 Subject: [PATCH] Prevent undefind FX behaviour on millis() rollover --- wled00/FX.h | 1 + wled00/FX_fcn.cpp | 6 ++++++ wled00/wled.cpp | 1 + 3 files changed, 8 insertions(+) diff --git a/wled00/FX.h b/wled00/FX.h index 7215e347b..9a910108d 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -648,6 +648,7 @@ class WS2812FX { calcGammaTable(float), trigger(void), setSegment(uint8_t n, uint16_t start, uint16_t stop, uint8_t grouping = 0, uint8_t spacing = 0, uint16_t offset = UINT16_MAX), + restartRuntime(), resetSegments(), makeAutoSegments(), fixInvalidSegments(), diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 20ff12b85..b1088d140 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -606,6 +606,12 @@ void WS2812FX::setSegment(uint8_t n, uint16_t i1, uint16_t i2, uint8_t grouping, _segment_runtimes[n].reset(); } +void WS2812FX::restartRuntime() { + for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++) { + _segment_runtimes[i].reset(); + } +} + void WS2812FX::resetSegments() { for (uint8_t i = 0; i < MAX_NUM_SEGMENTS; i++) if (_segments[i].name) delete _segments[i].name; mainSegment = 0; diff --git a/wled00/wled.cpp b/wled00/wled.cpp index 6e120e4d8..55fd95956 100644 --- a/wled00/wled.cpp +++ b/wled00/wled.cpp @@ -193,6 +193,7 @@ void WLED::loop() if (lastMqttReconnectAttempt > millis()) { rolloverMillis++; lastMqttReconnectAttempt = 0; + strip.restartRuntime(); } if (millis() - lastMqttReconnectAttempt > 30000) { lastMqttReconnectAttempt = millis();