Skip to content

feat(keychron): wire the G3 Air into the panel - #408

Merged
snekxs merged 1 commit into
OpenMouse-Project:mainfrom
ydw1904:feat/keychron-g3-air
Sep 30, 2026
Merged

snekxs merged 1 commit into
OpenMouse-Project:mainfrom
ydw1904:feat/keychron-g3-air

Conversation

@ydw1904

@ydw1904 ydw1904 commented Sep 29, 2026

Copy link
Copy Markdown
Contributor

Summary

Wires the Keychron G3 Air driver from OpenMouse-Project/mouse-protocol#145 (Keychron8kNordicHidClient, family keychron-8k-nordic) into the panel:

  • traits.ts gives the family the advanced section with the sleep and debounce cards; the driver reads and writes both and publishes its own option lists
  • the client joins NEEDS_OPEN, so the device is opened before the first read

DPI stages, polling, lift-off, the processing toggles, angle tuning, onboard profiles and the button remapper all dispatch generically, so they need nothing here.

Depends on

OpenMouse-Project/mouse-protocol#145, then a protocol release and a bump from 0.19.0. Until then @openmouse/protocol/drivers/keychron/mouse-8k-nordic-hid does 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 a simulated G3 Air behind a stubbed navigator.hid: it connected as "Keychron G3 Air" (Wired, 1000 Hz, 76%, Profile 2). Performance showed the stage editor (3/5), Low/Medium/High lift-off, 125 Hz to 8K, Motion Sync, angle snapping, ripple control, performance mode and angle tune; Buttons showed debounce and the five-button remapper; Advanced showed auto sleep; Profiles showed the five-profile selector. Applying 8K + High + angle snapping, then Forward to DPI Loop + 4 ms debounce, then 30 minute sleep, then Profile 4 each reported "Flashed" and read back with the expected bytes on the fake mouse.

Not tested on a real mouse yet.

Keychron8kNordicHidClient (family keychron-8k-nordic, from
mouse-protocol) gets the advanced section with the sleep and debounce
cards, since it reads and writes both and publishes its own option
lists. It joins NEEDS_OPEN so the device opens before the first read.
DPI stages, polling, lift-off, the processing toggles, angle tuning,
profiles and the button remapper all dispatch generically.

Needs a protocol release with the driver and a bump from 0.19.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@snekxs
snekxs merged commit ea30c66 into OpenMouse-Project:main Sep 30, 2026
2 of 3 checks passed
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).
@ydw1904
ydw1904 deleted the feat/keychron-g3-air branch October 3, 2026 05:12
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