After zero-pre-baked discovery, session_loop now sweeps each fixture
(DEVICE_INFO with E1.20 PD decode + raw hex, DMX_START_ADDRESS,
DEVICE_LABEL / MODEL_DESCRIPTION / SOFTWARE_VERSION / MANUFACTURER_LABEL)
with a 2-round retry for the flaky RDM window arm, prints a per-fixture
parameter summary, then enters a 6s status-poll cycle: one compact line
per fixture per cycle, address/footprint changes reported as alarms, and
playback follows a changed DMX address automatically. Duplicate uplinks
from the flag=00/01 pair copies are deduped; the playback address list
is kept per-UID (no more duplicate control-address entries).
Commit ab8090b emptied the show-mode 'known' fixture list (default) but
left its step state machine intact: with known.len()==0 the machine
oscillates step 0<->1 through the '_' arm, emitting malformed
DISC_UNIQUE_BRANCH frames with PDL=0 forever. The DUT's pool proxy
correctly ignores them, so discovery never saw a single fixture.
Fix: after the AECH claim, show mode now enters session_loop() — the
verified zero-pre-baked full-space bisect (pool-answered DUBs, collision
pulses, UN_MUTE/MUTE) plus GET DEVICE_INFO and encrypted DMX playback on
the discovered addresses. hybrid keeps the legacy template behaviour.
Bench: 3/3 fixtures discovered (0899500026c9 / 010734880900 /
010734670125), addresses 1/129/101 read back, 1386-frame DMX run —
locally and from the Windows host over udprelay.
Default mode RDM discovery got 0 responses because the template-based builder's
checksum range was 0x3C..0x3C+msgLen (includes the old checksum slot) instead of
0x3C..0x53+PDL. build_rdm_frame2 was already correct (used by show mode).
Full system power-cycle test 2026-09-11: announce144 + self-constructed claim
(zero opaque blocks) -> AERE PASS on cold Butler, DMX gradient on fixtures.
No prelude needed (no 45s broadcast/bind/ident/EUCE/1947 token).
Protocol reverse engineering complete.
Conflict resolution: keep current (afternoon) versions for code/README/samples
- they contain the fully-cracked protocol + pure self-constructed show mode;
morning session's analysis scripts (scripts/session/*), DLL tools (tools/*)
and protocol docs (docs/enet_protocol.md) are merged in intact.
- Root cause of 'steady white': fixture on Butler port2, our data only went to port1
(port data regions are independent: port1 @0x3C, port2 @0x23C)
- show mode now mirrors pattern to both ports; SHOW_DIAG=1 gives 3s off/on blink test
- Claim now verifies AERE response and warns on failure
- Docs updated with port layout note; README updated
- Merge show/hybrid paths: use dmx_a template for DMX payload and replay-extracted SL frame skeleton for RDM.
- HOSTDEMO_MODE=show runs indefinitely when secs=0; wave period slowed for smoother breathing.
- Update README with show mode usage.