Uh oh!
There was an error while loading. Please reload this page.
Implemented button mapping for the vv3p - #101
Merged
Merged
Conversation
Pochiiko
commented
Aug 16, 2026
ContributorAuthor
snekxs
marked this pull request as ready for review
August 16, 2026 07:56
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.

Branch is ready (
ce64c30, one clean commit on currentdev). CI will bered until PR 1 merges — open as a draft, or wait.
Base:
OpenMouse-Project/openmousedevHead:
Pochiiko/openmousevv3p-button-mappingRemaining steps
Rebase onto current— done.origin/devpackage-lock.jsonto the merged protocol commit (currently pins#b6bce148..., which predates the change). This is the CI fix.npm run checkandnpm run size.Title
feat(razer): add the Viper V3 Pro button mapping panel
Body
Adds the Buttons-tab Mapping card for the Razer Viper V3 Pro.
Important
Blocked on OpenMouse-Project/mouse-protocol#22. CI will fail here until
that lands —
MouseStatus.razerButtonMappingsand theRazerButton*/RazerToggle*exports come from it. Once it merges, this needs apackage-lock.jsonbump to the new protocol commit and CI goes green.What it adds
RazerButtonCard(AdvancedCards.tsx) in thebuttonstab, laid out withbutton-remap-list/button-remap-rowto matchMxMasterButtonsCard, theother remap card in that tab. Left Click renders as a plain value with an
explanatory note rather than a disabled select, since it is fixed on the
Standard layer — Synapse enforces the same restriction.
applyRazerButtonMapping/applyRazerToggleControl(controller.ts),staged through the pending-changes system like every other setting, with
per-row
data-pending-keyso a staged row highlights.razerButtonsinavailability.ts, computed fromstatus.razerButtonMappings != null. Razer has noBY_FAMILYentry intraits.ts— it reaches the advanced section through theui.showAdvancedSectionescape hatch — so this reads the driver's fielddirectly rather than inventing a family trait.
?preview=razer.under 2 kB of headroom.
Two control families, one dict
The card renders both families from a single
razerButtonMappingsdict keyed bycontrol name. That is safe because the driver guarantees the two families share
no control names and no option labels — there is a test in the protocol PR
asserting exactly that.
The four cross-assignable buttons offer the full mapping list. The three toggle
controls (Scroll Up, Scroll Down, sensitivity button) offer only their own
action or Disabled, because cross-assigning those has never been tested on
hardware and the driver does not expose it.
Verification
npm run check: build clean, 79/79 tests.npm run size: CSS 99%, JS 99%.?preview=razerand on real hardware (Viper V3 Pro,0x00c1HyperSpeed receiver, Synapse closed): 7 rows, correct per-family option sets,
Left Click locked, no console errors.
Right Click made the button open the context menu, and disabling Scroll Down
stopped the wheel scrolling. Both restored afterwards.
Not included
Hypershift and Scroll Click are not exposed — see the protocol PR for why.