feat(hid): recognise Lightspeed receiver 046d:c547 (G915, G502 X) - #574
Open
bobaoapae wants to merge 2 commits into
Open
feat(hid): recognise Lightspeed receiver 046d:c547 (G915, G502 X)#574bobaoapae wants to merge 2 commits into
bobaoapae wants to merge 2 commits into
Conversation
The Lightspeed receiver that ships with newer G-series devices (the G915 keyboard, the G502 X LIGHTSPEED) answers the same HID++ 1.0 enumeration and pairing-information registers as Unifying receivers, but its PID is not in any known-receiver list, so devices paired through it are never discovered: the receiver falls through detect() and the paired device stays invisible to list and the GUI. Add the PID to LIGHTSPEED_PIDS (openlogi-hid) and unifying::VPID_PAIRS (openlogi-hidpp) so the receiver routes as DeviceRoute::Unifying and its pairing slots are walked. Verified on real hardware with a G915 (paired device wpid 0x407c). Refs AprilNEA#512
Greptile SummaryAdds recognition and Unifying-protocol routing for the
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains.
|
| Filename | Overview |
|---|---|
| crates/openlogi-hid/src/route.rs | Adds 0xc547 to the shared Lightspeed PID table and verifies its display name. |
| crates/openlogi-hid/src/transport.rs | Extends Linux receiver-child filtering to Lightspeed receivers, resolving the previously reported enumeration gap without excluding the receiver node itself. |
| crates/openlogi-hid/src/transport/tests.rs | Adds a representative c547 child sysfs path regression test. |
| crates/openlogi-hidpp/src/receiver/unifying.rs | Enables receiver detection for 046d:c547 through the existing Unifying-compatible protocol implementation. |
Reviews (2): Last reviewed commit: "fix(hid): filter Lightspeed receiver chi..." | Re-trigger Greptile
| /// They speak the same HID++ 1.0 receiver register protocol as Unifying, so | ||
| /// they are enumerated, routed, and paired through the Unifying code path; | ||
| /// only the user-facing receiver name (see [`receiver_display_name`]) differs. | ||
| pub const LIGHTSPEED_PIDS: &[u16] = &[0xc53f, 0xc547]; |
There was a problem hiding this comment.
Lightspeed child nodes remain unfiltered
On Linux, adding 0xc547 only to LIGHTSPEED_PIDS leaves receiver-child filtering unchanged because is_receiver_child_sysfs_path checks only BOLT_PIDS and UNIFYING_PIDS. Child HID nodes beneath this receiver are therefore treated as direct-device candidates, adding unnecessary probes and potentially creating failed or duplicate inventory entries.
Knowledge Base Used:
is_receiver_child_sysfs_path builds its parent markers from BOLT_PIDS and UNIFYING_PIDS only, so child HID nodes beneath a Lightspeed receiver (LIGHTSPEED_PIDS: c53f, and c547 added here) were treated as direct-device candidates on Linux - extra probes and potential duplicate inventory entries. Chain LIGHTSPEED_PIDS into the marker list and cover it with a c547-child sysfs fixture.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds recognition for the Lightspeed receiver
046d:c547— the receiver that ships with newer G-series devices such as the G915 keyboard and the G502 X LIGHTSPEED. Before this change the PID was not in any known-receiver list, so the receiver fell throughdetect()and any device paired to it was completely invisible (never appeared inlistor the GUI), while ac539/c53freceiver next to it enumerated fine.Same shape as #510 (
c539) and #388 (c53f), per the direction in #512 that once the route shape landed, further Lightspeed PIDs reduce to rows in the coverage table: the receiver answers the same HID++ 1.0 registers (pairing count, connection state, pairing information) as Unifying, so it routes through the existing Unifying code path and is only differentiated by its user-facing display name.Changes
openlogi-hid/route.rs— add0xc547toLIGHTSPEED_PIDS; the doc comment no longer claims the list is nano-receivers-only. Added the PID to the display-name test alongside0xc53f.openlogi-hidpp/receiver::unifying::VPID_PAIRS— add(0x046d, 0xc547)sodetect()builds the (Unifying-protocol) receiver for it, with the hardware-verification note in the doc comment following the existing0xc53f/G305 precedent.No routing, pairing, or display-name logic changes — the existing
speaks_unifying_protocol/receiver_display_namehelpers cover the new PID.Testing
Verified on Windows 11 with a real G915 on its Lightspeed receiver (paired device wpid
0x407c):The agent enumerates the keyboard, registers it in
config.toml, and the GUI lists and selects it. (battery=—is expected: the G915 only exposes0x1001 BatteryVoltage, which is name-only in the feature registry — unrelated to receiver routing.)Local gate on this branch:
Notes
0xc547is the second Lightspeed PID verified on real hardware for the [Tracking]: Lightspeed receiver support #512 coverage table (G915 here; [Tracking]: Lightspeed receiver support #512 records a G502 X LIGHTSPEED report).c53a,c53d,c541,c545,c54d).Refs #512