From 4e0cf380be51a49d418a6599785743cc3ae4a79c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Kristan?= Date: Thu, 11 Aug 2022 11:23:39 +0200 Subject: [PATCH] Fix for 0 duration/reset runtime. --- wled00/FX_fcn.cpp | 4 ++-- wled00/set.cpp | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index 5e6fcd0f4..8e112f821 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -182,7 +182,7 @@ void Segment::deallocateData() { void Segment::resetIfRequired() { if (reset) { if (leds && !Segment::_globalLeds) { free(leds); leds = nullptr; } - if (_t) _t->_dur = 0; + //if (_t) { delete _t; _t = nullptr; transitional = false; } next_time = 0; step = 0; call = 0; aux0 = 0; aux1 = 0; reset = false; // setOption(SEG_OPTION_RESET, false); } @@ -225,7 +225,7 @@ void Segment::startTransition(uint16_t dur) { uint16_t Segment::progress() { if (!transitional || !_t) return 0xFFFFU; uint32_t timeNow = millis(); - if (timeNow - _t->_start > _t->_dur) return 0xFFFFU; + if (timeNow - _t->_start > _t->_dur || _t->_dur == 0) return 0xFFFFU; return (timeNow - _t->_start) * 0xFFFFU / _t->_dur; } diff --git a/wled00/set.cpp b/wled00/set.cpp index 885fcb827..e3fc507f1 100644 --- a/wled00/set.cpp +++ b/wled00/set.cpp @@ -880,7 +880,11 @@ bool handleSet(AsyncWebServerRequest *request, const String& req, bool apply) for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) { Segment& seg = strip.getSegment(i); if (i != selectedSeg && (singleSegment || !seg.isActive() || !seg.isSelected())) continue; // skip non main segments if not applying to all - if (fxModeChanged) { seg.mode = effectIn; seg.markForReset(); } + if (fxModeChanged) { + seg.startTransition(strip.getTransition()); + seg.mode = effectIn; + // TODO: we should load defaults here as well + } if (speedChanged) seg.speed = speedIn; if (intensityChanged) seg.intensity = intensityIn; if (paletteChanged) {