Skip to content
This repository was archived by the owner on Feb 10, 2026. It is now read-only.

Commit 7e6eb65

Browse files
committed
Fix for wled#3403
1 parent b0a56a4 commit 7e6eb65

2 files changed

Lines changed: 8 additions & 2 deletions

File tree

wled00/FX_fcn.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1573,7 +1573,7 @@ void WS2812FX::purgeSegments(bool force) {
15731573
}
15741574
if (deleted) {
15751575
_segments.shrink_to_fit();
1576-
if (_mainSegment >= _segments.size()) setMainSegmentId(0);
1576+
/*if (_mainSegment >= _segments.size())*/ setMainSegmentId(0);
15771577
}
15781578
}
15791579

wled00/json.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
2020
byte id = elem["id"] | it;
2121
if (id >= strip.getMaxSegments()) return false;
2222

23+
bool newSeg = false;
2324
int stop = elem["stop"] | -1;
2425

2526
// append segment
2627
if (id >= strip.getSegmentsNum()) {
2728
if (stop <= 0) return false; // ignore empty/inactive segments
2829
strip.appendSegment(Segment(0, strip.getLengthTotal()));
2930
id = strip.getSegmentsNum()-1; // segments are added at the end of list
31+
newSeg = true;
3032
}
3133

3234
//DEBUG_PRINTLN("-- JSON deserialize segment.");
@@ -118,8 +120,12 @@ bool deserializeSegment(JsonObject elem, byte it, byte presetId)
118120
// do not call seg.setUp() here, as it may cause a crash due to concurrent access if the segment is currently drawing effects
119121
// WS2812FX handles queueing of the change
120122
strip.setSegment(id, start, stop, grp, spc, of, startY, stopY);
123+
if (newSeg) seg.refreshLightCapabilities(); // fix for #3403
121124

122-
if (seg.reset && seg.stop == 0) return true; // segment was deleted & is marked for reset, no need to change anything else
125+
if (seg.reset && seg.stop == 0) {
126+
if (id == strip.getMainSegmentId()) strip.setMainSegmentId(0); // fix for #3403
127+
return true; // segment was deleted & is marked for reset, no need to change anything else
128+
}
123129

124130
byte segbri = seg.opacity;
125131
if (getVal(elem["bri"], &segbri)) {

0 commit comments

Comments
 (0)