Commit Graph

2590 Commits

Author SHA1 Message Date
Nintorch
60a59fa557 Include OS detection in Emscripten joystick GUID
This PR modifies the Emscripten joystick backend to detect the user's OS and store its ID in the GUID, because different OSes might need different mappings for the same controllers.
I'm not sure if different browsers on the same OS can also have different mappings, but if they can, browser detection can be added to the GUID too if needed.

This PR also makes the GUID use `SDL_HARDWARE_BUS_USB` instead of `SDL_HARDWARE_BUS_UNKNOWN`, similarly to how Android and MFI backends always use `SDL_HARDWARE_BUS_BLUETOOTH` and GameInput, XInput, and RawInput backends always use `SDL_HARDWARE_BUS_USB`.
2026-04-21 07:35:28 -10:00
Nintorch
651136ac7a Add trigger rumble support to Emscripten joysticks
This PR adds trigger rumble support to the Emscripten joystick backend.
2026-04-21 10:13:07 -04:00
atiradonet
3b89c7b537 joystick: Add VIRPIL Controls flight stick and throttle device IDs. (#15418)
VIRPIL Controls (VID 0x3344) flight sticks are misclassified as
gamepads by SDL's axis-count heuristic because they report exactly
6 axes, matching SDL_GAMEPAD_AXIS_COUNT. Adding them to the
appropriate device lists ensures correct classification.

Tested on Linux (Fedora 43, kernel 6.19) with:
- R-VPC Stick MT-50CM3 (PID 0x4391) -> SDL_JOYSTICK_TYPE_FLIGHT_STICK
- L-VPC Stick MT-50CM3 (PID 0x8390) -> SDL_JOYSTICK_TYPE_FLIGHT_STICK
- VPC VMAX Prime Throttle (PID 0x0196) -> SDL_JOYSTICK_TYPE_THROTTLE
2026-04-20 09:04:24 -07:00
Nintorch
4aa0a6e2bf Fix Oklick W-2 support
This PR maps buttons 7 and 8 to paddles 2 (left) and 1 (right) respectively, and it also duplicates the mapping but for crc 0x2004, since the CRC of this controller changes if it was hotplugged.
2026-04-10 10:56:16 -07:00
Ozkan Sezer
f61a22e10f SDL_hidapi_zuiki.c: silence bogus -Warray-bounds warnings from gcc-4.9 2026-04-07 06:45:10 +03:00
Nintorch
c857861815 Add support for Oklick W-2 racing wheel controller
This PR adds the proper mapping for this racing wheel controller to comply with XInput documentation (mostly to treat the pedals as the trigger axes).
2026-04-04 10:30:57 -07:00
Sam Lantinga
41c3a91079 Use the correct index for PS2 controllers
Closes https://github.com/libsdl-org/SDL/pull/15294
2026-04-03 16:08:36 -07:00
Sanjay Govind
7f86f9107d Add support for GIP guitars via gameinput (#15301) 2026-04-03 16:02:14 -07:00
foxtacles
59602fb473 (emscripten) Add null checks for gamepad in vendor/product/xinput helpers (#15313)
navigator.getGamepads() can return null for a slot if the gamepad
disconnects between the gamepadconnected event and the proxied
MAIN_THREAD_EM_ASM_INT call. This causes a TypeError when accessing
gamepad.id. Add null guards matching the pattern already used in
EMSCRIPTEN_JoystickOpen and EMSCRIPTEN_JoystickRumble.
2026-04-03 15:07:50 -07:00
Christian Semmler
be8643f739 emscripten: Fix navigator.getGamepads crash in worker threads
The three EM_JS functions (SDL_GetEmscriptenJoystickVendor,
SDL_GetEmscriptenJoystickProduct, SDL_IsEmscriptenJoystickXInput)
call navigator.getGamepads() which is only available on the main
browser thread. With PROXY_TO_PTHREAD, the joystick callbacks are
dispatched to a worker where the Gamepad API is not available,
causing a TypeError.

Convert these from EM_JS to static functions using
MAIN_THREAD_EM_ASM_INT, which proxies the JavaScript execution to
the main browser thread. This matches the pattern already used by
other navigator.getGamepads() calls in the same file.
2026-04-02 19:36:01 -07:00
Sanjay Govind
c58a61fdd4 Update to GameInput V3 (#15302) 2026-04-02 17:10:42 -07:00
Janne Virtala
b5ef75249f SDL_PrivateJoystickForceRecentering(): fix infinite loop 2026-04-02 09:27:18 -07:00
Sam Lantinga
8e1bdbaa92 Updated support for the GameSir Pro 8K
The latest firmware (v1.97) corrects the report frequency, and no longer reports the mute button.
2026-03-31 11:18:03 -07:00
Sam Lantinga
75dead7f96 Minor cleanup 2026-03-17 09:49:15 -07:00
Sanjay Govind
fdc5efe1cb add vids and pids for a variety of xbox 360 devices (#15211)
Added vids for a variety of xbox 360 devices, mostly for linux use.
Corrected wheel vid and pid being flagged as unknown. Internally, when XUSB is building vid and pids for wireless devices, it assigns 0x02a1 for devices with subtype 1 and 0x02a2 for devices with subtype 2, which are wheels.

Some of these vids and pids do rely on the following patch being merged into the linux kernel, as I have overhauled how VID and PIDs are handled there for wireless devices.
https://patchwork.kernel.org/project/linux-input/patch/20260314075034.1488655-2-sanjay.govind9@gmail.com/

Also added some lists for guitar and drum devices, so we can set controller types correctly for those controllers.
2026-03-17 09:45:26 -07:00
Steel
32cf5fe93d Add support for PXN VD6 Wheelbase 2026-03-16 10:51:06 -07:00
Sam Lantinga
69e94a4fbd Fixed warning: no previous prototype for function 'SDL_IsJoystickGameInput' 2026-03-13 17:23:54 -07:00
Rachel Blackman
ba00e772a7 Add second-gen Backbone One to recognized controllers. 2026-03-13 15:39:15 -07:00
Sam Lantinga
11adfd2008 Disable system gesture state for all GCControllers
Technically we only want to do this for controllers that are opened, but we don't have a way to match up controllers using other APIs with individual GCControllers.
2026-03-12 08:34:34 -07:00
Sam Lantinga
b80b466423 Removed redundant ifdef 2026-03-12 08:29:47 -07:00
Nintorch
419dcfe747 Fallback for non-gamepad controllers in GameInput
This PR makes the GameInput joystick backend ignore non-gamepad controllers if DirectInput or XInput backends are enabled. This is done to prevent possible bugs and/or regressions.
2026-03-10 11:06:10 -07:00
Nintorch
0138843eb7 Small GameInput joystick backend improvements
This PR includes small improvements to the GameInput joystick backend:
- Device subtypes
- Compatibility with DirectInput joystick mappings (if the controller is not a gamepad, i.e. `GAMEINPUT_InternalIsGamepad()` returns `false`)
- Fallback to DirectInput/XInput for currently unsupported devices (force feedback ones and the ones that are neither gamepads nor controllers, I'm not sure if that's possible, but maybe racing wheels and other device subtypes would count?)
2026-03-09 11:12:00 -07:00
Sanjay Govind
101273f429 extract capabilities for 360 controllers over libusb (#15183)
Read capabilities when using xinput controllers via the libusb backend

This gives us access to the subtype on linux and macOS, and gives us a lot of data we can use for handling more detailed device types when I look into a unified api for exposing instrument data later.
2026-03-08 17:29:56 -07:00
Sanjay Govind
e610b85d1c support batteries on 3rd party controllers 2026-03-08 11:40:35 -07:00
Sanjay Govind
94f17d6c61 Add support for whammy and tilt on PS4/5 guitars
PS4/5 controllers put device specific data into a specific region in the report, so we have to extract it separately.

No known guitars use the right stick on the guitar, so to keep things working similarly to PS3, i have opted to map whammy and tilt the same way as the PS3 rb guitars.
2026-03-08 11:35:57 -07:00
Sanjay Govind
34378609bb fix off by one with tilt on ps3 guitars (#15144) 2026-03-02 09:45:44 -08:00
Brenton Bostick
3ac4e684ab make sure #endif comment matches the macro name 2026-02-28 08:43:42 -08:00
Sam Lantinga
f600c74c80 Don't enable extended features for GameSir controllers over Bluetooth 2026-02-26 09:18:07 -08:00
Sam Lantinga
170e3a81d8 Fixed the GameSir-G7 Pro 8K button mapping 2026-02-26 09:18:07 -08:00
Sam Lantinga
7775bbef9f Fixed the GameSir-G7 Pro 8K accelerometer scale 2026-02-26 09:18:07 -08:00
Sam Lantinga
862e1e8600 Fixed the GameSir-G7 Pro 8K sensor rate
The reports are delivered at 250 Hz both wired and via the wireless dongle.
2026-02-26 09:18:07 -08:00
zuiki_inn
29ca920fdf Add ZUIKI EVOTOP controller support with gyroscope and accelerometer sensor capabilities. (#15034) 2026-02-25 20:24:29 -08:00
Sam Lantinga
49a8b4229b Added battery status for newer FlyDigi controllers 2026-02-24 20:49:45 -08:00
Sanjay Govind
0c859452ef Support accelerometers on 3rd party ps3 controllers (#15109) 2026-02-24 18:58:13 -08:00
Sanjay Govind
a7ccd48957 Set joystick_type for known ps3/wii instruments (#15111) 2026-02-24 17:26:46 -08:00
Sanjay Govind
1419bcb6cb deal with controllers that don't have report ids 2026-02-24 15:18:53 -08:00
Sanjay Govind
0e4008441f Fix up controller types for various playstation and wii instruments (#15104) 2026-02-24 13:35:45 -08:00
Sam Lantinga
2385dc6297 Added support for the Flydigi Vader 5 Pro in Xbox 360 mode 2026-02-24 10:18:17 -08:00
Vicki Pfau
8a1684fbbc Support SL/SR on Switch 2 controllers, but only in mini-controller mode
It doesn't really make sense to support these in combined mode since they're usually occluded.
2026-02-24 06:52:32 -08:00
tmkk
bbcc205de9 Detect steam virtual gamepads more accurately on macOS 2026-02-22 11:11:09 -08:00
tmkk
50d0e2ede2 Bring back support for 360Controller driver on macOS 2026-02-22 11:11:09 -08:00
Sam Lantinga
67c2f61068 Support an alternate GameSir report format 2026-02-20 09:44:14 -08:00
Ryan C. Gordon
c728e2f044 emscripten: Move some EM_ASM blocks to MAIN_THREAD_EM_ASM.
These blocks reference the `navigator` global, which is not available in
background threads.
2026-02-20 10:27:44 -05:00
Sam Lantinga
129627068f Fixed HIDAPI PS5 Bluetooth report format 2026-02-17 08:57:06 -08:00
DominusExult
225fb12ae1 Hide deprecation message for controllerPausedHandler (which is still needed for backwards compatibility) 2026-02-15 10:57:07 -08:00
Sam Lantinga
79f5f674bd Use the correct report format for BLE Steam Controller reports 2026-02-12 16:02:21 -08:00
Sam Lantinga
0b1c592fda Steam Controller report 0x45 is used for BLE mode 2026-02-12 15:45:10 -08:00
Sam Lantinga
84c21cf970 Updated Steam Controller packet handling 2026-02-12 14:34:20 -08:00
Sam Lantinga
2b484a1ccb Fixed initializing the PowerA Fusion Pro 4 on Steam Link hardware 2026-02-11 16:54:18 -08:00
chenzw
85c297a28b Added IMU support for GameSir controllers with optimized sampling rate and timestamp synchronization. 2026-02-10 21:06:40 -08:00