Skip to content

fix(logitech): address a long-only HID++ collection on long reports - #155

Merged
snekxs merged 1 commit into
OpenMouse-Project:mainfrom
ydw1904:fix/logitech-long-only-hidpp
Oct 3, 2026
Merged

snekxs merged 1 commit into
OpenMouse-Project:mainfrom
ydw1904:fix/logitech-long-only-hidpp

Conversation

@ydw1904

@ydw1904 ydw1904 commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Discord ticket 0143: a G PRO X Superlight on its Lightspeed receiver ("USB Receiver", 0xc547) is refused with Not a mouse even though the receiver is the right pick. Windows, Opera, through the Bridge, G HUB uninstalled.

The reporter's diagnostics list the receiver's collections as 0x000C:0x0001, 0x0001:0x0080, 0x0001:0x0006, 0x0001:0x0002, 0xFF00:0x0002: the long HID++ collection (report 0x11) and no short one. The driver probed every device index with short reports, the host rejected each sendReport(0x10) before it reached the receiver, and classifyHidpp20Probe counted that rejection as a HID++ 2.0 answer with no sensor behind it. Seven "answers", no DPI feature, NotAMouseError.

  • requestWithOptions now sends long reports when the report device has no short collection, the same path Bluetooth already takes. Devices that declare the short collection are unchanged.
  • classifyHidpp20Probe returns "unreachable" for anything that is not a HID++ reply, and the index probe rethrows it so the real transport error reaches the user instead of a wrong "not a mouse".

Test plan

  • npm test (1973 pass)
  • new tests: long-only 0xc547 resolves slot 0x01 over 0x11 only; a rejected sendReport is not reported as NotAMouseError
  • reporter confirms on their receiver once released

Chrome on some platforms hands out one HIDDevice per top-level collection,
so a Lightspeed receiver can arrive as its usage-2 (report 0x11) half alone.
Every short-report probe on it was rejected by the host before reaching the
receiver, classifyHidpp20Probe counted that rejection as a HID++ 2.0 answer
without a sensor, and a PRO X Superlight receiver came back "Not a mouse"
(ticket 0143).

- requestWithOptions sends long reports when the report device has no short
  collection, the same path Bluetooth already takes.
- classifyHidpp20Probe returns "unreachable" for anything that is not a HID++
  reply, and the index probe rethrows it instead of inventing an answer.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@snekxs
snekxs merged commit 6514b2e into OpenMouse-Project:main Oct 3, 2026
5 checks passed
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown

🎉 This PR is included in version 0.23.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants