|
6 | 6 | * JSON API (De)serialization |
7 | 7 | */ |
8 | 8 |
|
| 9 | +bool getVal(JsonVariant elem, byte* val, byte vmin=0, byte vmax=255) { |
| 10 | + if (elem.is<int>()) { |
| 11 | + *val = elem; |
| 12 | + return true; |
| 13 | + } else if (elem.is<const char*>()) { |
| 14 | + const char* str = elem; |
| 15 | + size_t len = strnlen(str, 12); |
| 16 | + if (len == 0 || len > 10) return false; |
| 17 | + parseNumber(str, val, vmin, vmax); |
| 18 | + return true; |
| 19 | + } |
| 20 | + return false; //key does not exist |
| 21 | +} |
| 22 | + |
9 | 23 | void deserializeSegment(JsonObject elem, byte it, byte presetId) |
10 | 24 | { |
11 | 25 | byte id = elem["id"] | it; |
@@ -62,12 +76,10 @@ void deserializeSegment(JsonObject elem, byte it, byte presetId) |
62 | 76 | } |
63 | 77 | if (stop > start && seg.offset > len -1) seg.offset = len -1; |
64 | 78 |
|
65 | | - int segbri = elem["bri"] | -1; |
66 | | - if (segbri == 0) { |
67 | | - seg.setOption(SEG_OPTION_ON, 0, id); |
68 | | - } else if (segbri > 0) { |
69 | | - seg.setOpacity(segbri, id); |
70 | | - seg.setOption(SEG_OPTION_ON, 1, id); |
| 79 | + byte segbri = 0; |
| 80 | + if (getVal(elem["bri"], &segbri)) { |
| 81 | + if (segbri > 0) seg.setOpacity(segbri, id); |
| 82 | + seg.setOption(SEG_OPTION_ON, segbri, id); |
71 | 83 | } |
72 | 84 |
|
73 | 85 | bool on = elem["on"] | seg.getOption(SEG_OPTION_ON); |
@@ -210,7 +222,7 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId) |
210 | 222 | strip.applyToAllSelected = false; |
211 | 223 | bool stateResponse = root[F("v")] | false; |
212 | 224 |
|
213 | | - bri = root["bri"] | bri; |
| 225 | + getVal(root["bri"], &bri); |
214 | 226 |
|
215 | 227 | bool on = root["on"] | (bri > 0); |
216 | 228 | if (!on != !bri) toggleOnOff(); |
@@ -314,18 +326,18 @@ bool deserializeState(JsonObject root, byte callMode, byte presetId) |
314 | 326 |
|
315 | 327 | usermods.readFromJsonState(root); |
316 | 328 |
|
317 | | - int ps = root[F("psave")] | -1; |
| 329 | + byte ps = root[F("psave")]; |
318 | 330 | if (ps > 0) { |
319 | 331 | savePreset(ps, true, nullptr, root); |
320 | 332 | } else { |
321 | | - ps = root[F("pdel")] | -1; //deletion |
| 333 | + ps = root[F("pdel")]; //deletion |
322 | 334 | if (ps > 0) { |
323 | 335 | deletePreset(ps); |
324 | 336 | } |
325 | | - ps = root["ps"] | -1; //load preset (clears state request!) |
326 | | - if (ps >= 0) { |
| 337 | + |
| 338 | + if (getVal(root["ps"], &presetCycCurr, 1, 5)) { //load preset (clears state request!) |
327 | 339 | if (!presetId) unloadPlaylist(); //stop playlist if preset changed manually |
328 | | - applyPreset(ps, callMode); |
| 340 | + applyPreset(presetCycCurr, callMode); |
329 | 341 | return stateResponse; |
330 | 342 | } |
331 | 343 |
|
|
0 commit comments