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
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
Frank
30fcd6efad
segment & bus.show mutex redesign
...
* separate mutexes for improved performance:
- busses.show and effect drawing
- critical changes to segment vector
- block out critical segment changes while strip.service() loops over segments
* UDP realtime acquires mutex before drawing
- prevents corrupted outputs, caused by parallel tasks updating pixels while busses.show() runs
2025-12-21 23:56:09 +01:00
Frank
c520d75729
prevent race conditions in realtimeLock / exitRealtime
2025-12-21 23:48:19 +01:00
Frank
21a452333e
setRealtimePixel speedup
...
cache strip.getMainSegment(), strip.getLengthTotal()), seg.length() instead of re-calculating them for each pixel
2025-12-21 23:11:15 +01:00
Frank
577d80d2ef
segment drawing robustness improvements
...
* segment::fill() is also called outside the service loop - make sure that size is always calculated correctly
* leave _currentSeg in a meaningful state after strip.service()
2025-12-21 23:08:50 +01:00
Frank
b9e7621cd6
platformio.ini updates to include PixelForge
...
unrelated: enable some features that still fit into flash
2025-12-21 01:11:18 +01:00
Frank
ab4ae9a6b8
Merge branch 'mdev' into pixelforge_backport
2025-12-21 00:31:54 +01:00
Frank
62d938d8ba
Add build info display for github builds
...
Added checks for release build environment and updated build info display.
2025-12-21 00:29:52 +01:00
Frank
37764ec3b9
UX improvements
...
- add buttons for PixelForge and PixelArt (settings page, below "file system" button
- abort build when PixelForge requested but GIF support missing
- "support" PixelMagic with error message - known issues with bigger images
2025-12-20 23:55:59 +01:00
Frank
855e6737be
minor html and JS fixes
...
* avoid implicit creation of global vars
* removed stray </small>
* fix assignment with undefined variables
2025-12-20 21:19:55 +01:00
Frank
7df63db744
and mutex for all
...
revised mutex and critical section handling for segment drawing
- simplified code with macros (no more #if ESP32 ... #endif)
- remove some critical sections (prevents interrupt stalling)
- added mutex to functions that change the list of segments
- added mutexes to all (potential) background drawing code
- use recursive mutexes to prevent accidental self-locking of tasks
2025-12-20 17:13:52 +01:00
Frank
e5a3942610
fix for "giving a semaphore never taken"
2025-12-20 01:14:13 +01:00