Repository navigation
Fix: Octatrack base, remote keys wait until the panel has finished its report - #1540
Merged
Merged
Conversation
…s report (#1110) The self-test's PLAY and STOP are pressed only between two physical panel reports; a development base's USB keys and encoder steps queue for the tick. Base regenerated (432edaff), base-bound packages re-bound. Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was wrong or hard: On the Octatrack, a remote key rung into the panel's byte stream between the two bytes of a physical report corrupted both (Octatrack base: USB development keys corrupt split physical fader reports with no modules loaded #1110, reproduced in the emulator by @twwwy with no module installed): the panel's parser took the remote header as the fader's value and the fader's value as key rows, so TRIG5-7 stayed held or a FUNC release was lost.
modwerk_panel_bytesmasks interrupts around its own two bytes but never checked whether a physical report had already started. The base's self-test presses PLAY and STOP through the same path, so a knob or fader moved during a self-test could hit it on any base, not only a development one.What this changes:
dsp.c, which links after the lease entries, so those did not move and Analog BD's reviewed recipe holds. The private port's patch (resident_base.patch) only has itsdsp.cline numbers shifted.432edaff…) and the base-bound packages are re-bound to it, Sidechain's lagging row by hand.How I checked it:
npm run pr:ready: Ready, after merging currentmain.test_selftest.c): the control, the press race and the release race on a model of the parser's state (header seen, value rung but not parsed, report whole), the self-test's own gate, two keys of one row in one tick, and the queue limit.build-modules-isolated.sh) and compared with the committed ones as CI does (import-module-build.mjs --development --check-only --verify-existing): all validated. The elemod rebuild was not run; this change touches none of those packages.2d97f42d…): single keys, FUNC, BANK and PART chords, bank and Part switches and effect picks went through it, and the held-key rows read released afterwards;432edaff…):selftestpassed with E-Verb installed as a trial, so PLAY and STOP went through the gate.boot.c) still takes the direct path. That code links before the lease entries; changing it moves them and needs Analog BD's recipe recaptured, so it waits for the next base change that does that.What the guides lacked or got wrong, and where I fixed it:
docs/OCTATRACK_DRIVING.mdsaid remote packets are spliced into the panel's stream and told readers to serialize input themselves. It now says what the base does, what was run and what was not.Related to #1110. It stays open until this base is live and checked.
🤖 Generated with Claude Code