70 if (segJson.contains(
"start") && segJson[
"start"].is_int()) {
71 i64 startInt = segJson[
"start"] | 0;
72 if (startInt < 0) startInt = 0;
73 if (startInt > 65535) startInt = 65535;
74 seg.mStart =
static_cast<u16
>(startInt);
77 if (segJson.contains(
"stop") && segJson[
"stop"].is_int()) {
78 i64 stopInt = segJson[
"stop"] | 0;
79 if (stopInt < 0) stopInt = 0;
80 if (stopInt > 65535) stopInt = 65535;
81 seg.mStop =
static_cast<u16
>(stopInt);
84 if (segJson.contains(
"len") && segJson[
"len"].is_int()) {
85 i64 lenInt = segJson[
"len"] | 0;
86 if (lenInt < 0) lenInt = 0;
87 if (lenInt > 65535) lenInt = 65535;
88 seg.mLen =
static_cast<u16
>(lenInt);
91 if (segJson.contains(
"grp") && segJson[
"grp"].is_int()) {
92 i64 grpInt = segJson[
"grp"] | 1;
93 if (grpInt < 1) grpInt = 1;
94 if (grpInt > 255) grpInt = 255;
95 seg.mGrp =
static_cast<u8>(grpInt);
98 if (segJson.contains(
"spc") && segJson[
"spc"].is_int()) {
99 i64 spcInt = segJson[
"spc"] | 0;
100 if (spcInt < 0) spcInt = 0;
101 if (spcInt > 255) spcInt = 255;
102 seg.mSpc =
static_cast<u8>(spcInt);
105 if (segJson.contains(
"of") && segJson[
"of"].is_int()) {
106 i64 ofInt = segJson[
"of"] | 0;
107 if (ofInt < 0) ofInt = 0;
108 if (ofInt > 65535) ofInt = 65535;
109 seg.mOf =
static_cast<u16
>(ofInt);
112 if (segJson.contains(
"on") && segJson[
"on"].is_bool()) {
113 seg.mOn = segJson[
"on"] |
true;
116 if (segJson.contains(
"bri") && segJson[
"bri"].is_int()) {
117 i64 briInt = segJson[
"bri"] | 255;
118 if (briInt < 0) briInt = 0;
119 if (briInt > 255) briInt = 255;
120 seg.mBri =
static_cast<u8>(briInt);
123 if (segJson.contains(
"cct") && segJson[
"cct"].is_int()) {
124 i64 cctInt = segJson[
"cct"] | 0;
125 if (cctInt < 0) cctInt = 0;
126 if (cctInt > 65535) cctInt = 65535;
127 seg.mCct =
static_cast<u16
>(cctInt);
131 if (segJson.contains(
"fx") && segJson[
"fx"].is_int()) {
132 i64 fxInt = segJson[
"fx"] | 0;
133 if (fxInt < 0) fxInt = 0;
134 if (fxInt > 255) fxInt = 255;
135 seg.mFx =
static_cast<u8>(fxInt);
138 if (segJson.contains(
"sx") && segJson[
"sx"].is_int()) {
139 i64 sxInt = segJson[
"sx"] | 128;
140 if (sxInt < 0) sxInt = 0;
141 if (sxInt > 255) sxInt = 255;
142 seg.mSx =
static_cast<u8>(sxInt);
145 if (segJson.contains(
"ix") && segJson[
"ix"].is_int()) {
146 i64 ixInt = segJson[
"ix"] | 128;
147 if (ixInt < 0) ixInt = 0;
148 if (ixInt > 255) ixInt = 255;
149 seg.mIx =
static_cast<u8>(ixInt);
152 if (segJson.contains(
"pal") && segJson[
"pal"].is_int()) {
153 i64 palInt = segJson[
"pal"] | 0;
154 if (palInt < 0) palInt = 0;
155 if (palInt > 255) palInt = 255;
156 seg.mPal =
static_cast<u8>(palInt);
159 if (segJson.contains(
"c1") && segJson[
"c1"].is_int()) {
160 i64 c1Int = segJson[
"c1"] | 128;
161 if (c1Int < 0) c1Int = 0;
162 if (c1Int > 255) c1Int = 255;
163 seg.mC1 =
static_cast<u8>(c1Int);
166 if (segJson.contains(
"c2") && segJson[
"c2"].is_int()) {
167 i64 c2Int = segJson[
"c2"] | 128;
168 if (c2Int < 0) c2Int = 0;
169 if (c2Int > 255) c2Int = 255;
170 seg.mC2 =
static_cast<u8>(c2Int);
173 if (segJson.contains(
"c3") && segJson[
"c3"].is_int()) {
174 i64 c3Int = segJson[
"c3"] | 16;
175 if (c3Int < 0) c3Int = 0;
176 if (c3Int > 255) c3Int = 255;
177 seg.mC3 =
static_cast<u8>(c3Int);
181 if (segJson.contains(
"sel") && segJson[
"sel"].is_bool()) {
182 seg.mSel = segJson[
"sel"] |
false;
185 if (segJson.contains(
"rev") && segJson[
"rev"].is_bool()) {
186 seg.mRev = segJson[
"rev"] |
false;
189 if (segJson.contains(
"mi") && segJson[
"mi"].is_bool()) {
190 seg.mMi = segJson[
"mi"] |
false;
193 if (segJson.contains(
"o1") && segJson[
"o1"].is_bool()) {
194 seg.mO1 = segJson[
"o1"] |
false;
197 if (segJson.contains(
"o2") && segJson[
"o2"].is_bool()) {
198 seg.mO2 = segJson[
"o2"] |
false;
201 if (segJson.contains(
"o3") && segJson[
"o3"].is_bool()) {
202 seg.mO3 = segJson[
"o3"] |
false;
205 if (segJson.contains(
"si") && segJson[
"si"].is_int()) {
206 i64 siInt = segJson[
"si"] | 0;
207 if (siInt < 0) siInt = 0;
208 if (siInt > 3) siInt = 3;
209 seg.mSi =
static_cast<u8>(siInt);
212 if (segJson.contains(
"m12") && segJson[
"m12"].is_int()) {
213 i64 m12Int = segJson[
"m12"] | 0;
214 if (m12Int < 0) m12Int = 0;
215 if (m12Int > 3) m12Int = 3;
216 seg.mM12 =
static_cast<u8>(m12Int);
219 if (segJson.contains(
"rpt") && segJson[
"rpt"].is_bool()) {
220 seg.mRpt = segJson[
"rpt"] |
false;
223 if (segJson.contains(
"n") && segJson[
"n"].is_string()) {
228 if (segJson.contains(
"col") && segJson[
"col"].is_array()) {
230 for (
size_t i = 0; i < segJson[
"col"].size(); i++) {
231 const fl::json& colJson = segJson[
"col"][i];
236 for (
size_t j = 0; j < colJson.
size() && j < 4; j++) {
237 if (colJson[j].is_int()) {
238 i64 val = colJson[j] | 0;
239 if (val < 0) val = 0;
240 if (val > 255) val = 255;
241 color.push_back(
static_cast<u8>(val));
244 if (
color.size() >= 3) {
245 seg.mColors.push_back(
color);
256 seg.mColors.push_back(
color);
258 FL_WARN(
"WLED: invalid hex color string: " << hexStr);
265 if (segJson.contains(
"i") && segJson[
"i"].is_array()) {
266 seg.mIndividualLeds.clear();
269 for (
size_t i = 0; i < segJson[
"i"].size(); i++) {
270 const fl::json& ledJson = segJson[
"i"][i];
279 size_t pipePos = ledStr.
find(
'|');
282 size_t startIdx = ledIndex;
283 size_t endIdx = ledIndex;
287 hexStr = ledStr.
substr(0, pipePos);
291 size_t dashPos = indexStr.
find(
'-');
300 if (endptr == startStr.
c_str() || startVal < 0) {
301 FL_WARN(
"WLED: invalid range start index: " << startStr);
306 if (endptr == endStr.
c_str() || endVal < 0) {
307 FL_WARN(
"WLED: invalid range end index: " << endStr);
311 startIdx =
static_cast<size_t>(startVal);
312 endIdx =
static_cast<size_t>(endVal);
317 if (endptr == indexStr.
c_str() || idxVal < 0) {
318 FL_WARN(
"WLED: invalid LED index: " << indexStr);
321 startIdx = endIdx =
static_cast<size_t>(idxVal);
332 FL_WARN(
"WLED: invalid hex color in individual LED: " << hexStr);
337 size_t maxIdx = (endIdx > startIdx) ? endIdx : startIdx;
338 if (seg.mIndividualLeds.size() <= maxIdx) {
339 seg.mIndividualLeds.resize(maxIdx + 1);
343 for (
size_t idx = startIdx; idx <= endIdx; idx++) {
344 seg.mIndividualLeds[idx].clear();
345 seg.mIndividualLeds[idx].push_back(r);
346 seg.mIndividualLeds[idx].push_back(
g);
347 seg.mIndividualLeds[idx].push_back(b);