Sapd / HeadsetControl

Sidetone and Battery status for Logitech G930, G533, G633, G933 SteelSeries Arctis 7/PRO 2019 and Corsair VOID (Pro) in Linux and MacOSX
GNU General Public License v3.0
1.46k stars 178 forks source link

Arctis 7 Pro - Battery Charge Level alway at 56% #347

Open dmatta22201 opened 6 months ago

dmatta22201 commented 6 months ago

Description

I am having an issue in which the Arctis 7 Pro is always reported with a battery charge of 56%, regardless of actual battery level. Running

headsetcontrol --dev -- --device 0x1038:0x12ad --send 0x06,0x18 --receive

The response is consistently:

0x06 0x18 0x38 ...

where the ... is 6 bytes whose values vary, followed by a bunch of zero value bytes.

Looking at /devices/steelseries_arctis_7.c in the arctis_7_request_battery function, it looks like it is setting the battery level to the third byte...

    int bat = data_read[2];

    info.status = BATTERY_AVAILABLE;

    if (bat > 100)
        info.level = 100;
    else
        info.level = bat;

However the third byte is always 0x38 (decimal 56).

I am not sure how to interpret the next 6 bytes returned. Rerunning the command every 30 seconds or so produced the following:

0000 0000 0000 0000 0000 0000
0000 0xff 0000 0x06 0xc0 0000
0000 0xff 0000  0x06 0xc0 0000
0000 0xff 0000  0x06 0xc0 0xc0

Does anyone have a reference of what these bytes are and if they relate to battery levels?

Headset Name

Steelseries Arctis 7/Pro

On which OS does the problem happen?

Linux

Device information

Detailed Device Information ``` Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xc Usageid: 0x1 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff43 Usageid: 0x202 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0x1 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xa Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0x22 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xa Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0x22 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xa Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0x22 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xa Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0x22 Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xa Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xc Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0x1 Usageid: 0x3a Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0xff00 Usageid: 0xc Device Found VendorID: 0x1038 ProductID: 0x12ad path: /dev/hidraw0 serial_number: Manufacturer: SteelSeries Product: SteelSeries Arctis 7 Interface: 5 Usage-Page: 0x1 Usageid: 0x3a ```
ChrisLauinger77 commented 1 week ago

I am on Debian trixie (testing) => up-to-date

I updated from a Arctis 7 (USC-A) to Arctis 7+ (USB-C) Since then the battery level is reported as 50 for me. The indicator light on the headset is yellow (below 50%) I use self-compiled latest version from master. (I tried also with release from 1st april - same result) When the headset is turned off - it reports -1 (with the old one it reported 0)

{
  "name": "HeadsetControl",
  "version": "3.0.0-23-gc0c9b50",
  "api_version": "1.2",
  "hidapi_version": "0.14.0",
  "device_count": 1,
  "devices": [
    {
      "status": "success",
      "device": "SteelSeries Arctis 7+",
      "vendor": "SteelSeries",
      "product": "Arctis 7+",
      "id_vendor": "0x1038",
      "id_product": "0x220e",
      "capabilities": [
        "CAP_SIDETONE", 
        "CAP_BATTERY_STATUS", 
        "CAP_INACTIVE_TIME", 
        "CAP_CHATMIX_STATUS", 
        "CAP_EQUALIZER_PRESET", 
        "CAP_EQUALIZER"
      ],
      "capabilities_str": [
        "sidetone", 
        "battery", 
        "inactive time", 
        "chatmix", 
        "equalizer preset", 
        "equalizer"
      ],
      "battery": {
        "status": "BATTERY_AVAILABLE",
        "level": 50
      },
      "equalizer": {
        "bands": 10,
        "baseline": 0,
        "step": 0.5,
        "min": -12,
        "max": 12
      },
      "chatmix": 64
    }
  ]
}
ChrisLauinger77 commented 1 week ago

I charged it to 100% - now it shows also 100 Lets see If it stuck at 50 again as soon as its discharged ...

{
  "name": "HeadsetControl",
  "version": "3.0.0-23-gc0c9b50",
  "api_version": "1.2",
  "hidapi_version": "0.14.0",
  "device_count": 1,
  "devices": [
    {
      "status": "success",
      "device": "SteelSeries Arctis 7+",
      "vendor": "SteelSeries",
      "product": "Arctis 7+",
      "id_vendor": "0x1038",
      "id_product": "0x220e",
      "capabilities": [
        "CAP_SIDETONE", 
        "CAP_BATTERY_STATUS", 
        "CAP_INACTIVE_TIME", 
        "CAP_CHATMIX_STATUS", 
        "CAP_EQUALIZER_PRESET", 
        "CAP_EQUALIZER"
      ],
      "capabilities_str": [
        "sidetone", 
        "battery", 
        "inactive time", 
        "chatmix", 
        "equalizer preset", 
        "equalizer"
      ],
      "battery": {
        "status": "BATTERY_AVAILABLE",
        "level": 100
      },
      "equalizer": {
        "bands": 10,
        "baseline": 0,
        "step": 0.5,
        "min": -12,
        "max": 12
      },
      "chatmix": 64
    }
  ]
}
ChrisLauinger77 commented 1 week ago

I monitored this a little and to me it looks like the battery % is updated only in 25% steps. I get 100% - a while later 75% and then 50%. Before I reach 25% I charge it. The LED indicator is green at 100, 75 and 50 and below 50 turns yellow though. Any debug info I could add here ? Please advise.