-
feat(lcxl3): Hz-true DJF readout, the OLED ghost, and the edge-button census · ca173ae1
Round 4 of the live design session, plus the nine-press census. DJF readout speaks Hz, not percent — and the numbers come from BootTidal's own gDJF ranges (lpf: range 180 20000 over 2v; hpf: range 20 8000 over 2(v-.5)), so what the OLED says is what the filter DOES. The zero mark animates: heart frames at ~3 fps while a DJF rests in the detent (charset 0x1E is a heart). Home screen line 3 is now "118 BPM" — "36 live" was a control count nobody asked for, and PLN rightly mocked it. The OLED GHOST (/tmp/lcxl3-oled-ghost.txt): the protocol has no display readback, so nothing can pull the screen — instead the driver mirrors every frame IT sends into a box-drawing the shell can read. What the ghost cannot show is the firmware's own native value overlay, and that is the point: when PLN's eyes see content the ghost does not have, the discrepancy itself is the diagnosis. (That discrepancy is live: the native overlay still outdraws our temporary text on every control move — an Opus worker is in the programmer's reference hunting per-control display targets, the likely correct fix.) Keep-alive: the round-3 overlay stamped _oled_up_at on every push, so after the firmware's 1.2 s timeout our overlay was never re-summoned — one good overlay per touch, then raw values forever. Now the bring-up re-fires every 0.9 s of continuous activity and stamps only when actually sent. THE EDGE-BUTTON CENSUS (PLN pressed, the log answered): Solo/Arm is ONE key (ch1 CC65, two press cycles for his presses 1+2), Mute/Select is ONE key (CC66), the Novation logo is alive (CC104), Track </> are CC103/102, Page up/down CC106/107. Authored as EDGE_BUTTONS in lcxl3.py; the driver now names them in the log instead of counting them unmapped. No functions assigned yet — the settled direction is Track = setlist cursor, Page = OLED pages, the two verb keys = record-arm and panic, logo in reserve.
PLN (Algolia) authoredca173ae1
×