g6_03: per-trial duty byte in trial-params (param[11]) — stacked on #65#66
g6_03: per-trial duty byte in trial-params (param[11]) — stacked on #65#66mbreiser wants to merge 2 commits into
Conversation
Update the 0x08 payload table for the canonical re-layout (init_pos/gain swap, gain widened to int16, new duration field) and delete the "Known, intentional divergences" row for 0x08; the gain-width/runtime gap it tracked as open is now closed.
|
0x1D/0x1E change the fundamental model of talking to the arena: today every command is self-contained (stateless), the panel-protocol's 0x50-0x53 / 0x60-0x63 families already let the controller display a given pattern at an explicit, per-call brightness. Nothing the host sends depends on what it sent a minute ago. SET_DUTY_OVERRIDE breaks that: it introduces sticky, invisible state that lives on the controller between commands and silently reshapes every subsequent frame the controller ships, regardless of which command produced it. That has real downstream cost, not just a style preference:
You can already produce the exact same outcome with the existing set of opcodes. There is no need to introduce a second layer of opcodes, and the state they carry, on top of a command set that already solves this problem statelessly. So my suggestion: keep brightness control anchored on 0x60-0x63 (extending the PSRAM display path as needed) instead of adding a global sticky toggle at the host-command layer. If SD-mode playback (Modes 2/3/4) or streamed frames need variable per-call brightness too, that argues for extending the same stateless, explicit-argument pattern to those paths, not for bolting a global override on top of them. |
|
On hold pending the redesign agreed in reiserlab/LED-Display_G6_Firmware_Arena#34 (0x1D/0x1E withdrawn): I'll rework this PR to document the per-trial duty byte in trial_params (0x08) and the optional duty on 0x3A/0x3B instead of the new opcode pair, once the layout is confirmed there. |
…D/0x1E Documents the layout merged in Arena-Firmware PR #39 (c3475fd): optional 12th param byte on trial-params (0 = stored duty, 1-255 = per-trial override; frame 0x0C or 0x0D), applied at transmit time with the pattern file untouched. Scope/lifecycle: re-declared per trial, none on 0x03, cleared on all-off. Stacked on the #65 canonical-relayout docs; the withdrawn 0x1D/0x1E section from the previous revision of this PR is gone. Ride-alongs: registry row 0x08 frame lengths; Mode-4 gain prose int8→int16; review-notes row marked resolved; 0x03 note documents duty clearing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
a44b31d to
485809b
Compare
Reworked after the design pivot: the withdrawn 0x1D/0x1E opcodes are gone from this PR; it now documents the optional per-trial duty byte that merged in Arena-Firmware PR #39 (
c3475fd).trial-params (0x08)frame:0x0C(11 params, no duty) or0x0D(12th byte = duty;0= stored duty ≡ omitting the byte).0x03, cleared onall-off), 0x88-reports-stored invariant.Stacked on #65 (the canonical-relayout docs) — merge #65 first; this PR's diff then collapses to the duty delta.
🤖 Generated with Claude Code