Repository navigation
Testing and Qualification
Release 0.9.4, build 0.9.4, passed the final regression and hardware qualification gates.
- cold boot and persistence reload: PASS;
- one Alarm and a two-activity Schedule survived reboot: PASS;
- persisted Alarm execution after reboot: PASS;
- native 64x64, logical 16x16 -> 64x64 and 32x32 -> 64x64 scaling: PASS;
- GIF PSRAM staging, persistent source cache and one-item prefetch: PASS;
- cache invalidation/recovery under content changes: PASS;
- Matrix Auto Rotation: PASS;
- AudioReactive + standalone WLED Buzzer coexistence under combined load: PASS.
Qualified Waveshare media policy:
stage max 2 MiB
PSRAM reserve 4 MiB
source cache 1 MiB
entry max 512 KiB
metadata 12 entries
prefetch one item, approximately 250 ms look-ahead
The seven-GIF qualification corpus fits entirely inside the target-specific persistent cache. Staging, persistent reuse, one-item prefetch, mixed invalidation/eviction and PSRAM telemetry invariants all passed with zero playback fallback and zero prefetch failure in the qualification runs.
Qualified MatrixPortal media policy:
stage max 256 KiB
PSRAM reserve 1 MiB
source cache 384 KiB
entry max 256 KiB
metadata 8 entries
prefetch one item, approximately 250 ms look-ahead
The final release includes host regression/failure-injection coverage for:
- Schedule quiet-period publication while a following Program multipart is active;
- Alarm media + NVS transactional replacement;
- Alarm rollback and safe empty-state convergence;
- Alarm/Schedule clock-field validation;
- Schedule staging before replacement flags are published.
The 0.9.3 stable qualification validates iDotMatrix as a consumer of the standalone WLED Buzzer Usermod. Automated checks verify that the old IDotMatrixBuzzer backend, GPIO settings, LEDC/timer code and local Test endpoint are absent and that the optional weak-link bridge provided by WLED Buzzer Usermod 0.1.0 final is used instead.
Physical qualification used two firmware variants:
-
with WLED Buzzer Usermod — verify Alarm loop/stop, Program notification, Countdown
triple_beep, BLEconnect, BLEdisconnect, and the iDotMatrix Enable toggle; - without WLED Buzzer Usermod — verify the Enable control is disabled and all non-sound iDotMatrix functions still operate normally.
0.9.2 remains the previous stable baseline. The listed integration tests, RC presentation checks and final hardware qualification have passed.
The project uses host regression, sanitizer checks, build-profile validation and physical hardware qualification.
Hardware validation reported PASS for both optional-dependency states, BLE connection/disconnection, natural Countdown, Alarm loop/stop, Program/Schedule, reboot/persistence, silent Alarm, no-sound Program and repeated-event smoke tests. Alarm was rechecked with WLED Buzzer Usermod 0.1.0 final and its 550 ms triple_beep inter-repeat silence.
./run_host_tests.sh covers protocol framing/ACKs, BLE framing, FA02 assembly, Bulk/CRC, Graffiti multipart, renderer output, TEXT paging and 64-pixel payloads, audio mapping, alarms/programs, Preset/Carousel failure paths, GIF/media handling, WLED ownership, PlatformIO profile normalization, partition geometry and release-package consistency.
Critical components can also be run with AddressSanitizer/UndefinedBehaviorSanitizer through ./run_host_sanitizers.sh; component-level runs are used when the execution environment imposes a global timeout.
Reference platform:
Adafruit MatrixPortal ESP32-S3
64x64 HUB75 panel
WLED 17.0.0-devV5
06ae26db67107cb3f6a3d107a92340035991a063
Validated areas include native 64x64 rendering, logical 16x16/32x32 scaling, 64-pixel TEXT and full 16654-byte payloads, multi-row static TEXT, GIF/image playback, Clock/timers/scoreboard, live TEXT ownership, audio effects, Alarm and Program/Schedule, Preset and Carousel, WLED ownership transitions, LittleFS coexistence and reset behavior.
For native 64x64 Clock styles 0 and 3, final 0.9.1 validation keeps HH:MM unchanged while moving only the date / and month two physical LEDs right.
Evidence chain:
- Bluetooth capture from the official 64x64 app;
- standalone emulator B171 implementation;
- host regression reproducing exact
4096 + 4096 + 4096packet flow and ACKs; - physical MatrixPortal/HUB75 validation using several complex photographic images from the official app.
Result: hardware-validated on the qualified 64x64 target.
Controller : ESP32-C3 SuperMini, 4 MB
Display : WS2812B ECO 16x16
WLED : d55037f7510541eddc390c8f3d01afc5787aa44a
Framework : Arduino 3.3.8 / ESP-IDF 5.5.4 shared-RMT
BLE : NimBLE-Arduino 2.5.1
Profile : overrides/esp32c3-16x16-audio-ota.ini
Environment: esp32c3dev_idotmatrix_audio_16x16_ota
Measured validated firmware:
firmware.bin 1,551,008 bytes
OTA slot 1,703,936 bytes
headroom 152,928 bytes (~149 KiB)
LittleFS nominal 640 KiB
Hardware stress result:
- initial USB/serial install of the new partition table: PASS;
- three consecutive WLED OTA updates: PASS;
- 12 Carousel assets: PASS;
- six Preset assets / playback: PASS;
- three Schedule activities: PASS;
- BLE + shared-RMT + AudioReactive + GIF cache: PASS;
- return to native WLED effects: PASS;
- persistent Carousel/Schedule filesystem content across OTA: PASS;
- Preset playback before OTA and intentional Preset cleanup on OTA reboot: PASS.
Representative post-stress diagnostics: about 62,384 bytes free heap, 31,756-byte historical minimum and 49,152-byte largest free block. No progressive fragmentation, reboot or BLE/LED failure was observed in the reported test.
Result: hardware-validated for the stated board/display/WLED baseline.
Preset and Carousel host tests inject rename/write/manifest failures and verify rollback behavior. Preset remains deliberately volatile and is cleared at reboot.
A dedicated physical 32x32 panel remains pending. The logical 32x32 path has been exercised through the 64x64 hardware/scaler.
See Hardware Compatibility Report. Record exact WLED commit, iDotMatrix release/build, environment, hardware and PASS/FAIL/NOT TESTED results. Project status should be promoted only from reproducible evidence.
The stable 0.9.2 package is promoted from the final development baseline after physical requalification of the runtime buzzer paths. The final package does not change runtime behavior beyond release/build identification.
Hardware testing confirmed:
-
/json/infouses the qualifiedbuzzerTiming=esp_timer-2msservice path; - Test buzzer emits one regular three-pulse trill;
- BLE connection emits one clean short beep;
- natural Countdown completion emits one regular three-pulse trill;
- Alarm with sound enabled repeats with stable rhythm while media is visible;
- Alarm configured silent remains silent;
- Program/Schedule with sound enabled emits its finite notification groups with stable rhythm;
- Alarm and Program/Schedule remain regular with larger GIF/image media;
- Passive + Low returns to silent HIGH idle with no residual tone or heating.
The 90 ms ON, 70 ms gap and 550 ms inter-group pause constants are unchanged.
The lateLast and lateMax diagnostics remain available for future regression
analysis. buzzerTiming=wled-loop identifies the compatibility fallback and is
not the qualified timing path.
The final Usermod settings page was physically validated with the intended layout and conditional behavior:
- no horizontal rule directly below the iDotMatrix title;
- Buzzer Pin follows the Buzzer heading without an empty line;
- Buzzer Pin appears before Buzzer Type;
- Active mode shows only Active buzzer active-high:;
- Passive mode shows only Passive buzzer trigger:;
- switching Buzzer Type updates the visible polarity option immediately in both directions;
- Test buzzer appears exactly once;
- the warning is on the next line and reads Save first: test uses saved settings.
0.9.2 retains NVS persistence for Clock style, 12/24-hour mode, date visibility
and RGB colour, restores those preferences before standalone Clock fallback,
protects against transient app showDate=0 entry/style updates, and clears the
stored presentation state on iDotMatrix device reset.
iDotMatrix WLED Usermod 0.9.4 — stable release
- Home
- Release 0.9.4
- Release 0.9.3
- Release 0.9.2
- Release 0.9.1
- Release 0.9.0
- Getting Started
- Hardware
- Implementation
- Build / Validation