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 LIGHTSPEED G305 support across HID probing, routing, UI, and docs. The main changes are:

  • LIGHTSPEED receiver identity, slots, routes, and connection labels.
  • Legacy 0x1000 battery reads with cached refresh support.
  • G305 feature probing for DPI, button capability display, and marketing names.
  • IPC protocol and wire fixture updates for the new route and capability flag.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.
  • The legacy battery status fix now keeps 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 battery parsing with unknown status bytes preserved as an unknown state.
crates/openlogi-hid/src/inventory/features.rs Adds legacy battery probing and cached refresh support alongside unified battery reads.
crates/openlogi-hid/src/inventory/cache.rs Updates cached battery refreshes to route through the typed battery feature index.

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

Comment thread crates/openlogi-hidpp/src/feature/battery_status/mod.rs Outdated
@davidbudnick
davidbudnick force-pushed the agent/lightspeed-g305-support branch from 909c3f9 to 6d30192 Compare August 2, 2026 00:58
@davidbudnick davidbudnick added type: feature New feature request platform: all Cross-platform issue labels Aug 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

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