Skip to content

feat: add LIGHTSPEED G305 support#369

Open
watzon wants to merge 2 commits into
AprilNEA:masterfrom
watzon:agent/lightspeed-g305-support
Open

feat: add LIGHTSPEED G305 support#369
watzon wants to merge 2 commits into
AprilNEA:masterfrom
watzon:agent/lightspeed-g305-support

Conversation

@watzon

@watzon watzon commented Jul 10, 2026

Copy link
Copy Markdown

Summary

  • add LIGHTSPEED as a first-class HID++ receiver family with canonical receiver PIDs, receiver identity, pairing-slot inventory, connection notifications, and stable slot routing
  • add G305-compatible legacy 0x1000 battery support with cached refreshes, live 0x2201 DPI access, and marketing-name fallback
  • expose gaming-mouse Buttons support through host-side middle/back/forward remapping while hiding HID++-only DPI/gesture controls when no 0x1b0x capture feature exists
  • update Linux receiver-child filtering, IPC wire fixtures/protocol version, CLI guidance, and documentation

Why

OpenLogi previously treated 046d:c53f as an unrecognized HID++ node, so the connected G305 receiver could not surface its paired slot or route feature operations to device index 1. LIGHTSPEED uses Unifying-style HID++ 1.0 receiver registers (0x2N pairing information, 0x3N extended information, and 0x4N names), while the paired mouse exposes HID++ 2.0 features at its receiver slot.

This change models that receiver family explicitly and keeps hardware writes disabled when a stable receiver identity is unavailable.

User impact

The G305 now appears as a named mouse with WPID, battery, pointer, and Buttons panels. DPI reads/writes target the paired slot, and standard middle/back/forward controls remain remappable through the OS input hook. Gaming-only DPI button capture, onboard profiles, persistent hardware mappings, and gaming RGB remain deferred.

Validation

  • cargo test --workspace --no-fail-fast
  • cargo fmt --all -- --check
  • git diff --check
  • connected G305 inventory:
    • receiver 046d:c53f
    • receiver ID D686CB5E
    • slot 1 G305
    • WPID 4074
    • legacy battery 90%, discharging
  • feature diagnostics found 0x1000, 0x2201, 0x8100, and 0x8110 on slot 1
  • DPI hardware round-trip: read 3200, write/read back 3250, restore 3200

@watzon watzon marked this pull request as ready for review July 10, 2026 21:00
@greptile-apps

greptile-apps Bot commented Jul 10, 2026

Copy link
Copy Markdown

Greptile Summary

This PR adds first-class LIGHTSPEED G305 support. The main changes are:

  • LIGHTSPEED receiver detection, inventory probing, and slot routing.
  • Legacy 0x1000 battery reads with unknown-status fallback.
  • G305 feature handling for DPI, button capabilities, and UI visibility.
  • Updated IPC fixtures, CLI guidance, Linux filtering, and documentation.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.
  • The legacy battery status fallback now preserves usable battery data when the status byte is unknown.

Important Files Changed

Filename Overview
crates/openlogi-hidpp/src/feature/battery_status/mod.rs Adds legacy HID++ battery status support with an unknown-status fallback.
crates/openlogi-hid/src/inventory/features.rs Adds legacy battery probing and cached refresh support.
crates/openlogi-hid/src/inventory/probe.rs Adds LIGHTSPEED receiver inventory probing and slot handling.
crates/openlogi-hid/src/route.rs Adds LIGHTSPEED route construction and receiver matching.

Reviews (2): Last reviewed commit: "fix: preserve battery level for unknown ..." | Re-trigger Greptile

Comment thread crates/openlogi-hidpp/src/feature/battery_status/mod.rs Outdated
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