Skip to content

Add SteelSeries Arctis Nova 5/5X HID detection - #12

Closed
Ayerdi wants to merge 3 commits into
mainfrom
agent/steelseries-nova5-hid-detection
Closed

Add SteelSeries Arctis Nova 5/5X HID detection#12
Ayerdi wants to merge 3 commits into
mainfrom
agent/steelseries-nova5-hid-detection

Conversation

@Ayerdi

@Ayerdi Ayerdi commented Aug 13, 2026

Copy link
Copy Markdown
Owner

Summary

Adds the device-specific HID provider needed to detect the real wireless ON/OFF state of SteelSeries Arctis Nova 5 and Nova 5X receivers when Windows keeps their audio endpoint Active.

What is included

  • Native Windows HID/SetupAPI detector for SteelSeries VID 0x1038 and Nova 5/5X PIDs 0x2232 / 0x2253.
  • Filters the HID collection to Usage Page 0xFFC0, Usage 0x0001.
  • Sends the reverse-engineered Nova status request 00 B0 and maps response byte 1 value 0x02 to Disconnected.
  • Treats timeout, malformed/short responses, and HID errors as Unknown; it never guesses OFF from a failed query.
  • Pester tests for status mapping.
  • A diagnostic tool (tools/Test-SteelSeriesNova5Hid.ps1) to validate ON/OFF transitions on real hardware.

Protocol source

The protocol is based on the SteelSeries Arctis Nova 5 implementation in Sapd/HeadsetControl, including its receiver IDs, HID usage, status request, and offline marker.

Draft status / remaining work

This PR is intentionally draft. The provider itself is present, but it is not yet wired into Runtime-PROX2-AutoSwitch.ps1, the installer, or the Reconfigure wizard. Those existing scripts require a larger integration change and should only select SteelSeriesNova5Hid after a verified Connected -> Disconnected -> Connected hardware cycle.

Before marking ready:

  • wire SteelSeriesNova5Hid into runtime polling and config validation;
  • copy/import the provider from the installer;
  • add installer + Reconfigure ON/OFF/ON validation before selecting the mode;
  • validate on a physical Nova 5 or Nova 5X;
  • confirm the Windows CI/Pester checks pass.

Safety behavior

If the HID receiver cannot be queried reliably, the detector returns Unknown. This follows the project's existing rule that an unknown physical state must not trigger an audio-output switch.

Ayerdi added a commit that referenced this pull request Aug 17, 2026
* feat: integrate SteelSeries Nova 5/5X HID provider (v1.4.0)

Brings in the useful part of #12 (native HID module, tests, diagnostic
tool) and integrates it as a real detection mode instead of dead code:
- New DetectionMode 'SteelSeriesNova5' recognized by the runtime.
- Worker polls Get-SteelSeriesNova5State (HID, no external software);
  Unknown never switches.
- Installer headset-type picker gains option [4] SteelSeries Arctis
  Nova 5/5X: verifies the HID receiver is present, sets the mode.
- Verifier reports receiver presence for this mode.
- Release package bundles lib/SteelSeriesNova5.psm1 and the diagnostic
  tool; Pester runs the new tests.
- CHANGELOG v1.4.0.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

* fix: detect all Logitech PRO X headsets via G HUB, not only PRO X 2

A Reddit user reported their PRO X Wireless is not detected. The G HUB
filters hardcoded the 'PRO\s*X\s*2' pattern, so any other PRO X headset
(PRO X Wireless, PRO X) was skipped. Add Test-LogitechProXDeviceName
(centralized in AutoSwitchCore, exported) that matches PRO X / PRO X 2 /
PRO X Wireless and excludes Logitech mouse names (G PRO X Superlight),
and use it in the runtime fallback lookup and both installer G HUB
filters. Prompts/logs now say "Logitech PRO X". Pester tests added.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

---------

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
@Ayerdi

Ayerdi commented Aug 17, 2026

Copy link
Copy Markdown
Owner Author

Closed as superseded: merged via #9, #14 and #15.

@Ayerdi Ayerdi closed this Aug 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant