Skip to content

feat(keychron): wire the Launcher 8k and 1k mouse drivers into the panel - #426

Closed
ydw1904 wants to merge 1 commit into
OpenMouse-Project:mainfrom
ydw1904:feat/keychron-launcher-mice
Closed

ydw1904 wants to merge 1 commit into
OpenMouse-Project:mainfrom
ydw1904:feat/keychron-launcher-mice

Conversation

@ydw1904

@ydw1904 ydw1904 commented Sep 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Wires the Keychron drivers from OpenMouse-Project/mouse-protocol#148 into the panel:

  • KeychronM6HidClient is now Keychron8kHidClient (@openmouse/protocol/drivers/keychron/mouse-8k-hid, family keychron-8k), which covers the M6 and every other Keychron mouse on Launcher's 0xffc1 protocol
  • the new Keychron1kHidClient (.../mouse-1k-hid, family keychron-1k) covers Launcher's usage page 0x8c protocol
  • both join NEEDS_OPEN and the debounce fallback chain
  • traits.ts: keychron-m6 becomes keychron-8k (advanced section, sleep, debounce); keychron-1k gets the advanced section and debounce only, because that protocol has no sleep command

Button remapping, lighting, the lift-off slider, 20K FPS (performanceMode), angle tuning and profiles all go through the shared cards, so nothing else changes.

Depends on

OpenMouse-Project/mouse-protocol#148, then a protocol release and a bump from 0.19.0. Until then the two new subpaths do not exist in the pinned version, so this stays a draft.

Tested

  • npm run check (tsc, vite build, 241 tests) with the protocol branch linked locally
  • dev server with simulated mice behind a stubbed navigator.hid:
    • an M3 on 0xffc1: connected as "Keychron M3" (Wired, 1000 Hz, 76%, Profile 2) with Performance (stage editor 4/5, Low/High lift-off, 125-1000 Hz, Motion Sync, angle snapping, ripple control, performance mode, angle tune), Lighting (Off/Static/Breathing single/Spectrum/Wave, brightness, colour, speed), Buttons (debounce and the 8-button remapper), Advanced (auto sleep) and Profiles. High lift-off + 500 Hz + performance mode, then Breathing single at 50%, then Forward to DPI Loop each reported "Flashed" and read back with the expected bytes on the fake mouse.
    • an M3 KM on 0x8c: connected as "Keychron M3 KM" (Wired, 500 Hz, 58%) with no Profiles tab and no auto-sleep card; 1000 Hz + Motion Sync reported "Flashed 2 changes".

Note

With lighting and the advanced section both on, the Advanced tab repeats the lighting card under a "RECEIVER" heading (lightingAdvanced in availability.ts). That is the existing behaviour for any driver with both, not something this PR adds; for Keychron the light is on the mouse, so the heading reads oddly. Left alone here because the gate is shared.

Not tested on a real mouse yet.

The M6 driver is now Keychron8kHidClient (family "keychron-8k") and
covers every Keychron mouse on Launcher's 0xffc1 protocol; the new
Keychron1kHidClient (family "keychron-1k") covers usage page 0x8c.
Both open before their first read, and the 1k family has no sleep
card because its protocol has no sleep command. Button remapping,
lighting, lift-off levels and 20K FPS come through the shared cards.

Needs the protocol release that ships mouse-protocol's
feat/keychron-launcher-mice and a version bump.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@snekxs

snekxs commented Sep 30, 2026

Copy link
Copy Markdown
Member

Superseded by #440, which lands this change together with protocol 0.22.0. The Launcher rework in mouse-protocol#148 removes m6-hid/KeychronM6HidClient, so this had to merge in the same commit as the bump. Thanks!

@snekxs snekxs closed this Sep 30, 2026
m4milaad pushed a commit to m4milaad/openmouse that referenced this pull request Oct 1, 2026
…drivers

Land the four device integrations that depend on protocol 0.22.0 together:
Noir Gear M2-NEX (OpenMouse-Project#402), Keychron G3 Air (OpenMouse-Project#408), Rapoo VT9 Pro (OpenMouse-Project#422) and
Keychron Launcher 8k/1k (OpenMouse-Project#426). The Launcher work removes KeychronM6HidClient
with m6-hid, so the panel must switch to Keychron8k/1kHidClient in the same
commit as the protocol bump. Raise the JS bundle budget to 2,085 kB for the
combined additions (measured 1,995.2 kB).
snekxs pushed a commit that referenced this pull request Oct 3, 2026
…ebounce cards (#514)

Protocol 0.22.0 reports ui.family "keychron-8k" (the M6 and most Keychron
mice) and "keychron-1k", but BY_FAMILY still only knew the old
"keychron-m6" family. Those mice lost their advanced section, and the 8k
mice lost sleep and debounce. This is the traits half of the closed #426
that #440 did not carry over.

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants