Skip to content

Xbox One profile incorrectly rejects battery state updates #107

Description

@ReenigneArcher

Problem

The Xbox One virtual gamepad profile currently advertises that battery state is unsupported, even though its HID descriptor and input-report format can represent battery strength.

make_xbox_gip_profile() sets supports_battery from include_share_button. Xbox One passes false, while Xbox Series passes true, unintentionally coupling battery support to the presence of the Share button.

As a result:

  • profiles::xbox_one().capabilities.supports_battery is false.
  • gamepad_profile_support() reports no battery support.
  • GamepadStateAdapter::set_battery() and clear_battery() reject Xbox One with unsupported_profile.

However, both Xbox One and Xbox Series:

  • use the 17-byte GIP-shaped input report;
  • include the Generic Device Controls Battery Strength input in their HID descriptors; and
  • write normalized battery strength to byte 16 in pack_xbox_gip_input_report().

Expected behavior

The Xbox One profile should advertise battery support independently of Share-button support, and consumers such as Sunshine should be able to submit the client controller battery percentage through the normal adapter API.

Proposed direction

  • Decouple supports_battery from include_share_button in make_xbox_gip_profile().
  • Advertise battery support for both Xbox One and Xbox Series profiles.
  • Add explicit profile-support and adapter tests for Xbox One battery updates.
  • Exercise Xbox One report packing with a non-default battery percentage.
  • Verify on a Windows host that a consumer can observe the reported battery level.
  • Update the end-user compatibility table after the behavior is verified.

Acceptance criteria

  • profiles::xbox_one() reports supports_battery == true.
  • GamepadStateAdapter::set_battery() and clear_battery() succeed for Xbox One.
  • The configured battery percentage is present in byte 16 of the Xbox One input report.
  • Existing Xbox Series battery behavior remains unchanged.
  • Automated tests cover the capability and report behavior.

Metadata

Metadata

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions