Skip to content

Releases: kepello/headrush-controller

v36

Choose a tag to compare

@github-actions github-actions released this 08 Jun 09:27
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

v35

Choose a tag to compare

@github-actions github-actions released this 08 Jun 08:52
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

v34

Choose a tag to compare

@github-actions github-actions released this 07 Jun 19:12
Drop vestigial COMP/REVERB from the catalog — globals are rig-indepen…

v33

v33

Choose a tag to compare

@github-actions github-actions released this 07 Jun 15:43
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

v32

Choose a tag to compare

@github-actions github-actions released this 07 Jun 15:25
Resolve block names at runtime from the device (baked table is now fa…

v31

v31

Choose a tag to compare

@github-actions github-actions released this 07 Jun 13:23
v31 fixes: OTA heap, debounce resolves, sparse-rig dials, Assign list…

v30

v30

Choose a tag to compare

@github-actions github-actions released this 07 Jun 12:48
Assign UI: rig-derived two-level picker (devices + params), resolving…

v29

v29

Choose a tag to compare

@github-actions github-actions released this 07 Jun 02:48
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

v28

Choose a tag to compare

@github-actions github-actions released this 01 Jun 16:31
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

v27

Choose a tag to compare

@github-actions github-actions released this 01 Jun 16:26
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>