Skip to content

Keep pads on Apple's Xbox 360 driver next to Xbox One pads - #236

Open
ScriptType wants to merge 1 commit into
NotProtonNot:mainfrom
ScriptType:xbox360-driver-sdl-hint
Open

ScriptType wants to merge 1 commit into
NotProtonNot:mainfrom
ScriptType:xbox360-driver-sdl-hint

Conversation

@ScriptType

@ScriptType ScriptType commented Oct 21, 2026 •

Copy link
Copy Markdown

I have a Flydigi APEX 4. On its 2.4 GHz dongle it doesn't work in games if an Xbox Series controller is also connected over Bluetooth at launch. The Flydigi gets dropped then. That's why the run script now sets SDL_JOYSTICK_HIDAPI_XBOX_ONE=0. This should also help similar controllers.

Details

  • On the dongle, macOS sees the Flydigi as an Xbox 360 pad (045e:028e) on Apple's own driver (Xbox360Gamepad). The other pad is an Xbox Series controller on Bluetooth (045e:0b13).
  • Tested in Go-Go Town! (2195120). Only the Series pad works in game. Steam itself shows both pads fine, and the Flydigi works when connected over Bluetooth instead of the dongle.
  • In the prefix, XInput and Windows.Gaming.Input only list 0b13. With +hid tracing, Wine's SDL backend never adds the Flydigi. SDL can only reach a pad on Apple's 360 driver through GameController, and it drops it there while an Xbox One/Series pad is on its HIDAPI driver.
  • With SDL_JOYSTICK_HIDAPI_XBOX_ONE=0, both pads show up in XInput and WGI. SDL_HIDAPI_IGNORE_DEVICES=0x045e/0x0b13 works too, but it breaks again the other way round once the Flydigi itself is on Bluetooth (HIDAPI).
  • The run script now sets the variable only when a pad on Apple's 360 driver (ioreg -n Xbox360Gamepad) is connected at launch, leaves it alone if the user set it in the launch options, and logs a line to notproton-run.log. A pad plugged in after launch isn't covered.
  • runcheck, seedcheck, envcheck, buildcheck, settingscheck, routecheck, bridgecheck, gamedrivecheck, launchercheck and compatcheck pass.
  • Not tested: rumble and the Xbox button with the Series pad going through GameController. I also don't have an 8BitDo or similar dongle in Xbox 360 mode to check.

The first paragraph is mine, written in German and translated with Claude. The details were added by Claude from our debugging session.

🤖 Generated with Claude Code

SDL reaches a pad on Apple's Xbox 360 driver (wired 360 pads, 360 mode
dongles) only through GameController, and drops it there while an Xbox
One/Series pad is on its HIDAPI driver. Set SDL_JOYSTICK_HIDAPI_XBOX_ONE=0
when such a pad is connected at launch, unless the user set it already.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@NotProtonNot

NotProtonNot commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

Thank you. I have plans to fix a bunch of outstanding controller issues, plans for the near future. I'll review this once I start that - soon! This week.

@ScriptType

ScriptType commented Oct 21, 2026 •

Copy link
Copy Markdown
Author

Nice, as mostly this is a SDL bug i opened there also a bug report maybe they fix it.

(the fix here is only a workaround against the sdl bug)
for others in the startoptions of a game you can set

SDL_JOYSTICK_HIDAPI_XBOX_ONE=0 %command%

which is a workaround :)

libsdl-org/SDL#16566
Posting the issue here for tracking :).

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.

2 participants