Skip to content

SteelSeries Arctis 7 found but not working #588

Closed

Description

@JxPv2

Description

PS E:\Users\JxP\Downloads> ./headsetcontrol-windows-x86_64.exe -b
Found 1 supported device(s):
 SteelSeries Arctis (7/Pro) (SteelSeries Arctis 7) [0x1038:0x12ad]
Battery:
        Status: BATTERY_UNAVAILABLE
Error: [battery] HID communication error

Headset Name

SteelSeries Arctis 7

On which OS does the problem happen?

Windows

Device information

Detailed Device Information
Device Found
 VendorID:  0x1038
 ProductID: 0x12ad
 Path: \\?\HID#VID_1038&PID_12AD&MI_05&Col01#a&3a9731e9&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
 Serial:
 Manufacturer: SteelSeries
 Product: SteelSeries Arctis 7
 Interface: 5
 Usage-Page: 0x000c  Usage-ID: 0x0001

Device Found
 VendorID:  0x1038
 ProductID: 0x12ad
 Path: \\?\HID#VID_1038&PID_12AD&MI_05&Col02#a&3a9731e9&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}
 Serial:
 Manufacturer: SteelSeries
 Product: SteelSeries Arctis 7
 Interface: 5
 Usage-Page: 0xff43  Usage-ID: 0x0202

Device Found
 VendorID:  0x1038
 ProductID: 0x12ad
 Path: \\?\HID#VID_1038&PID_12AD&MI_05&Col03#a&3a9731e9&0&0002#{4d1e55b2-f16f-11cf-88cb-001111000030}
 Serial:
 Manufacturer: SteelSeries
 Product: SteelSeries Arctis 7
 Interface: 5
 Usage-Page: 0xff00  Usage-ID: 0x0001

Activity

  1. fx02 commented on Oct 14, 2026

    @fx02

    Same issue:

    headsetcontrol-windows-x86_64.exe -l 0
    Found 1 supported device(s):
    SteelSeries Arctis (7/Pro) (SteelSeries Arctis 7) [0x1038:0x1260]

    HID communication error

  2. JxPv2 commented on Oct 14, 2026

    @JxPv2
    Author
  3. mattenz commented on Oct 24, 2026

    @mattenz

    Having the same issue with an Arctis Pro Wireless. I also tried with todays Continuous build but no change.

    headsetcontrol -b
    Found 1 supported device(s):
    SteelSeries Arctis Pro Wireless (Arctis Pro Wireless) [0x1038:0x1290]
    Battery:
    Status: BATTERY_UNAVAILABLE
    Error: [battery] HID communication error

    List results:

    Device Found
    VendorID: 0x1038
    ProductID: 0x1294
    Path: \?\HID#VID_1038&PID_1294&MI_05&Col01#b&267de245&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
    Serial:
    Manufacturer: SteelSeries
    Product: Arctis Pro Wireless
    Interface: 5
    Usage-Page: 0x000c Usage-ID: 0x0001

    Device Found
    VendorID: 0x1038
    ProductID: 0x1294
    Path: \?\HID#VID_1038&PID_1294&MI_05&Col02#b&267de245&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}
    Serial:
    Manufacturer: SteelSeries
    Product: Arctis Pro Wireless
    Interface: 5
    Usage-Page: 0xff00 Usage-ID: 0x0001

    Device Found
    VendorID: 0x1038
    ProductID: 0x1290
    Path: \?\HID#VID_1038&PID_1290&MI_01#b&16e982c&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
    Serial:
    Manufacturer: SteelSeries
    Product: Arctis Pro Wireless
    Interface: 1
    Usage-Page: 0xffc0 Usage-ID: 0x0001

    Device Found
    VendorID: 0x1038
    ProductID: 0x1290
    Path: \?\HID#VID_1038&PID_1290&MI_00#b&11c18412&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
    Serial:
    Manufacturer: SteelSeries
    Product: Arctis Pro Wireless
    Interface: 0
    Usage-Page: 0xff00 Usage-ID: 0x0001

  4. mattenz commented on Oct 25, 2026

    @mattenz

    So, I know this might be yuck but, I gave it to Claude and with a bit of back and forward, it gave me this patch file to apply. When I recompiled the source, the tool now correctly gives me the details of my Arctis Pro Wireless again. This specific patch wouldn't work with other models at just modifies the device file for my headset. I also think it's work someone who knows what they're doing review this first.

    diff --git a/lib/devices/steelseries_arctis_pro_wireless.hpp b/lib/devices/steelseries_arctis_pro_wireless.hpp
    --- a/lib/devices/steelseries_arctis_pro_wireless.hpp	2026-10-24 08:11:19.375212886 +0000
    +++ b/lib/devices/steelseries_arctis_pro_wireless.hpp	2026-10-25 06:09:27.833056454 +0000
    @@ -2,8 +2,11 @@
     
     #include "../result_types.hpp"
     #include "protocols/steelseries_protocol.hpp"
    +#include <algorithm>
     #include <array>
    +#include <span>
     #include <string_view>
    +#include <vector>
     
     using namespace std::string_view_literals;
     
    @@ -47,14 +50,51 @@
     
         constexpr capability_detail getCapabilityDetail([[maybe_unused]] enum capabilities cap) const override
         {
    -        return { .interface_id = 0 };
    +        // The base station exposes two HID interfaces under this PID: MI_00 (usage page
    +        // 0xff00) and MI_01 (usage page 0xffc0). interface_id 0 means "first enumerated",
    +        // and Windows does not guarantee the order, so pin the control interface by usage.
    +        return { .usagepage = 0xff00, .usageid = 0x0001, .interface_id = 0 };
    +    }
    +
    +    // This device uses unnumbered HID reports. hidapi treats the first byte of a write as the
    +    // report ID, so on Windows the command must be preceded by 0x00; otherwise the first command
    +    // byte (e.g. 0x40) is consumed as a report ID and the base station never answers.
    +    Result<void> writePacket(hid_device* device_handle, std::span<const uint8_t> command) const
    +    {
    +#ifdef _WIN32
    +        std::vector<uint8_t> packet;
    +        packet.reserve(command.size() + 1);
    +        packet.push_back(0x00);
    +        packet.insert(packet.end(), command.begin(), command.end());
    +        return writeHID(device_handle, packet);
    +#else
    +        return writeHID(device_handle, command);
    +#endif
    +    }
    +
    +    // Same as the base class helper, but sends through writePacket()
    +    template <typename T>
    +    Result<void> sendCommandWithSave(hid_device* device_handle, const T& command, bool save_after = true) const
    +    {
    +        std::array<uint8_t, PACKET_SIZE_31> data {};
    +        std::copy_n(command.begin(), std::min(command.size(), data.size()), data.begin());
    +
    +        if (auto result = writePacket(device_handle, data); !result) {
    +            return result.error();
    +        }
    +
    +        if (save_after) {
    +            return saveState(device_handle);
    +        }
    +
    +        return {};
         }
     
         // Override save state for Arctis Pro Wireless
         Result<void> saveState(hid_device* device_handle) const override
         {
             std::array<uint8_t, PACKET_SIZE_31> data { 0x90, 0xAA };
    -        return writeHID(device_handle, data);
    +        return writePacket(device_handle, data);
         }
     
         // Rich Results V2 API
    @@ -62,7 +102,7 @@
         {
             // First check if headset is connected
             std::array<uint8_t, PACKET_SIZE_31> status_request { 0x41, 0xAA };
    -        if (auto result = writeHID(device_handle, status_request); !result) {
    +        if (auto result = writePacket(device_handle, status_request); !result) {
                 return result.error();
             }
     
    @@ -78,7 +118,7 @@
     
             // Now request battery level
             std::array<uint8_t, PACKET_SIZE_31> battery_request { 0x40, 0xAA };
    -        if (auto result = writeHID(device_handle, battery_request); !result) {
    +        if (auto result = writePacket(device_handle, battery_request); !result) {
                 return result.error();
             }
     
    
  5. added a commit that references this issue on Nov 1, 2026
    82e34ef
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions