Repository navigation
Releases: kepello/headrush-controller
Releases · kepello/headrush-controller
Release list
v36
OTA: insecure TLS, check first, drop the now-unneeded clock Verified TLS can't fit the WiFi-fragmented heap (maxblk ~30k even pre-WebSocket, confirmed on hardware), so the boot check failed "-1" regardless of total free RAM. The clock-sync TLS always worked because it's insecure (no cert validation = ~6k less) and runs first on a clean heap. - checkForUpdate now uses setInsecure() for both the manifest fetch and the firmware download. Trade-off: no cert validation (a network MITM could serve fake firmware) — acceptable on a trusted LAN; can harden later by shrinking the mbedTLS content buffers via sdkconfig. - Boot order: run the OTA check FIRST, before the clock sync and the WebSocket (cleanest heap). The earlier reorder (before the WS only) wasn't enough — WiFi itself caps the contiguous block. - Clock is no longer required (insecure OTA + plain-HTTP Prime link); dropped the blocking NTP wait + HTTPS-Date sync to a single best-effort NTP for log stamps. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v35
Slice 1: operate grammar rework + encoder acceleration First slice of the interaction redesign (UX_MODEL §3/§4): - Rig/Setlist: browse-then-load. Turn browses names with NOTHING loading; single-click loads the highlighted item; 10 s idle reverts the highlight to the loaded one. Removes the pause-to-load cascade that re-resolved the whole fleet on every name. - Member cycling moves from single-click to DOUBLE-click (frees single-click for "load" on lists). The old double-click bypass stub is retired. - Velocity-based acceleration on turning AND list scrolling: creep = 1:1, faster spins step in bigger increments (values 4x/12x, lists 3x/6x). Tunable. Values stay live/instant (unchanged). Toggles + Assign drill-in are later slices. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v34
Drop vestigial COMP/REVERB from the catalog — globals are rig-indepen…
v33
Drop baked block tables — live device data only, fail loud not stale Per design pushback: a fallback snapshot can't add value (the controller is useless without the Prime online) but CAN mask a real failure — after a firmware reorder it would resolve to the wrong blocks silently. Stale data is more dangerous than a visible failure. - Remove MODULE_NAME[272] / MODULE_CATEGORY[272] / moduleCategory() from BlockCatalog.h. It now holds only our taxonomy (BlockCat enum), the live category-string -> generic map, and the param-candidate conventions — none of which are device snapshots. - moduleName() is runtime-only (empty until the device list loads); resolveCat() no longer falls back to a baked category and does not cache transient categoryOfBlock failures (so a hiccup retries instead of sticking). - Resolution requires the live list: if loadModuleTypes() hasn't succeeded, resolveLayoutForRig defers (keeps the spinner) and the net loop retries every 1.5s, so a recovered link self-heals. Long-press still escapes to the Board Menu. Persistent spinner + connection bars make a real problem visible. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v32
Resolve block names at runtime from the device (baked table is now fa…
v31
v31 fixes: OTA heap, debounce resolves, sparse-rig dials, Assign list…
v30
Assign UI: rig-derived two-level picker (devices + params), resolving…
v29
Per-rig dynamic knob layouts + tuner cents fix Resolve each board's HOME dials from the loaded rig's signal chain instead of a single global assignment: - BlockCatalog.h: ModuleType -> generic-category table generated from the Prime's own categoryOfBlock (authoritative, not heuristic), plus per- category bind params and the Gain/Ambience bucket priorities. - Net task introspects /Evil/Engine/Patch/Chain on every rig change and resolves two dynamic dials (Gain: Drive>Amp>Comp, Ambience: Reverb>Delay>Mod>Filter>Pitch), picking the first param the real block exposes. Cross-fills empty buckets; falls back to globals for sparse rigs. - Per-rig HOME assignment persisted in NVS keyed by the rig's loadedID; unconfigured rigs use the generated default by board role. Rig changes (WebSocket PresetName) re-resolve the layout and refresh the displayed value. - Default layout + authoritative categorization documented in UX_MODEL.md. Also fix the tuner readout: FFTCtrl delivers raw values (TunerRef reads 440, TunerCents meta -100..+100), not the 0..1 normalized wire other params use. TunerCents was being stretched through wireToDisplay(-50,+50), correct only at dead center; use it directly as cents. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
v28
Move status dot + signal bars lower into the arc gap (CY+86 -> CY+100) The bars baseline didn't reach the open bottom; drop the whole group ~14px so it sits lower in the 120-degree gap below the value. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
v27
Setlist/Rig view: show only current value, match dial label layout Drop the prev/next neighbor names and the "n / m" position from the scroll list. Move the title to CY-50 and the value to CY+4 so SETLIST/RIG match the dial and tuner labels exactly (FreeSansBold12pt, same height). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>