Commit Graph

6546 Commits

Author SHA1 Message Date
Frank
32ed6cafc1 ledmap parser robustness improvements
* do not read past end of array "]"
* digest "unexpected" order of tags (always rewind input)
* better user message on success
2025-12-30 22:07:12 +01:00
Frank
9db1022b9d ledmap parser bugfix
make our custom parser robust against pretty printed ledmap.json 

expected <"map":[> but user file had <"map": [>
2025-12-30 20:13:40 +01:00
Frank
617ea8fa04 bugfix: ledmap.json discarded too early
* added missing check for "ledmap.json" file => always applied
* added missing check for ledmap1...10
* setupMatrix test for "unity" ledmap was too early - removed (need to find a better place for this)
2025-12-30 15:46:47 +01:00
Frank
868b2cad4e savePreset: restore quickload on early exit
* restore quickload on early exit
* replace magic numbers with constants
2025-12-30 02:20:10 +01:00
Frank
80b906999b requestJSONBufferLock() variable timeout
* default timeout = 1800ms
* reduced timeout for ws (300ms)
2025-12-30 01:57:46 +01:00
Frank
5739a54287 savePreset() error case bugfix
* Keeps the status machine coherent: no spurious async save, no lost pending playlist write, no change to successful paths.
* Aligns behavior with the already corrected mutex‑failure path, making both early exits consistent.
2025-12-29 21:35:10 +01:00
Frank
e1c7e816fe preseve playlistSave in case of mutex failure 2025-12-29 21:22:12 +01:00
Frank
b863cf3ed8 savePreset() fix mutex leak in early return path
early return considered harmful 😆
2025-12-29 21:17:02 +01:00
Frank
91dc9a5b5a restore revious presetToSave in case that mutex acquisition fails 2025-12-29 21:09:04 +01:00
Frank
d505dcc6a8 fix presets.json corruption, part 2: protect deletePresets
deletePreset() also needs to acquire presetFileMux before writing.
2025-12-29 21:02:06 +01:00
Frank
76cf309373 (minor) fix wrong debug tag 2025-12-29 20:54:05 +01:00
Frank
2a56f9b658 fix presets.json corruption, part 2: mutex for presets file writing
prevents concurrent presets.json writes from doSaveState() and savePreset()
2025-12-29 20:48:07 +01:00
Frank
6247ee066d fix presets.json corruption, part 1: avoid re-assigning open file pointer
* this prevents "open after open", that could lead to file corruption when "f" was still holding some changes in its buffer (written out with f.close())
2025-12-29 20:08:34 +01:00
Frank
35c847404c Merge branch 'mdev' into pixelforge_backport 2025-12-29 19:47:51 +01:00
Frank
4521ba848c align extractModeSlider() and extractModeNames() behaviour
* document behavior
* both functions are only called from usermods, and all calls are already correctly passing maxLen = buffersize -1
2025-12-29 19:43:42 +01:00
Damian Schneider
dab6a96b78 revert change to extractModeName, add comment for clarification 2025-12-29 19:38:53 +01:00
Frank
103e7db83f post merge fix, build 2512291 2025-12-29 14:45:11 +01:00
Damian Schneider
3785ae9a20 fix FX checkmark sync 2025-12-29 14:37:36 +01:00
Will Tatam
45e8c63c2c Merge pull request #5031 from wled/add-check-diff
Add segment checkmarks to `differs()` check
2025-12-29 14:30:49 +01:00
Damian Schneider
b2578703b2 minor bugfixes as suggested by the rabbit
- PulLightControl UM: dont release a lock you do not own
- off-by-one error in extractModeSlider (used only in rotary in UM)
- safety check in playlist in case something goes horribly wrong
2025-12-29 14:16:52 +01:00
Damian Schneider
eb55b4f2a5 adding link to WLED VidoLab 2025-12-27 20:07:12 +01:00
copilot-swe-agent[bot]
99e0743281 Fix Hub75 shown incorrectly in LED output dropdowns
Call hideHub75() after dynamically adding new LED outputs to ensure Hub75 options are removed when Hub75 support is not compiled in.

Co-authored-by: netmindz <442066+netmindz@users.noreply.github.com>
2025-12-25 10:06:30 +00:00
copilot-swe-agent[bot]
fc84725ae4 Initial plan 2025-12-25 09:58:52 +00:00
Frank
941415b24d fix reference error in pxmagic.htm
``index`` was undefined
2025-12-23 02:32:47 +01:00
Frank
bde1ac9c76 clarification
bedtime.
2025-12-23 02:12:06 +01:00
Frank
b8c0f8a28b fix akward error message
I start writing gibberish - time to go to bed 😄
2025-12-23 02:05:56 +01:00
Frank
2775b16141 clarifications (minor)
* replace delay by vTaskDelay (same behaviour)
* degrade user message to debug (expected behaviour -> no message)
* add pdMS_TO_TICKS to esp32SemTake macro (future proof)
2025-12-23 01:59:59 +01:00
Frank
655330d1a6 remove stupid "live forever" default 2025-12-23 01:42:55 +01:00
Frank
3c30edb70a fix typo 2025-12-23 01:26:32 +01:00
Frank
5f3ab42520 reduced freeze time when updating presets
postpone suspendStripService until the first segment operation is needed.
2025-12-23 01:18:46 +01:00
Damian Schneider
9fe4d788cd use constant instead of magic number in pixelforge 2025-12-23 00:49:22 +01:00
Frank
d6e2473ea7 small update for code clarity
wraping esp32SemGive inro #ifdef ESP32 does not change the behavior, but makes the logic easier to understand.
2025-12-23 00:41:45 +01:00
Frank
c185f37791 improved mutex error handling
- debug message in case of "unexpected" mutex errors
- removed experimental delay() in requestJSONBufferLock
2025-12-23 00:33:28 +01:00
Frank
1c2e6aac6e oppsie 2025-12-23 00:11:40 +01:00
Frank
d3076c43ec use a mutex to make requestJSONBufferLock / releaseJSONBufferLock robust
similar to upstream https://github.com/wled/WLED/pull/4089,
but with slightly different "failure" logic.
2025-12-23 00:05:16 +01:00
Frank
9b5ae9fff9 bugfix: suspendStripService held too long across stateUpdated() call
see discussion in https://github.com/MoonModules/WLED-MM/pull/293#issuecomment-3684424421
2025-12-22 23:58:19 +01:00
Frank
4345b32f97 protect WS2812FX::resetSegments boundsOnly path
the "boundsOnly" case can lead to ldsrgb re-allocation - better to protect it with segmentMux, too
2025-12-22 18:33:46 +01:00
Frank
39344382c7 WS2812FX::service() cleanup
- _isServicing is not critical any more -> move back into bitfield
- remove experimental deactivated code from WS2812FX::service()
2025-12-22 18:10:51 +01:00
Frank
68a76ff442 minor refactoring of critical sections
- define dummy macros for 8266, to avoid #ifdef ESP32
- small hint for readers who were not able to play arcade games in the 1980's ;-)
2025-12-22 17:59:22 +01:00
Frank
7459cbd2e2 setRealtimePixel robustness improvement
avoid drawing negative pixel addresses (could happen when  arlsOffset is < 0)
2025-12-22 01:38:49 +01:00
Frank
d3291cc5e5 fix off-by-one in dnrgbw handler 2025-12-22 01:32:47 +01:00
Frank
6993de1c8a debug message when realtimeLock fails, and fixing a few typos 2025-12-22 01:21:33 +01:00
Frank
f510bb075c bugfix: allow udp realtime mode 5 (dnrgbw)
previous condition would prevent the existing handler from actually executing
2025-12-22 01:07:42 +01:00
Frank
cb94cfafae extra debug message when Segment::setUp cannot get the mutex 2025-12-22 00:59:57 +01:00
Frank
bf6dbf0da4 fix realtimeOverride behaviour
the previous condition was not aligned with the override condition used in other places
2025-12-22 00:52:24 +01:00
Frank
fe63ebf1b7 deSerializeSegment robustness improvement
avoid creating an inconsistent configuration in case the mutex acquisition fails.
2025-12-22 00:39:11 +01:00
Frank
1038421544 atomic pointer swap in allocLeds() 2025-12-22 00:31:53 +01:00
Frank
af8eba6dfa use critical section in exitRealtime
the critical section ensures that cache clearing is performed as an atomic operation without task switch
2025-12-22 00:20:34 +01:00
Frank
50cc6f4c28 comment correction 2025-12-22 00:07:27 +01:00
Frank
73c54d7a57 replace potentially infinite wait with 2100ms max
better to end with an inconsistent state, than risk a lock-up until reset
2025-12-22 00:05:54 +01:00