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