Commit Graph

1762 Commits

Author SHA1 Message Date
Sam Lantinga
fa189d302e Added the Victrix Pro FS for PS4/PS5 to the controller list 2023-08-07 14:04:34 -07:00
Sam Lantinga
26205b659d Fixed PS4/PS5 touchpad for third party controllers
We should always report touchpad and battery status if they are available. We just want to make sure we don't enable enhanced reports unless the application wants that behavior.
2023-08-07 10:48:52 -07:00
Sam Lantinga
99b0e31788 The Steam Controller D-Pad is only pressed when the button is pressed down 2023-08-03 13:07:51 -07:00
Sam Lantinga
06bea1eb55 Added a gamepad mapping for the G-Shark GS-GP702
Fixes https://github.com/libsdl-org/SDL/issues/8068
2023-08-02 14:35:39 -07:00
Mathieu Eyraud
0500fca00c Add missing break 2023-07-29 10:29:00 -04:00
Sam Lantinga
3174d0b970 Sorted controller list 2023-07-27 12:48:15 -07:00
Max Maisel
27b8abb056 Add Steam Deck controller mapping to database.
This adds support for the back paddles, and the "..." key
which are not automatically detected.
* "Back" is mapped to the top left "two windows" key.
* "Start" is mapped to the top right "hambuger menu" key.
* "Guide" is mapped to the "Steam" key.
* The "..." key is just a generic button.

When looking at the screen, paddles are number
* P1: Top right
* P2: Top left
* P3: Bottom right
* P4: Botom Left

The new controller mapping was created with the SDL3 gamepadmap tool.
2023-07-27 12:46:47 -07:00
Sam Lantinga
3c8f4dca1d Make sure we don't touch the controller effects state when we're in auto mode for PS4/PS5 controllers. 2023-07-24 10:17:02 -07:00
Sam Lantinga
58e3084477 The Flydigi Vader and Apex series controllers all have the same VID, PID, and name 2023-07-19 09:22:01 -07:00
Sam Lantinga
e413457a7e Fixed clearing the mapping in testcontroller 2023-07-18 22:10:44 -07:00
Sam Lantinga
85eb1fa515 Fixed double-comma if the crc is first in the mapping 2023-07-18 17:32:46 -07:00
Sam Lantinga
c0e0f47755 Make sure there are commas in gamepad mapping strings 2023-07-18 17:11:02 -07:00
Sam Lantinga
7aec9ad4a6 Make sure the mapping string doesn't have extraneous whitespace
If that whitespace is extra newlines in the mapping hint, we would create extra empty mapping strings
2023-07-18 13:25:47 -07:00
Sam Lantinga
9db2cb3513 Added SDL_ReloadGamepadMappings() to reset the SDL gamepad mappings 2023-07-18 12:50:10 -07:00
Sam Lantinga
75e7a6fcfa SDL_AddGamepadMappingsFromFile() has been made into a real function 2023-07-18 12:05:04 -07:00
Sam Lantinga
dfc6e8825e Improved reliability of gamepad message ordering
The gamepad vs joystick events always happen in this order:
SDL_EVENT_JOYSTICK_ADDED
SDL_EVENT_GAMEPAD_ADDED
SDL_EVENT_GAMEPAD_REMAPPED
SDL_EVENT_GAMEPAD_REMOVED
SDL_EVENT_JOYSTICK_REMOVED

Whenever a mapping is changed, any controller affected by that mapping will generate a gamepad event. You will only get one SDL_EVENT_GAMEPAD_REMAPPED event per controller per batch of mapping changes, where SDL_AddGamepadMappingsFromFile() and SDL_AddGamepadMapping() are each a batch of changes.
2023-07-18 11:52:56 -07:00
Sam Lantinga
ccefce8321 Send gamepad and joystick removed events when quitting
This helps applications do proper cleanup when reinitializing gamepads, e.g. to reset controller mappings
2023-07-18 09:01:14 -07:00
rfht
4d63c919f9 simplify OpenBSD D-pad calculation with bitwise operation (#7996) 2023-07-17 19:01:23 -07:00
Sam Lantinga
2ebbfe7c5b Added an "auto" mode for PS4 and PS5 controller rumble hints
This allows the controllers to report that they have sensors and enhanced capabilities, but not actually switch into enhanced mode (breaking DirectInput) unless the application tries to use them.
2023-07-17 17:32:57 -07:00
Sam Lantinga
bd4f155bbb Fixed LED pending check failing when the controller timestamp is very large
In this case we know the controller has been on for a while and the Bluetooth connection LED cycle is complete.

Also fixed the timestamp being zero the first time it is checked
2023-07-17 17:08:17 -07:00
Sam Lantinga
16dd5f0da4 Don't send k_EPS5FeatureReportIdCapabilities to Sony PS5 controllers
This report is for third party controllers only.
2023-07-17 16:45:31 -07:00
Sam Lantinga
2fef0be2f6 Don't tickle Bluetooth PS5 controllers in simple mode with an effects packet
That will put the PS5 controller into enhanced mode, which breaks DirectInput games
2023-07-17 16:42:58 -07:00
Sam Lantinga
b271e92c6e Added the ability to specify a gamepad type in the mapping
Also renamed most cases of SDL_GAMEPAD_TYPE_UNKNOWN to SDL_GAMEPAD_TYPE_STANDARD, and SDL_GetGamepadType() will return SDL_GAMEPAD_TYPE_UNKNOWN only if the gamepad is invalid.
2023-07-17 12:59:56 -07:00
Sam Lantinga
f3fe579cf0 Sort the entries in the controller mapping 2023-07-16 15:57:32 -07:00
Sam Lantinga
5388edd549 Removed Flydigi Vader 2 mappings
Many of the Flydigi controllers use the same VID/PID and have different mappings, so let's revisit this once we have more data.
2023-07-16 04:32:12 -07:00
Sam Lantinga
57cfd1e106 Removed SDL_GAMEPAD_TYPE_VIRTUAL, SDL_GAMEPAD_TYPE_AMAZON_LUNA, SDL_GAMEPAD_TYPE_GOOGLE_STADIA, and SDL_GAMEPAD_TYPE_NVIDIA_SHIELD
Removing SDL_GAMEPAD_TYPE_VIRTUAL allows a virtual controller to emulate another gamepad type. The other controller types can be treated as generic controllers by applications without special glyph or functionality treatment.
2023-07-16 04:32:12 -07:00
Sam Lantinga
538292c1da Revert "More than one binding might trigger a gamepad button"
This reverts commit 6251504ac8aeb632cba5c9bb3502ad3628bc1bb3.

This is added CPU cost for a use case that was never supported. testcontroller will explicitly clear any previous binding, so I'm backing this out until there is a good use case.
2023-07-16 04:32:12 -07:00
Sam Lantinga
0bcd9944a3 More than one binding might trigger a gamepad button 2023-07-16 04:32:12 -07:00
Sam Lantinga
b40fb5c51e Fixed getting the CRC of virtual joysticks without a VID/PID 2023-07-16 04:32:12 -07:00
Sam Lantinga
a1615dea85 Added SDL_SetGamepadMapping() to set the mapping for a specific device 2023-07-16 04:32:12 -07:00
Sam Lantinga
eb0955ef89 Removed SDL_GamepadBinding from the API
The text format is more expressive and widely used than the binary structure
2023-07-16 04:32:12 -07:00
Sam Lantinga
1903d7b1bf RAWINPUT_RegisterNotifications() should return int, for consistency 2023-07-11 10:50:43 -07:00
Sam Lantinga
41882a1acb Improved RAWINPUT <-> XInput/WGI device correlation
If there is only one controller slot available, assume that's the one matching new RAWINPUt devices. This will be right most of the time, and uncorrelation will fix any bad guesses.
2023-07-11 10:20:08 -07:00
Sam Lantinga
dfc5e6964e Fixed crash if RAWINPUT is not initialized
We shouldn't be doing any of this work in that case
2023-07-11 10:20:08 -07:00
Sam Lantinga
2e3404db01 Added SDL_GetGamepadPowerLevel() to get the power level directly from a gamepad 2023-07-11 10:20:08 -07:00
Sam Lantinga
3cbf16b944 Added SDL_GetGamepadInstanceID() 2023-07-10 19:13:42 -07:00
Sam Lantinga
49b9fd1843 Don't send k_ePS4FeatureReportIdSerialNumber to Bluetooth PS4 controllers
This isn't supported over Bluetooth and might be causing issues with fake PS4 controllers.

Note that this change should NOT be ported to SDL2, as device->is_bluetooth is not set from hidapi there and is only detected by seeing which reports are valid.

Reference https://github.com/libsdl-org/SDL/issues/7960
2023-07-10 09:37:20 -07:00
Sam Lantinga
092a4b780c Don't send k_ePS4FeatureReportIdCapabilities to Sony PS4 controllers
This report is for third party controllers only, and might be causing issues with fake PS4 controllers.

Reference https://github.com/libsdl-org/SDL/issues/7960
2023-07-10 09:37:20 -07:00
Sam Lantinga
80e1c75e1c Re-added mappings for older Xbox One controllers on Linux
The xpad kernel driver doesn't know about these controllers and ends up using BTN_C and BTN_Z and the automatic mapping doesn't work correctly.

It turns out VID 0x045e and PID 0x02e0 is used by the 8BitDo SN30 Pro when connecting via Bluetooth in XInput mode.

Fixes https://github.com/libsdl-org/SDL/issues/7925
2023-07-09 09:50:26 -07:00
Sam Lantinga
ea60da5b94 Fixed mapping BTN_TR2 to right trigger 2023-07-08 18:18:22 -07:00
Sam Lantinga
cd97e3a833 Fixed clang Windows build 2023-07-08 14:10:08 -07:00
Sam Lantinga
a29aac603b Quiet warning when using older buggy WGI headers 2023-07-08 13:28:22 -07:00
Sam Lantinga
7d894dc1c9 Fixed build warnings 2023-07-08 11:16:40 -07:00
Sam Lantinga
f047e178b6 Added WGI gamepad added/removed listeners for RAWINPUT
This fixes WGI correlation on startup when the WGI gamepad list isn't populated yet
2023-07-08 10:24:00 -07:00
Sam Lantinga
3a654b4b1c Added the hint SDL_HINT_JOYSTICK_WGI to control whether to use Windows.Gaming.Input for controllers 2023-07-08 09:32:24 -07:00
Mathieu Eyraud
a4f3905bb6 Fix uninitialised variable 2023-07-08 08:36:36 -07:00
Sam Lantinga
efed24850a Don't tickle Bluetooth PS4 controllers in simple mode with an effects packet
That will put the PS4 controller into enhanced mode, which breaks DirectInput games
2023-07-07 15:56:54 -07:00
Sam Lantinga
785f57eb91 Lazily initialize the WGI gamepad support
Initializing "Windows.Gaming.Input.Gamepad" will put Bluetooth PS4 controllers into enhanced report mode, which breaks any game using DirectInput. Let's wait to do this until absolutely necessary.
2023-07-07 15:56:54 -07:00
Mathieu Eyraud
bcf239e413 Improve sensor detection for Linux gamepad v2
Detecting by name such as "Accelerometer and "Motion Sensor" may be too broad.
Sensors on Dualshock and Switch gamepad are correctly detected by SDL_EVDEV_GuessDeviceClass(). 
Use vendor and product ID for Wii extension controls.
2023-07-07 10:57:45 -07:00
Sam Lantinga
ed6dc1cc05 Prefer using XInput for rumble over WGI, as it allows rumble in the background
(cherry picked from commit e16a83d393)
2023-07-07 09:48:58 -07:00