From 1b9b2dcffed3e719a485426ea64dc4339d7ccf6d Mon Sep 17 00:00:00 2001 From: Frank Date: Sat, 18 May 2024 21:49:09 +0200 Subject: [PATCH] minimal Auto segment creation bugfix based on https://github.com/Aircoookie/WLED/commit/13bfda56efa8af56e92456480c35dffb2785a038 --- wled00/FX_fcn.cpp | 4 +++- wled00/json.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/wled00/FX_fcn.cpp b/wled00/FX_fcn.cpp index cd5b69cf..34e59e40 100644 --- a/wled00/FX_fcn.cpp +++ b/wled00/FX_fcn.cpp @@ -2205,7 +2205,7 @@ void WS2812FX::makeAutoSegments(bool forceReset) { segStops[s] = segStarts[s] + b->getLength(); #ifndef WLED_DISABLE_2D - if (isMatrix && segStops[s] < Segment::maxWidth*Segment::maxHeight) continue; // ignore buses comprising matrix + if (isMatrix && segStops[s] <= Segment::maxWidth*Segment::maxHeight) continue; // ignore buses comprising matrix if (isMatrix && segStarts[s] < Segment::maxWidth*Segment::maxHeight) segStarts[s] = Segment::maxWidth*Segment::maxHeight; #endif @@ -2278,6 +2278,8 @@ void WS2812FX::fixInvalidSegments() { if (_segments[i].stop > _length) _segments[i].stop = _length; } } + // if any segments were deleted free memory + purgeSegments(); // this is always called as the last step after finalizeInit(), update covered bus types for (segment &seg : _segments) seg.refreshLightCapabilities(); diff --git a/wled00/json.cpp b/wled00/json.cpp index c03a61f0..ce7e9505 100644 --- a/wled00/json.cpp +++ b/wled00/json.cpp @@ -516,7 +516,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId) //bool didSet = false; for (size_t s = 0; s < strip.getSegmentsNum(); s++) { Segment &sg = strip.getSegment(s); - if (sg.isSelected()) { + if (sg.isActive() && sg.isSelected()) { inDeepCall = true; // WLEDMM remember that we are going into recursion deserializeSegment(segVar, s, presetId); if (iAmGroot) inDeepCall = false; // WLEDMM toplevel -> reset recursion flag