Skip to content

Fix Arctis Nova 7 battery level misreporting.#507

Open
ashirkov-c-arlo wants to merge 1 commit intoSapd:masterfrom
ashirkov-c-arlo:fix-nova7-battery-status
Open

Fix Arctis Nova 7 battery level misreporting.#507
ashirkov-c-arlo wants to merge 1 commit intoSapd:masterfrom
ashirkov-c-arlo:fix-nova7-battery-status

Conversation

@ashirkov-c-arlo
Copy link
Copy Markdown

Changes made

Fixes battery level misreporting on SteelSeries Arctis Nova 7 headsets by replacing heuristic-based battery protocol detection with deterministic product-ID-based detection.

The Arctis Nova 7 family has two battery reporting protocols:

  • Original/discrete: reports battery as levels 0–4, mapped to 0%/25%/50%/75%/100%

  • Gen 2/percentage: reports battery as a direct 0–100 percentage

Previously, the code guessed which protocol to use at runtime by inspecting the raw battery data bytes (status byte value, battery value > 4). This heuristic had a known edge case: Gen 2 devices at 1–4% battery while charging would be misdetected as discrete-protocol devices, inflating the reported level (e.g. 2% shown as 50%).

Three files changed:

  1. hid_device.hpp — Adds matched_product_id_ field with getter/setter to the base HIDDevice class, so device implementations can know which specific product variant was matched.
  2. device_registry.cpp — Calls setMatchedProductId() when a device is matched during discovery, storing the actual USB product ID on the device instance.
  3. steelseries_arctis_nova_7.hpp — Replaces the heuristic detection with a lookup against a known list of discrete-battery product IDs. If the matched PID is in the list, discrete protocol is used; otherwise, percentage protocol is used. This eliminates the edge-case misreporting entirely.

Checklist

  • [v] I adjusted the README (if needed)
  • [v] For new features in HeadsetControl: I discussed it beforehand in Issues or Discussions and adhered to the wiki

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant