Add the Helix LT, measured against a physical unit - #3
Conversation
The LT enumerates as 0x0E41/0x424A, which no rule and no table entry covered, so it was invisible to `Transport::open` and its raw USB node stayed root-owned. Everything in the new entry was read off the device, not inferred from the Floor: the handshake reports "P21", a pulled preset populates key 1 and carries blocks in slots 21-28 (both DSPs) with SNAPSHOT 1..8, and banks 0..7 each list 128 presets while bank 8 is refused with code -3. `preset_device_id` stays None because the wire carries no 0x0021xxxx id and there is no LT backup to read one from. The setlist *names* are the Floor's, which is the one place the evidence is thinner than the Floor's own — docs/helix-lt.md says so explicitly. No edit has ever been sent to this unit, so it is Support::Untested despite every read path reconciling cleanly. The existing untested-device invariant is renamed to name the Stomp XL, since "the untested device" is no longer singular. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Thanks for this — a measured survey from real hardware is exactly what the Three questions on 1. Block count — how many, and in which slots? (lines 56 and 61) Line 56 says blocks came back "in slots 21–28 as well as 3–6", which is 12 Which is right, 8 blocks or 12? And does the "8" perhaps count only the 2. Banks 3–5 — browsed, or not? (line 66) The table is introduced as "browsing each bank in turn" but lists 0, 1, 2, 6, 3. The Line 5 says the survey ran "with this PR's device entry applied", and that |
The LT is 0x0E41/0x424A, which no table entry and no udev rule covered, so Transport::open skipped it and its USB node stayed root-owned. Nothing else changes: handshake, preset read, snapshot decode and both browses work unmodified once the PID is in the table. Reported, not Verified — every read path reconciled against a physical unit, but no edit has ever been sent to one. Fields the survey did not observe stay None: preset_device_id, presets_per_bank. The setlist names are the Floor's and docs/helix-lt.md says so. Conflicts with the XL round, which rewrote the same entry and the same two tests, resolved toward master: the XL keeps P36 and its 01A-32D banking, and master's whole-DEVICES label invariant subsumes the loop the PR extended.
The Helix LT enumerates as
0x0E41/0x424A, which neither the device table nor the udev rulecovered — so
Transport::opennever saw it and its raw USB node stayed root-owned. Adding the PIDwas the only change needed: the handshake, the preset read, the snapshot decode and both browses
work unmodified, and the catalogue resolved every block and parameter of the loaded preset by name.
Everything in the new entry was read off the device, not inherited from the Floor:
model_code: Some("P21")7 → 36dsps: Some(2)1populated, blocks in slots 21–28 (DSP1 71.0% / DSP2 43.0%)snapshots: Some(8)SNAPSHOT 1…SNAPSHOT 8setlist_size: Some(128)-3preset_device_id: None0x0021xxxxid on the wire, and no LT.hxbto read one fromThe one place the evidence is thinner than the Floor's: the setlist names are the Floor's. Only
the arity and the character of the two end banks were observed (bank 0 = factory amps, bank 7 =
Quick Start/Parallel Spans/SNP:4-Amp Spill), whereas the Floor's names came from a real.hxb.docs/helix-lt.mdsays so explicitly, and flags it as the field to fix if an LT backupever turns up.
It stays
Support::Untested: no edit has ever been sent to this unit — reads and the handshakeonly, per
docs/safety.md's "read-only / transient first".Also renames
the_untested_device_claims_nothing_it_hasnt_shown_usto name the Stomp XL, since"the untested device" is no longer singular. It still asserts exactly what it did before.
cargo fmt --all --check,cargo clippy --locked --all-targets … -- -D warningsandcargo test --lockedall pass locally on the offline crates (rustc 1.97.1). The GUI job wasn'trun.
Happy to gather more from the unit if useful — it's on hand. In particular, a
fretwire backupsweep would settle the setlist names, and I'm glad to run one if you'd like it in the docs.
Built and tested on NixOS; the device was reached through a local package of fretwire with this
patch applied.