Skip to content

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

@asdfasdf-ohfot

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

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