Sam Lantinga
8ba77b35a5
Use the asynchronous HIDAPI rumble code for Nintendo Switch Pro controllers
2020-02-07 11:44:57 -08:00
Sam Lantinga
81256207bd
Update for bug 4923 - Calling SDL_GameControllerRumble() often takes 8 ms
...
meyraud705
Dualshock4 on bluetooth need 78 bytes for the rumble data while SDL_HIDAPI_RumbleRequest can only hold 64 bytes.
'volatile' is not meant for thread synchronization.
The list of rumble request could grow infinitely if user call SDL_JoystickRumble too much. The documentation says "Each call to this function cancels any previous rumble effect", so overwriting pending request seem like a good idea.
2020-02-07 11:02:34 -08:00
Sam Lantinga
1d1a35ef64
Fixed Visual Studio build
2020-02-04 16:05:39 -08:00
Sam Lantinga
1bd120266f
Added SDL_hidapi_rumble.c to the macOS, iOS and tvOS builds
2020-02-04 15:42:49 -08:00
Sam Lantinga
02108cf7e5
Added missing files from previous commit
2020-02-04 15:27:25 -08:00
Sam Lantinga
1684606fdf
Fixed long delay on main thread caused by blocking rumble writes in HIDAPI drivers
...
There is now a thread that handles all HIDAPI rumble requests and a lock that guarantees that we're not reading and writing the device at the same time.
2020-02-04 15:26:56 -08:00
Sam Lantinga
6efebf1768
Moved rumble expiration to the main joystick handling level, and prevent sending the driver layer duplicate rumble requests.
2020-02-04 12:48:53 -08:00
Sam Lantinga
212609b3f2
Map the right pad on the Steam Controller to the right stick in the game controller API
2020-01-31 14:09:23 -08:00
Sam Lantinga
39a498c940
Build the hidapi framework and weak link it on Mac OS X
2020-01-31 13:09:20 -08:00
Sam Lantinga
91121ee4bb
Weak link the hidapi framework on iOS and tvOS
2020-01-31 10:45:04 -08:00
Sam Lantinga
0641711e9f
Added missing file from previous commit
2020-01-29 20:09:59 -08:00
Sam Lantinga
355f0b54ec
Added support for the Steam Controller on mobile devices
2020-01-29 20:09:11 -08:00
Sam Lantinga
adb53d0b1f
Fixed disabling the Xbox 360 wireless HIDAPI driver
2020-01-26 10:32:39 -08:00
Sam Lantinga
c9f672fde4
Fixed compiler warnings
2020-01-23 22:24:24 -08:00
Sam Lantinga
443bce741b
Added support for the paddles on the Xbox One Elite Series 1 controller
2020-01-22 11:28:35 -08:00
Sam Lantinga
25c88ea903
The Xbox One 0x01 initialization packet is an ack packet
2020-01-20 13:53:40 -08:00
Sam Lantinga
9c3d1602ab
Refactored code so SDL_GetJoystickGameControllerType() is called less during controller detection
2020-01-19 11:43:36 -08:00
Sam Lantinga
43aa1fa9e7
Added support for detecting previously unknown Xbox 360 and Xbox One controllers using the HIDAPI driver with libusb and Android
2020-01-18 11:21:14 -08:00
Sam Lantinga
4e682461cc
Reattach the kernel driver after closing USB controllers
2020-01-17 10:43:14 -08:00
Sam Lantinga
a8780c6a28
Updated copyright date for 2020
2020-01-16 20:49:25 -08:00
Sam Lantinga
c6817a2c19
Added support for the paddles on the Xbox One Elite Series 2 controller
2020-01-16 15:32:41 -08:00
Sam Lantinga
4e1cc124d2
Improved Xbox One controller initialization
2020-01-16 15:32:39 -08:00
Sam Lantinga
669729a8a0
Improved Xbox One controller initialization sequence
...
This sequence works across Microsoft, PowerA, PDP, and HORI controllers.
The newer Microsoft XBox firmware requires synchronizing the rumble sequence number, when SDL sees it after the initial connect
The Razer Wildcat controller requires waiting for init responses before continuing the initialization sequence.
The PDP Battlefield 1 controller takes over a second to be ready for initialization, and if initialization is attempted before then, it will fail.
2020-01-15 22:18:31 -08:00
Sam Lantinga
7775f7cedf
Fixed deadlock in HIDAPI joystick system
2020-01-13 22:05:54 -08:00
Sam Lantinga
3a796d6a58
Free the joystick player index when the joystick is removed
2020-01-13 15:35:54 -08:00
Sam Lantinga
d2cda502cc
Send the full Xbox One controller sequence for Microsoft controllers
...
This switches Bluetooth controllers back into USB report mode for the latest Xbox One S and Xbox One Elite Series 2 firmware
2020-01-12 17:22:24 -08:00
Sam Lantinga
5d28c31548
Only initialize Xbox One controllers once they're ready for initialization (or if they are silent until init)
...
This fixes the Hyperkin Duke Xbox One controller showing the Xbox startup animation every time an SDL application launches
2020-01-09 14:53:34 -08:00
Sam Lantinga
47abe4e3b3
Fixed crash when unplugging a HIDAPI controller
2020-01-09 14:53:30 -08:00
Sam Lantinga
a56aaea139
Fixed handling the 8BitDo M30 in Nintendo Switch mode
2020-01-07 16:47:56 -08:00
Sam Lantinga
4c9628a002
Fixed GameCube controller axis and trigger ranges and X and B button being swapped
2019-12-30 17:56:56 -08:00
Sam Lantinga
a9482a1d60
Added support for the Nintendo GameCube adapter, tested on Steam Link hardware
2019-12-30 09:44:32 -08:00
Zack Middleton
f0cee3edec
Fix shutting down HIDAPI device with multiple joysticks
...
Using Wii U GameCube USB adapter with multiple controllers attached and
restarting SDL input in a game results in extra joysticks with NULL name.
HIDAPI_CleanupDeviceDriver() shut down joysticks by iterating through
device->num_joysticks but each HIDAPI_JoystickDisconnected() decreases
device->num_joysticks and shifts joysticks array down. Resulting in only
half of controllers being shutdown. It worked with only 1 controller
attached though.
Disconnect HIDAPI device joystick 0 until there are none left.
2019-12-22 13:15:11 -08:00
Sam Lantinga
46e1377d49
Automatically assign player indexes to game controllers, and allow changing the player index for game controllers and joysticks.
...
Added the functions SDL_JoystickFromPlayerIndex(), SDL_JoystickSetPlayerIndex(), SDL_GameControllerFromPlayerIndex(), and SDL_GameControllerSetPlayerIndex()
2019-12-20 20:12:03 -08:00
Sam Lantinga
6b76787209
Make sure the Xbox 360 driver doesn't try to talk to the wireless controllers
2019-12-19 21:45:44 -08:00
Sam Lantinga
1db56619de
Fixed rare infinite rumble in HIDAPI controller driver
2019-12-19 18:03:28 -08:00
Sam Lantinga
25bd5070f5
Fixed GameCube rumble
2019-12-19 18:00:08 -08:00
Sam Lantinga
2481ab9340
Fixed compiler warning
2019-12-19 15:58:16 -08:00
Sam Lantinga
fead0b24e1
Added missing files from previous commits
2019-12-19 15:02:12 -08:00
Sam Lantinga
e22e77dadc
Added an untested driver for the Nintendo GameCube adapter, based on code contributed by Ethan Lee
2019-12-19 15:01:35 -08:00
Sam Lantinga
15d30298cf
Added support for wireless Xbox 360 controllers using the HIDAPI driver
2019-12-19 15:01:32 -08:00
Sam Lantinga
e7f7e3f40f
Refactored HIDAPI controller code to support dongles and hubs that dynamically attach controllers
2019-12-19 15:01:30 -08:00
Sam Lantinga
52b6ab2196
Added support for the SteelSeries Stratus Duo
2019-12-16 17:11:23 -08:00
Sam Lantinga
a7ae9175c3
Fixed bug 4898 - No rumble because of integer overflow in SDL_JoystickRumble
...
meyraud705
On a Dualshock 4 controller using hidapi driver, calling SDL_JoystickRumble with a duration too long (SDL_HAPTIC_INFINITY for example) causes the rumble to stop immediately.
This happens because of integer overflow on line 301 of SDL_hidapi_ps4.c
(https://hg.libsdl.org/SDL/file/a3077169ad23/src/joystick/hidapi/SDL_hidapi_ps4.c#l301 ), which sets expiration time in the past.
2019-12-16 10:20:03 -08:00
Sam Lantinga
c2b6d6f9ed
Enable the LED on PowerA Xbox One controllers
2019-12-13 16:12:37 -08:00
Sam Lantinga
0352814a8a
Added general remapping of controller manufacturer
2019-12-13 16:07:25 -08:00
Sam Lantinga
1ac7eabaca
Fixed comment typo
2019-12-12 14:25:02 -08:00
Sam Lantinga
0f52916027
Added custom names for some controllers
2019-12-11 17:47:01 -08:00
Sam Lantinga
e029fdbb38
Shorten "Performance Designed Products" to "PDP"
2019-12-11 17:46:59 -08:00
Sam Lantinga
8b50dcb21b
Use the controller product string instead of hard-coding controller names
2019-12-11 17:46:54 -08:00
Sam Lantinga
3469481ef6
Don't include the manufacturer if it's already included in the product string
2019-12-10 10:00:49 -08:00
Sam Lantinga
82d2c357c3
Fixed rumble after Xbox controller initialization
...
When we initialize the controller it has an internal rumble sequence number, and if our rumble sequence number doesn't match that, rumble won't happen. To fix that we cycle through the range of sequence numbers, and at some point we'll match up with the controller's sequence number and it'll roll forward until it matches our next rumble sequence number.
2019-12-09 16:52:11 -08:00
Sam Lantinga
3d34750ced
The PowerA Mini controller blocks while writing feature reports, so don't try to use the HIDAPI driver for it on Linux
2019-12-09 13:54:05 -08:00
Sam Lantinga
3626506369
Added some missing Xbox controller names
2019-12-09 13:54:03 -08:00
Sam Lantinga
2fd3f756d2
Fixed trying to use the HIDAPI driver for the original Xbox One S Bluetooth controller
2019-11-28 11:44:17 -08:00
Sam Lantinga
4a77613881
Added the full Xbox One Elite Series 2 controller initialization sequence, to start input reports after switching out of Bluetooth mode.
2019-11-27 18:26:57 -08:00
Sam Lantinga
0b863f8a5c
Sorted controller entries by type and VID/PID to more easily find entries in the list
2019-11-27 15:27:19 -08:00
Sam Lantinga
43cb7b3c51
Added support for the Hori Fighting Commander
2019-11-27 12:38:51 -08:00
Sam Lantinga
a76e547477
Added support for the PowerA XB1 Fusion Fight Pad
2019-11-27 12:38:48 -08:00
Sam Lantinga
a5e6b87ce6
Added support for a variant of the PowerA FUSION Pro Controller
2019-11-26 08:35:41 -08:00
Sam Lantinga
f3d95396d6
Added some missing controller names
2019-11-25 15:02:54 -08:00
Sam Lantinga
8243a3e801
Added support for the Hyperkin X91
2019-11-25 15:02:50 -08:00
Sam Lantinga
8e153922e4
This packet didn't end up being needed to initialize input for the Xbox One Elite Series 2 controller
2019-11-22 17:46:30 -08:00
Sam Lantinga
733f25252a
Fixed build
2019-11-22 14:09:24 -08:00
Sam Lantinga
b5aff9d7c3
Added SDL_GameControllerTypeForIndex() and SDL_GameControllerGetType() to return the type of controller attached.
2019-11-22 13:12:12 -08:00
Sam Lantinga
c0650aca21
Added support for the PDP Battlefield One controller
2019-11-21 14:04:48 -08:00
Sam Lantinga
68d8fc5c7b
Added support for the Xbox One Elite Series 2 controller in wired mode
2019-11-18 15:46:13 -08:00
Sam Lantinga
1e24a1514d
Added names for some missing Xbox controllers
2019-11-18 11:51:39 -08:00
Sam Lantinga
144956442d
Added identifiers for the Xbox One Elite Series 2 controller
2019-11-18 11:44:51 -08:00
Sam Lantinga
a9ac9e3865
Don't try to use this driver with the Xbox One S in Bluetooth mode on Linux
2019-11-16 19:58:29 -08:00
Sam Lantinga
9ca5373024
Added support for the Xbox One S controller in Bluetooth mode on Linux
2019-11-16 19:55:53 -08:00
Sam Lantinga
cf33f1f0ef
Added a utility function to simplify the hint handling logic
2019-11-13 21:53:01 -08:00
Sam Lantinga
9a76bebfbc
SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS defaults to true, to match Steam's default behavior
2019-11-13 14:24:48 -08:00
Sam Lantinga
9da4bfc141
Added support for the Power A Nintendo Switch Enhanced Wireless Controller
2019-10-22 10:57:07 -07:00
Sam Lantinga
b3470f04b1
Added the hint SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS to control whether Nintendo Switch controllers use their button labels or button positions for game controller button reporting.
2019-10-17 17:32:47 -07:00
Sam Lantinga
e6ac16ef2f
Added support for third party Nintendo Switch controllers that don't support the full protocol
2019-10-17 16:59:05 -07:00
Sam Lantinga
3b3dbb5adb
Removed unused volume check interval
2019-10-01 08:50:04 -07:00
Sam Lantinga
cbde0ffa3d
The PS4 is ignoring the volume values in the report, so we don't need to fill them in.
2019-09-19 16:50:49 -07:00
Sam Lantinga
c10a87429d
Make sure HIDAPI is initialized whenever we call HIDAPI_IsDevicePresent()
2019-07-31 10:20:37 -07:00
Andrew Eikum
c172f36bf4
joystick: Ensure HIDAPI is initialized before calling it
2019-07-31 11:14:48 -05:00
Sam Lantinga
dc714389f0
Don't call hid_enumerate() if the HIDAPI drivers are all disabled
2019-07-25 15:21:44 -07:00
Sam Lantinga
be6cda9f95
Rolling back GameCube HIDAPI support
...
It causes the HIDAPI devices to always be opened on enumeration, which causes crashes in the Windows drivers when multiple applications are reading and writing at the same time. We can revisit this after 2.0.10 release.
2019-06-19 15:54:21 -07:00
Zack Middleton
56e2b9a4ee
Handle GameCube WaveBird controller differences
...
Make wireless GameCube controllers use unknown power level instead of
wired and don't allow rumble (it doesn't have hardware for it).
2019-06-19 06:43:54 -07:00
Zack Middleton
6f63c1c37f
Make GameCube controllers only rumble if both USB cables are connected
...
The Nintendo USB GameCube Adapter has two USB connectors. Black for data
and grey for additional power for rumble. The Wii U and other software
require both cables to use rumble. The rumble is weaker without the
second USB cable. Other than that I don't know if there is any negative
side affects from using rumble with only one cable.
2019-06-19 06:43:36 -07:00
Sam Lantinga
d97387ccff
Fixed bug 4600 - Dualshock 4 touchpad press is not detectable with SDL_JoystickGetButton
...
Dexter Friedman
When using a Dualshock 4 controller (model numbers CUH-ZCT1U and CUH-ZCT2U), pressing anywhere on the center touchpad does not send an SDL_JOYBUTTONDOWN event. I have verified this with testjoystick:
Repro steps:
1. Plug in a DS4 over USB
2. Compile testjoystick and run: testjoystick.exe 0
3. Press and hold the touchpad. Observe that no lime green box appears
Expected behavior:
A lime green box appears while the touchpad is pressed.
Notes:
I've attached a patch here that works on my PC and produces the expected behavior in testjoystick, for both DS4 model numbers I listed earlier.
If I understand correctly, by exposing this as a joystick button, the gamecontroller API mapping can be modified with a change to gamecontrollerdb.txt in the future.
2019-06-08 14:32:19 -07:00
Zack Middleton
82af42761e
hidapi: Use GameCube adapter controller port for player index
...
The Nintendo USB GameCube adapter has four controller ports. Return
the port number as 0 to 3 from SDL_JoystickGetPlayerIndex() and
SDL_JoystickGetDevicePlayerIndex().
2019-06-08 13:36:59 -07:00
Cameron Gutman
5cb14f4467
Ignore Xbox One S gamepads with older firmware in HIDAPI
...
This older firmware had a different HID report style that we don't support.
2019-04-30 20:37:49 -07:00
Ethan Lee
f07c992bb8
hidapi: Add GCN L/R buttons, just in case someone wants them...
2019-03-17 12:36:40 -04:00
Ethan Lee
c528615626
hidapi: Add support for Wii U/Switch USB GameCube controller adapter.
...
Note that a single USB device is responsible for all 4 joysticks, so a large
rewrite of the DeviceDriver functions was necessary to allow a single device to
produce multiple joysticks.
2019-03-12 20:27:54 -04:00
Sam Lantinga
5e13087b0f
Updated copyright for 2019
2019-01-04 22:01:14 -08:00
Sam Lantinga
14c55ac890
This change looks okay in the general case.
...
If we run into problems where these events aren't dispatched (initialized on a different thread than the main thread?) we may need to create a separate thread to handle device notifications like we do with the windows joystick subsystem.
2018-10-26 20:20:28 -07:00
Ryan C. Gordon
be8ef94f18
hidapi: Don't run a separate event loop for device notifications.
...
Fixes Bugzilla #4286 .
2018-10-26 14:43:39 -04:00
Sam Lantinga
14329256cb
Generalized the XInput user index into a player index
2018-10-25 16:53:14 -07:00
Sam Lantinga
f01cdcedbc
It turns out HIDAPI for Xbox controllers doesn't allow background input, so we won't enable it by default on Windows.
2018-10-05 01:41:59 -07:00
Sam Lantinga
1944556171
Make sure we don't read and write to HIDAPI at the same time, it's not thread-safe on Windows
2018-10-02 20:51:33 -07:00
Ozkan Sezer
fde82e5972
SDL_hidapi_ps4.c: add HAVE_ENDPOINTVOLUME_H check to win32 volume code.
...
this makes it build with my old toolchain with mingw-w64 1.0.10 headers
2018-09-28 14:01:40 +03:00
Sam Lantinga
9aa8a75d26
Fixed building with Xcode 10.0
2018-09-28 01:18:54 -07:00
Sam Lantinga
f964ce03b4
Fixed mingw-w64 build
2018-09-28 01:00:47 -07:00
Ozkan Sezer
870c44bfed
safer this way, just in case..
2018-09-25 09:20:56 +03:00
Sam Lantinga
cd90e2ca58
Fixed bug 4267 - linkage failure with --enable-hidapi because of missing libudev symbols
...
Ozkan Sezer
hidapi dynamic udev initial patch
2018-09-24 16:33:14 -07:00
Sam Lantinga
d07fe7ad95
Removed button logging message
2018-09-21 09:41:21 -07:00
Sam Lantinga
e8b0859f17
Added missing call to WindowsDeleteString()
2018-09-20 15:55:52 -07:00
Sam Lantinga
600126c90e
Added experimental support for Windows.Gaming.Input
2018-09-19 10:03:40 -07:00
Sam Lantinga
6a7b0c27af
Fixed crash launching under Steam on Mac OS X
2018-09-14 12:41:29 -07:00
Ozkan Sezer
33381d3d10
hidapi/SDL_hidapijoystick.c: fix build in C90 mode:
...
src/joystick/hidapi/SDL_hidapijoystick.c: In function 'HIDAPI_InitializeDiscovery':
src/joystick/hidapi/SDL_hidapijoystick.c:281: error: 'true' undeclared (first use in this function)
src/joystick/hidapi/SDL_hidapijoystick.c:281: error: (Each undeclared identifier is reported only once
src/joystick/hidapi/SDL_hidapijoystick.c:281: error: for each function it appears in.)
src/joystick/hidapi/SDL_hidapijoystick.c: In function 'HIDAPI_UpdateDiscovery':
src/joystick/hidapi/SDL_hidapijoystick.c:339: error: 'true' undeclared (first use in this function)
src/joystick/hidapi/SDL_hidapijoystick.c:341: error: ISO C90 forbids mixed declarations and code
2018-09-07 11:03:24 +03:00
Sam Lantinga
80021c21b6
Speculatively disable rumble on the Razer Panthera Evo, which doesn't have rumble motors and probably hangs in the same way the Panthera does.
2018-09-05 15:28:06 -07:00
Sam Lantinga
c152e380be
Added support for the Razer Panthera Fightstick
...
Fixed bindings for the Mad Catz FightStick TE S+
2018-09-05 11:18:50 -07:00
Sam Lantinga
34237b80f4
Better fix to make sure we're only returning controllers from the HIDAPI joystick API
2018-08-31 18:10:21 -07:00
Sam Lantinga
5ef8eb49be
Don't show the Razer Raiju sound interface as a game controller
2018-08-29 20:55:02 -07:00
Sam Lantinga
207428b444
Don't rumble Bluetooth PS4 controllers by default, as that switches the controller into extended input report mode, which breaks games that use DirectInput.
2018-08-29 20:23:39 -07:00
Sam Lantinga
16ccff3c56
Fixed whitespace
2018-08-29 20:23:36 -07:00
Sam Lantinga
fda14741ac
Fixed Xbox One S Bluetooth support on Mac OS X
2018-08-29 18:56:54 -07:00
Ozkan Sezer
90454b1ece
SDL_hidapi_ps4.c: define NTDDI_VISTA / _WIN32_WINNT_VISTA if not defined
...
it still needs a Vista or newer Platform SDK to build, though.
2018-08-16 11:01:02 +03:00
Sam Lantinga
7d3a7ef827
Use a single hint for both Xbox 360 and Xbox One controllers, since they are often the same driver.
2018-08-15 23:35:54 -07:00
Sam Lantinga
a2add1f683
Use the HIDAPI driver for Xbox controllers on Windows, and determine the XInput mapping at runtime for extended functionality like rumble and guide button.
2018-08-15 23:14:45 -07:00
Sam Lantinga
3f5ff751fe
Use a unified name list for Xbox 360 and Xbox One controllers for drivers that can handle both
2018-08-15 23:14:43 -07:00
Sam Lantinga
aad340eb86
Added Windows Xbox controller state packet handling, for completeness.
2018-08-15 19:53:36 -07:00
Sam Lantinga
63107524f6
Fixed input from the Steam Virtual Gamepad on Mac OS X
2018-08-15 19:53:34 -07:00
Sam Lantinga
0903e83553
Use SDL specific window class to avoid conflicting with Steam
2018-08-15 19:53:31 -07:00
Sam Lantinga
c88666580e
Catch device removal as well as device arrival on Windows
2018-08-15 19:53:30 -07:00
Sam Lantinga
641c674f2a
Turned off debug messages
2018-08-15 19:53:28 -07:00
Sam Lantinga
51902010c6
Remove the HIDAPI device if we get a read error from it
...
This fixes detecting PS4 controller disconnect on Mac OS X, where there isn't any device removed notification
2018-08-15 19:53:26 -07:00
Sam Lantinga
dfbd7f65a9
Fixed Mac OS X build
2018-08-15 19:53:24 -07:00
Sam Lantinga
ec74c318b9
Polling hid_enumerate() every 3 seconds causes freezes and stutters on some USB audio devices and mice.
...
We'll only enumerate devices when we get notification that the system devices have changed
2018-08-15 19:53:22 -07:00
Ozkan Sezer
a7c3d2af81
SDL_hidapi_ps4.c: lowercase windows header names.
2018-08-10 11:50:55 +03:00
Sam Lantinga
31b0224397
Added notes that this code was contributed by Valve
2018-08-09 16:04:45 -07:00
Sam Lantinga
ab07ce1166
Don't update the device list for devices we know aren't supported
...
This should reduce HID enumeration (hitting the USB bus) if for some reason we're getting spammed with false device insert/removal events
2018-08-09 16:04:30 -07:00
Sam Lantinga
888bf1af69
Worked around bug with Sony PS Now PS3 controller where DirectInput polling will continue to return success after the controller is unplugged.
...
The code is now reliant on SDL_PrivateJoystickAdded() and SDL_PrivateJoystickRemoved() being called correctly when devices are added or removed on Windows
2018-08-09 16:03:50 -07:00
Sam Lantinga
d2042e1ed4
Added HIDAPI joystick drivers for more consistent support for Xbox, PS4 and Nintendo Switch Pro controller support across platforms.
...
Added SDL_GameControllerRumble() and SDL_JoystickRumble() for simple force feedback outside of the SDL haptics API
2018-08-09 16:00:17 -07:00