go-hid's ReadWithTimeout takes a time.Duration, so the bare 250 was 250ns, which truncates to a 0 ms hid_read_timeout. On both Linux (poll) and macOS (cond_timedwait) 0 ms means non-blocking, so the button loop spun continuously: ~1.2 cores and ~7.5k context switches/sec at idle, from startup. Pass 250*time.Millisecond and match hid.ErrTimeout with errors.Is ahead of the string fallback. Idle CPU drops to ~0%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016yH8jHn1SNzNnL58CRwTi9
7.6 KiB
7.6 KiB