Skip to content

fix(arbiter): move Polar 65+ 0xA009 to the live 0xFF02 collection - #12

Merged
snekxs merged 1 commit into
mainfrom
feat/arbiter-a009-ff02
Oct 31, 2026
Merged

snekxs merged 1 commit into
mainfrom
feat/arbiter-a009-ff02

Conversation

@snekxs

@snekxs snekxs commented Oct 31, 2026 •

Copy link
Copy Markdown
Member

Follow-up to #11, which shipped the 0xA009 row on 0xFF01. After the release the reporter could claim the board but getFirmware timed out — the board's 0xFF01 collection answers nothing. Fixes #9 for real this time.

How the page was pinned:

  • Reporter's WebHID dump (previously overlooked) shows the board exposes two vendor collections: 0xFF01 (usages ...02/...03) and 0xFF02 (usages ...03/...04).
  • USB capture: all vendor-app traffic flows on USB interface 3 (endpoints 0x04/0x84); interface 2 is completely silent.
  • Live vendor bundle (app2.arbiterstudio.com, retrieved 2026-10-31) defines Polar 65+, vendorId 14108, productId 40969, usagePage 65282 and its device picker only claims collections with usagePage == 65282. 65282 appears 3x in the bundle, 65281 zero times.

So the live configuration interface is 0xFF02. This moves the row there and pins it in tests (0xA009 on 0xFF02 is i2; on 0xFF01 is undefined).

Also noted in docs: the same bundle lists a second Polar 65+ variant, product 40976 (0x371C:0xA010), on 0xFF02 with Main+FN, 3 profiles and SuperTap but a different protocol class — no capture exists for it yet, so no row.

Verification: full suite 384 pass, 0 fail; npm run build clean. (The 7 failures seen mid-work were a stale dist/ after pulling main — rebuild fixed them; unrelated to this change.)

Note

Fix Polar 65+ (PID 0xA009) to use usage page 0xFF02 in arbiter catalog

Updates the ARBITER_PRODUCTS entry for VID 0x371C / PID 0xA009 from usage page 0xFF01 to 0xFF02. The live vendor app pairs this product with 0xFF02, and the board's 0xFF01 collection does not respond. Updates arbiter-support.md and adds catalog-matching assertions in protocol.test.ts. Notes a second Polar 65+ variant (PID 0xA010) with no capture and no catalog row.

Macroscope summarized e4c428c.

#11 shipped the 0xA009 row on 0xFF01, but the board's 0xFF01
collection answers nothing: after the release the reporter could
claim the board but getFirmware timed out. The live vendor app
(app2.arbiterstudio.com) pairs product 40969 strictly with
usagePage 65282 and only claims devices exposing it, and a USB
capture shows all vendor traffic on interface 3 (endpoints
0x04/0x84) while interface 2 is silent. Move the row to 0xFF02
and pin it in tests. Also notes the second Polar 65+ variant
0xA010 found in the vendor bundle (no capture yet, no row).
@coderabbitai

coderabbitai Bot commented Oct 31, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 24 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 4d5a6f5 and e4c428c.

Files selected for processing: 3
  • docs/arbiter-support.md
  • src/arbiter/index.ts
  • src/arbiter/protocol.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@macroscopeapp

macroscopeapp Bot commented Oct 31, 2026

Copy link
Copy Markdown

Approvability

Verdict: Approved at e4c428c

Macroscope's review found this PR approvable — Routes the Polar 65+ to its active 0xFF02 configuration collection, with matching documentation and regression assertions. Vendor-app and USB-capture evidence support the correction, and other models and protocol behavior are unchanged.

Notes:

  • Your repo's Minimum Blocking Severity is Off, so correctness findings do not automatically block approval.

You can add or adjust custom eligibility rules. Learn more.

@snekxs
snekxs merged commit 3f9158f into main Oct 31, 2026
9 checks passed
@github-actions

Copy link
Copy Markdown

🎉 This PR is included in version 1.6.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: documentation Documentation 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.

Add Arbiter Polar 65+ Gaming Keyboard 0x371C:0xA009 (14108:40969)

1 participant