Skip to content

fix(endgame): match the vendor OT handshake and interface - #241

Merged
snekxs merged 1 commit into
mainfrom
fix/egg-ot-vendor-handshake
Oct 17, 2026
Merged

snekxs merged 1 commit into
mainfrom
fix/egg-ot-vendor-handshake

Conversation

@snekxs

@snekxs snekxs commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Summary

From reading the vendor app (Endgame Gear Configuration Software 1.6.400, main-es2015.js ~6198-6374) against the OT driver. None of this is verified on hardware yet.

  • Session start: send kComSetPasswd (static 32-byte vendor password, packet id 0), then kComQueryFirmwareVersion, before any profile query. The vendor carries on if the mouse is silent here, so failures are traced, not thrown.
  • Lone response: the vendor sets its "ACK seen" flag right after every write, so a query completes on the first non-empty, non-ACK reply. exchange()/sendPacket() previously required an ACK first and swallowed a lone response.
  • Interface: isSupported now requires the 0xFFA1:0x00A5 collection with feature report 0, the only interface the vendor opens. The other interfaces of the same PID are standard mouse/keyboard collections that Chrome refuses writes on (the NotAllowedError in [Endgame Gear] OP1 RGB (0x1905) wired: no answer to OT profile block 0 — first hardware report against unverified OT driver #237).
  • Tests: usage-page rejection, session-start order, response-only mouse; probe matrix gets the new shape.

Refs #237 (does not close it until a hardware handshake succeeds).

The web app's picker filter may also need the usage page so users are not offered the wrong interface.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added support for Endgame Gear OT mice, including reading device profiles.
  • Bug Fixes
    • Improved compatibility with devices that send a response without first acknowledging a request.
    • Device detection now matches the required interface, reducing false matches.

Found by reading the vendor app (v1.6.400) against the driver:
- open a session with kComSetPasswd (static vendor password), then the
  firmware version, before any profile query; silence is traced, not fatal
- accept a lone response packet: the vendor treats the ACK as seen after
  every write, so a query no longer needs an ACK first
- claim only the 0xFFA1:0x00A5 interface the vendor opens; other
  interfaces of the same PID refuse feature-report writes

Refs #237

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added type: bug PR title category: bug area: protocol Protocol codecs and shared types area: drivers Device drivers and transport integration area: tests Protocol and driver tests labels Oct 17, 2026
@coderabbitai

coderabbitai Bot commented Oct 17, 2026

Copy link
Copy Markdown

Review in Change Stack →

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration
  • Configuration used: Repository: OpenMouse-Project/mouse-protocol/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 034aff5a-86a4-4725-8283-b181cc121a15
📥 Commits

Reviewing files that changed from the base of the PR and between b59e4d6 and 62c2343.

📒 Files selected for processing: 4
  • src/drivers/endgame/egg-ot-hid.test.ts
  • src/drivers/endgame/egg-ot-hid.ts
  • src/drivers/registry.test.ts
  • src/endgame-gear/ot.ts
+------------------------------------------------------+
| CUDA: Carrot Utilization for Debugging Acceleration. |
+------------------------------------------------------+
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@snekxs
snekxs merged commit 54c68c6 into main Oct 17, 2026
6 of 7 checks passed
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 0.45.1 🎉

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

area: drivers Device drivers and transport integration area: protocol Protocol codecs and shared types area: tests Protocol and driver tests released type: bug PR title category: bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant