nRF52840 Steam Controller 2 puck reimplementation — WebUSB. Chrome/Edge only.
If nothing appears in the device picker, the copycat may be busy (quit any app holding it) or needs a replug. Serve this page over http://localhost (e.g. python3 -m http.server 8008) — WebUSB needs a secure context.
Switching reboots the copycat and re-enumerates USB (~2 s). The RF link reconnects automatically. Desktop keyboard+mouse (lizard) is automatic in Steam mode whenever Steam is closed — no separate mode.
Microseconds between RF polls (×100). Lower = poll harder = more fresh reports/s (peaks ~60/s near 700 µs). Too aggressive can collapse the reply rate during heavy trackpad use — watch the “New reports” stat and trackpad feel as you tune.
We were sending ~400 stale-repeat reports/s on top of ~100 real ones — Steam's trackpad smoothing stair-steps on the duplicates. ON = dedupe (puck-like). Toggle OFF to compare the old jittery behavior.
Candidates {18,46,76,22,68}. Conservative (hops at most every ~2s) to avoid blip-storms; each hop has a brief ~0.5–1s re-sync blip. A/B it during heavy trackpad — watch crcfail and the feel.
Right-pad cursor in Steam-mode lizard (Steam closed) and in Xbox mode. Sensitivity is a divisor — lower = faster pointer. Glide = how long the cursor coasts after a flick.
Interpolation alpha. 100 = off (raw 46 Hz capsense), lower = smoother but slightly laggier.
Back-paddle → button, applied in Xbox & Switch modes.