Skip to content

Arctis Nova 3P/3X Wireless: battery query times out due to wrong HID interface #499

Description

@asdfasdf-ohfot

Battery status always returns BATTERY_UNAVAILABLE / Operation timed out on the Arctis Nova 3P Wireless (0x1038:0x2269). All other capabilities (sidetone, EQ, mic volume, etc.) appear to work.

Cause

getCapabilityDetail() in steelseries_arctis_nova_3p_wireless.hpp returns interface_id = 4. The dongle exposes three HID interfaces:

  • Interface 3: Usage-Page 0xffc0 (vendor-specific)
  • Interface 4: Usage-Page 0x000c (consumer control)
  • Interface 5: Usage-Page 0xff00 (vendor-specific)

The battery request (0xb0) is a vendor-specific feature report that needs to go to interface 3. Interface 4 is consumer control and silently ignores it, causing the read to time out.

Write-only commands (sidetone, EQ, etc.) happen to succeed on either interface, which is why this only affects battery, the only capability that reads a response.

Verified with --dev

Sending the feature report manually to interface 3 returns valid battery data:

sudo ./build/headsetcontrol --dev -- --device 0x1038:0x2269 --interface 3 --send-feature "0xb0, [63 zero bytes]" --receive --timeout 5000
0xb0 0x03 0x02 0x36 0x03 0x64 0x64 ...

Same command to interface 4 times out.

Fix

One line in steelseries_arctis_nova_3p_wireless.hpp:

// before
return { .usagepage = 0xffc0, .usageid = 0x1, .interface_id = 4 };
// after
return { .usagepage = 0xffc0, .usageid = 0x1, .interface_id = 3 };

Likely affects the 3X Wireless (0x226d) as well since it shares the same device class.

Environment

  • HeadsetControl continuous-27-g4635798 built from master
  • openSUSE Tumbleweed, kernel 6.x, PipeWire 1.6.0
  • hidapi 0.14.0

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions