Skip to content

Add support for the Xbox 360 "Big Button" wireless receiver - #16246

Merged
flibitijibibo merged 1 commit into
libsdl-org:mainfrom
flibitijibibo:bigbutton
Sep 7, 2026
Merged

Add support for the Xbox 360 "Big Button" wireless receiver#16246
flibitijibibo merged 1 commit into
libsdl-org:mainfrom
flibitijibibo:bigbutton

Conversation

@flibitijibibo

@flibitijibibo flibitijibibo commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator
  • I confirm that I am the author of this code and release it to the SDL project under the zlib license. This contribution does not contain code from other sources, including code generated by a Large Language Model ("AI").

Here's one for the history books:

Since FNA first started using SDL2, we've always mapped the Guide button to something XNA calls "BigButton":

https://github.com/FNA-XNA/FNA/blob/master/src/Input/Buttons.cs

Coming in without an XBLIG background, I was like, "oh, this is probably just the name for Guide... maybe it didn't have a name yet internally or something?" It's not like there's a Guide button in the XNA enum, so sure, it's gotta be the big button in the center of the controller, right?

How foolish I was: As it turns out, there is in fact a special button called the Big Button, and it's only found on this exact controller bundled with the Xbox version of Scene It (and Trivial Pursuit I think?):

image

The codename? "Big Button Controller". Oh.

This also explains this value we have in our gamepad type enum:

https://github.com/FNA-XNA/FNA/blob/master/src/Input/GamePadType.cs#L56

Unfortunately there are no Windows drivers, and we're still digging up an XBLIG dev setup to be sure, but we're now pretty confident that we've been advertising the wrong button for ~13 years. Woops!

This adds support for the Big Button receiver via libusb, and is confirmed working on Linux with a udev rule:

ValveSoftware/steam-devices#91

It's pretty straightforward, except that it only sends packets when a button is down, so I had to come up with a crude timer to send button release events when nothing is being pressed.

Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated
@slouken

slouken commented Sep 6, 2026

Copy link
Copy Markdown
Collaborator

In general this looks good. A few comments:

  • We don't need a separate hint for this, it can be lumped in with the Xbox 360 hint
  • The convention is to represent the D-pad as a hat
  • How common is this controller? Is it worth adding a whole new driver for it?

@flibitijibibo

Copy link
Copy Markdown
Collaborator Author
* The convention is to represent the D-pad as a hat

Will fix in the next revision

* We don't need a separate hint for this, it can be lumped in with the Xbox 360 hint
* How common is this controller? Is it worth adding a whole new driver for it?

It's not super common, but it's enough to where I'll want to keep this around on my end for any 360 games that made use of this. The driver itself is really easy to support, but if we're worried about broad support it might be worth having the separate hint, but unlike the other 360 hints this could be disabled by default.

@slouken

slouken commented Sep 6, 2026

Copy link
Copy Markdown
Collaborator
* The convention is to represent the D-pad as a hat

Will fix in the next revision

* We don't need a separate hint for this, it can be lumped in with the Xbox 360 hint
* How common is this controller? Is it worth adding a whole new driver for it?

It's not super common, but it's enough to where I'll want to keep this around on my end for any 360 games that made use of this. The driver itself is really easy to support, but if we're worried about broad support it might be worth having the separate hint, but unlike the other 360 hints this could be disabled by default.

Okay, fair enough. Let's just leave it gated by the existing 360 hint.

@flibitijibibo

Copy link
Copy Markdown
Collaborator Author

Latest revision removes the hint and moves the directional buttons to a hat.

Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated
@flibitijibibo
flibitijibibo force-pushed the bigbutton branch 2 times, most recently from d2cb558 to 2a4eefd Compare September 7, 2026 04:55
@flibitijibibo

Copy link
Copy Markdown
Collaborator Author

Latest push cleans up the reordering a bit, was mostly working from my phone today... confirmed hat/ordering changes work as intended with the hardware.

Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated
Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated
Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated
Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c
Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated
@flibitijibibo

Copy link
Copy Markdown
Collaborator Author

Latest revision makes use of the SDL_GAMEPAD_BUTTON_ constants, including the enum Sam suggested. Note that back/guide/start got shuffled around, so the gamepad mapping got updated as well.

Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c
Comment thread src/joystick/hidapi/SDL_hidapi_xbox360bb.c Outdated

@slouken slouken left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

@flibitijibibo

Copy link
Copy Markdown
Collaborator Author

Latest push just squashes into one commit, thanks for looking at this Sam!

@flibitijibibo
flibitijibibo merged commit 6083940 into libsdl-org:main Sep 7, 2026
1 check passed
@flibitijibibo
flibitijibibo deleted the bigbutton branch September 7, 2026 21:30
@slouken

slouken commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Latest push just squashes into one commit, thanks for looking at this Sam!

You're welcome!

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