HeadRush adapter: the easy second device, never actually started
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
Research direction
Start by reading fm9/adapter.py for the adapter contract and fm9/sim.py for the simulator model. The issue says the next step is a screen share to assess API stability and whether the adapter is wanted; confirm that scope before treating implementation as started. Done would mean an agreed, honest capability subset, a parameter registry, and a simulator, but this issue does not yet define or commit to that work.
Written by the indexing model from the issue text.
Description
Splitting HeadRush out of #17 with an honest status: this has never been started. The epic said "in flight" for weeks because it conflated @bschmalz81401's own HeadRush application with a ToneCommand adapter. They are different things, and only one of them exists.
@bschmalz81401 this is an invitation and a question, not a work order. Say no freely.
The reframe, because "move it into ToneCommand" is the wrong picture
You said you were clueless how this would work, and I think that is because the obvious reading is wrong. We are not asking you to move your app. Your HeadRush builder is a product: three platforms, its own UI, your own stack. Nothing here asks you to bin any of it.
A ToneCommand device adapter is a much smaller thing. It is one Python class implementing about a dozen methods against a device, plus a capability declaration saying what it can honestly answer. It has no UI. It does not replace anything. Your app and this adapter would talk to the same hardware and neither would know about the other.
So the two can simply coexist. Yours stays yours.
Why HeadRush and why now
Per #8, this is the easy second device: it exposes an open API, so there is no protocol reverse engineering at all. For contrast, the ToneX has taken three sessions of HDLC framing, checksum identification and hunting message types in a stripped binary (#23, #27) and still cannot be written to.
And the contract only became able to host a second device honestly last week. Before Capabilities landed in #26, it assumed every method worked everywhere, so an adapter for a device that cannot do something would have had to lie or fail. Now it can declare what it does and does not support, and the layer above degrades openly.
ToneCommand supports exactly one device today. That is the real reason to do this.
What the adapter actually is
fm9/adapter.py is the contract. The surface is roughly:
status_dump() current blocks/bypass/channel from an honest read path
current_preset() (number, name) or None
select_preset(n)
set_scene(n) declare has_scenes=False if the device has no such concept
set_bypass(id, bool)
set_channel(id, n)
set_param_display(spec, value) verified write: settle, read back, report
set_param_ordinal(spec, n)
bulk_read(id)
slot_name(n) a stored name read WITHOUT selecting the slot
is_slot_empty(n)
store_preset(n) whitelisted and confirmation gated
capabilities() what this device can actually answer
close()
You do not have to implement all of it. That is the entire point of Capabilities: declare read_path, verifies_writes, has_scenes, stores_presets honestly, and the layer above adapts instead of assuming. A partial adapter that tells the truth is worth far more than a complete one that guesses.
Also needed alongside it: a parameter registry mapping HeadRush's blocks and parameters to names the planner can reason about, and a simulator so it is testable without hardware. fm9/sim.py is the model, including its habit of naming undecoded territory rather than pretending.
The honest asks
- Do you want this at all? You already have a working tool for this device. Building a second interface to it may be uninteresting, and that is a completely fine answer.
- Is the HeadRush API stable and documented enough for someone without the device to review the result sensibly? The maintainer has no HeadRush, which makes you the only person who can verify anything here.
- Would it be better as data rather than code? Your NAM captures, your IR work and the Big Sky matching idea might do more for this project through #18 than an adapter would. If you would rather spend the time there, say so.
The screen share you asked for is the right next step for all three of these. This issue exists so there is something to point at, not to commit you to anything.
- Dominant language
- Python
- Stars
- 7
- Forks
- 3
- Avg merge
- 2h 17m
- Merged PRs (30d)
- 49
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from monzta1/ToneCommand
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
monzta1/ToneCommand#293 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
monzta1/ToneCommand#268 ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 35/100
monzta1/ToneCommand#269 ·
Maintainers usually reply within 1 day
-
bug device
Difficulty 4/5 3-5 days Newbie friendliness 12/100
monzta1/ToneCommand#250 · 1 comment ·
Maintainers usually reply within 1 day
-
bug device
Difficulty 4/5 3-5 days Newbie friendliness 18/100
monzta1/ToneCommand#241 · 2 comments ·
Maintainers usually reply within 1 day
All issues in monzta1/ToneCommand
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
aws-samples/sample-per-model-bedrock#639 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 86/100
awslabs/visual-asset-management-system#937 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
project-codeflare/codeflare-sdk#1195 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
pandas-dev/pandas-stubs#2051 ·
Maintainers usually reply within 1 day