Skip to content

feat(core): add the original PRO X SUPERLIGHT button layout - #2443

Open
Efllux wants to merge 1 commit into
AprilNEA:masterfrom
Efllux:feat/pro-x-superlight
Open

Efllux wants to merge 1 commit into
AprilNEA:masterfrom
Efllux:feat/pro-x-superlight

Conversation

@Efllux

@Efllux Efllux commented Nov 7, 2026 •

Copy link
Copy Markdown

Summary

The original PRO X SUPERLIGHT (wpid 0x4093, USB 0xc094) fell back to the generic STANDARD_BUTTONS layout. That layout has no host-mode target, so the capture plan never takes the mouse off its onboard profile, and a saved report rate is never applied. Button remaps (DPI shift, DPI cycle) can't work either.

This PR registers a measured layout for the mouse, so it gets the same host-mode handling as the G502 and G903.

Changes

  • openlogi-core
    • Add PRO_X_SUPERLIGHT to binding/gaming.rs. It covers the five 0x8110 slots (left, right, middle, back, forward, all native) and the stock DPI presets 400/800/1600/3200/6400, and is registered in LAYOUTS.
    • The layout matches extended model ids 0–5 (04093…54093). These share G HUB's pro_x_wireless_mouse metadata and default configuration.
    • Superlight 2, DEX and unknown model ids keep their existing paths.
    • Re-export the layout from binding.rs.
    • Test: every original-model colour resolves to this layout, and other models stay Standard.
  • openlogi-agent-core (capture_plan.rs tests only)
    • Test: a Superlight with a saved 500 Hz rate gets a Host target with five native slots and that rate. This test failed before the layout was registered, because the plan returned no onboard target.
    • Test: an unconfigured Superlight keeps its onboard profile.

Testing

Local gate. The affected-package tier was derived with cargo tree --workspace --target all --invert for openlogi-core and openlogi-agent-core. It covers 15 packages; no rebase was needed, since the branch sits on the current master tip cff9a04.

cargo +1.99.0 fmt --all -- --check                                   # passed
RUSTFLAGS="-D warnings" cargo +1.99.0 clippy --locked \
  -p openlogi -p openlogi-agent -p openlogi-agent-core -p openlogi-cli -p openlogi-core \
  -p openlogi-desktop -p openlogi-device -p openlogi-fixture -p openlogi-hid -p openlogi-hook \
  -p openlogi-inject -p openlogi-ipc -p openlogi-overlay -p openlogi-permissions -p openlogi-ui \
  --all-targets -- -D warnings                                       # passed
RUSTFLAGS="-D warnings" cargo +1.99.0 test --locked \
  -p openlogi -p openlogi-agent -p openlogi-agent-core -p openlogi-cli -p openlogi-core \
  -p openlogi-device -p openlogi-fixture -p openlogi-hid -p openlogi-hook -p openlogi-inject \
  -p openlogi-ipc -p openlogi-permissions                            # 2801 passed, 0 failed
RUSTDOCFLAGS="-D warnings" cargo +1.99.0 doc --locked --workspace --no-deps \
  --document-private-items --exclude openlogi-ui --exclude openlogi-desktop \
  --exclude openlogi-overlay --exclude openlogi-agent               # passed

Not run:

  • cargo test for openlogi-desktop, openlogi-ui and openlogi-overlay. The machine ran out of disk space; those crates pass Clippy and were built in release (below).
  • Typos, ast-grep, MSRV, cargo-deny, and the Linux/Windows jobs.

Hardware verification. Tested on macOS 26.6.2 with an original PRO X SUPERLIGHT (extended model id 2) over its Lightspeed receiver.

Through openlogi diag:

  • Battery: 0x1004.
  • DPI: 0x2201 v2, range 100–25600 in steps of 50. A write was read back, then restored.
  • Report rate: 0x8060 reports 125/250/500/1000 Hz. A write was read back, then restored.
  • Buttons: 0x8110 reports five slots. Physical presses of left, right, middle, back and forward produced masks 0001, 0002, 0004, 0008 and 0010.
  • Onboard memory was not rewritten.

Through a release build of this branch (desktop, agent and overlay), installed and running as the agent:

  • The agent logs G-series host mode active captured=2 and re-applies the saved DPI.
  • Back bound to DpiShift holds the lowest preset. Forward bound to CycleDpiPresets steps through the presets and wraps around.
  • In host mode, report-rate writes from openlogi api report-rate read back correctly.

Known limitation, not addressed here. On startup or reconnect, the saved report rate is written before host mode is entered, so the device rejects it (0x8060 returns InvalidArgument). Unlike DPI, it isn't written again when host mode starts. This is not specific to this mouse; I'll open a separate issue.

Refs #886

@greptile-apps

greptile-apps Bot commented Nov 7, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no new actionable issues were found.

Summary

Registers the original PRO X SUPERLIGHT’s five-button layout for extended model IDs 0–5.

  • Original PRO X SUPERLIGHT mice can use saved report rates in host mode.

Reviews (2) · Last reviewed commit: "feat(core): add the original PRO X SUPER..." · Reviewed by Greptile

@AprilNEA AprilNEA added needs: decision Needs a maintainer/product decision type: feature New feature request area: hidpp HID++ protocol and device feature support platform: all Cross-platform issue labels Nov 7, 2026 — with Manus Connector
@davidbudnick davidbudnick added this to the v1.0.0 milestone Nov 8, 2026
The original PRO X SUPERLIGHT (wpid 0x4093, USB 0xc094) fell back to the
generic STANDARD_BUTTONS layout, so the capture plan never handed it to
host mode and a saved report rate was never applied.

Register its five 0x8110 slots (left, right, middle, back, forward, all
native) and its stock DPI presets for extended model ids 0-5, which share
G HUB's pro_x_wireless_mouse metadata. Superlight 2, DEX and unknown
model ids keep their existing paths.
@Efllux
Efllux force-pushed the feat/pro-x-superlight branch from 9456b58 to cd0c8ab Compare November 14, 2026 00:04

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: hidpp HID++ protocol and device feature support needs: decision Needs a maintainer/product decision platform: all Cross-platform issue type: feature New feature request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants