kc3-lang/SDL/src/joystick/darwin

Branch :


Log

Author Commit Date CI Message
120c76c8 2022-01-03 09:40:00 Updated copyright for 2022
afccabb8 2021-11-11 12:12:05 joystick: Add capability flags for rumble and trigger rumble When API limitations force us to guess, we favor a false positive (reporting support when it doesn't exist) compared to a false negative.
1ccfbf96 2021-11-11 11:13:08 joystick: Convert HasLED() into a generic GetCapabilities() function
d135c076 2021-07-08 13:22:41 Added SDL_GameControllerSendEffect() and SDL_JoystickSendEffect() to allow applications to send custom effects to the PS4 and PS5 controllers See testgamecontroller.c for an example of a custom PS5 trigger effect
bdc6e4ff 2021-01-14 15:03:11 Fixed bug 5195 - Replugging in "mixed" controller types crashes on macOS RustyM This is related to Bug 5034, but crashes under a somewhat different condition. In the latest tip (changeset 13914) or with the SDL 2.0.12 source + David?s 5034 patch, unplugging and then replugging in certain controller types on macOS will crash. A mix of new controllers like Switch Pro, PS4 and Xbox One all work without issue. But if a controller without a rumble function, like many SNES retro USB gamepads, is mixed with a PS4 or Switch Pro controller it will crash. File: joystick/darwin/SDL_sysjoystick.c Function: static recDevice *FreeDevice(recDevice *removeDevice) On line 159: while (device->pNext != removeDevice) { Causes: Thread 1: EXC_BAD_ACCESS (code=1, address=0x188) This can be reproduced in testgamecontroller" by starting the test program with both a ?retro? controller plugged in and a ?modern rumble? controller (Switch Pro/PS4). This may crash on launch, but it depends on which controller ends up as device 0. If it doesn?t crash, unplug the ?modern rumble? controller and plug it back in. Some of the "retro" controllers I?ve seen this crash with: - iBuffalo SNES Controller - 8Bitdo SN30 Gamepad (in MacOS mode) - Retrolink NES Controller - HuiJia SNES Controller Adaptor The issue appears macOS specific. Seen on 10.12.6 and 10.14.6. Not seen on Windows 10. The while loop in FreeDevice() assumes that every device is not NULL. recDevice *device = gpDeviceList; while (device->pNext != removeDevice) { device = device->pNext; } device->pNext = pDeviceNext; So maybe we should check for NULL here? Or instead prevent adding NULL devices to the list in the first place? Checking device for NULL before entering the loop appears to work. recDevice *device = gpDeviceList; if (!device) { while (device->pNext != removeDevice) { device = device->pNext; } } device->pNext = pDeviceNext;
9130f7c3 2021-01-02 10:25:38 Updated copyright for 2021
6a7f29cd 2020-11-25 11:31:17 Fixed compiling on tvOS
e4b7d9a2 2020-11-24 07:56:59 Removed usage of TARGET_OS_OSX for building with older SDKs
97782e6c 2020-11-24 07:11:49 Don't try to call IOS_SupportedHIDDevice() if it's not defined
fd894467 2020-11-21 14:13:26 Fixed building on Mac OS X on the command line and with an older macOS SDK
1df593fb 2020-11-21 13:15:33 Fixed bug 5355 - Add GameController Framework support to macOS C.W. Betts This patch adds support to the GameController framework on macOS Big Sur and later, adding support for MFi controllers as well as rumble support for PS4 and Xbox One. There is some code to make sure that the IOKit joystick handler doesn't include two controllers at once. While the GameController framework is present in earlier versions of macOS, there was no public, approved way of checking if a specific IOHIDDevice is a controller that GameController could handle. This was changed in Big Sur.
fcb21aa8 2020-11-17 10:30:20 Added API for sensors on game controllers Added support for the PS4 controller gyro and accelerometer on iOS and HIDAPI drivers Also fixed an issue with the accelerometer on iOS having inverted axes
1e2caac5 2020-11-11 18:57:37 Added SDL_JoystickRumbleTriggers() and SDL_GameControllerRumbleTriggers()
e555d453 2020-11-05 11:07:54 Added SDL_JoystickHasLED Currently, this is only supported by the PS4 HIDAPI driver.
345b4d7e 2020-05-29 13:37:21 Fixed bug 5161 - Autodetect controller mappings based on the Linux Gamepad Specification Jan Bujak I wrote a new driver for my gamepad on Linux. I'd like SDL to support it out-of-box, as currently it just treats it as a generic joystick instead of a gamepad. From what I can see the only way to do that is to either 1) pick one of the already supported controllers' PID, VID and button layouts and have my driver send that (effectively lying that it's something else), or 2) submit a preconfigured, hardcoded mapping to SDL. Both of those, in my opinion, are silly when we already have the Linux Gamepad Specification which standarizes this: https://www.kernel.org/doc/html/v4.15/input/gamepad.html Unfortunately SDL doesn't make use of it currently. So I've took it upon myself to add it; patch is in the attachments. Basically what the patch does is that if SDL finds no built-it controller mappings for a given joystick it then asks the joystick backend to autodetect it, and that uses the relevant evdev bits to figure out which button/axis is which. (See the specs for more details.) With this patch applied my own driver for my controller works out-of-box with SDL with no extra configuration and is correctly recognized as a gamepad; this is also going to be the case for any other driver which follows the Linux Gamepad Specification.
83cddd2e 2020-04-30 11:57:29 Add SDL_JoystickSetLED. Currently, this is only supported by the PS4 HIDAPI driver.
8c165add 2020-04-07 23:17:27 joystick: Remove force_centering flag; we handle this on disconnect now.
7e5340c5 2020-03-17 17:34:24 Fix for Bug 5034 - Replugging in a controller crashes on macOS in SDL 2.0.12 This is a multi-part fix, and is the 2nd attempt at a fix for Bug 5034. Here are the problems being addressed: 1. On macOS 10.14.x and earlier, trying to call IOHIDDeviceUnscheduleFromRunLoop without a prior, paired call to IOHIDDeviceScheduleWithRunLoop, appears to lead to a crash. A per-device flag has been added to make sure that these calls are paired. 2. DARWIN_JoystickDetect was free'ing its SDL_joystick's hwdata field (via FreeDevice) without setting it to NULL, and DARWIN_JoystickRumble wasn't checking for a NULL hwdata. FreeDevice will now set hwdata to NULL and DARWIN_JoystickRumble will check for a NULL hwdata.
36d58451 2020-03-17 02:31:47 Backout prior fix for Bug 5034, which needs more research This backs-out the change, https://hg.libsdl.org/SDL/rev/14c961903135
197b14de 2020-03-16 19:24:25 Fixed Bug 5034 - Replugging in a controller crashes on macOS in SDL 2.0.12 The Darwin/macOS joystick driver was freeing its joystick's hwdata field without zeroing it out in any live instance of SDL_Joystick.
5722e884 2020-03-12 19:49:33 Fixed build warnings
c44473ba 2020-03-12 19:47:30 Unified code to standardize joystick names
d88f3f52 2020-02-05 13:16:17 macOS: fix crash if and when joystick-init-on-add fails
6efebf17 2020-02-04 12:48:53 Moved rumble expiration to the main joystick handling level, and prevent sending the driver layer duplicate rumble requests.
65fd6336 2020-01-30 18:03:34 FIX for SDL-4927: CFRetain+CFRelease a game controller's IOKit object This fixes a crash whereby SDL could crash on macOS/Darwin, if and when a USB game controller gets unplugged. SDL was not retaining a reference to the controller's OS/IOKit-provided 'device object', and was capable of trying to use it, after a device was hot-unplugged.
059de38c 2020-01-27 15:44:48 darwin: Don't pass NULL device refs to IOHIDDeviceGetValue(). Possibly fixes Bugzilla #4961.
a8780c6a 2020-01-16 20:49:25 Updated copyright date for 2020
46e1377d 2019-12-20 20:12:03 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()
20daf54f 2019-12-19 15:18:50 Added new HIDAPI driver files to the Xcode projects
55f8eabf 2019-12-13 16:12:33 Identified the BDA XB1 Classic Controller
23c39a2e 2019-12-12 19:14:37 Strip trailing whitespace on controller manufacturer identification
0f529160 2019-12-11 17:47:01 Added custom names for some controllers
a21f6b7a 2019-12-10 11:46:22 Add the manufacturer to the joystick name on Mac OS X, for consistency with other drivers
9da4bfc1 2019-10-22 10:57:07 Added support for the Power A Nintendo Switch Enhanced Wireless Controller
5e13087b 2019-01-04 22:01:14 Updated copyright for 2019
14329256 2018-10-25 16:53:14 Generalized the XInput user index into a player index
63107524 2018-08-15 19:53:34 Fixed input from the Steam Virtual Gamepad on Mac OS X
888bf1af 2018-08-09 16:03:50 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
d2042e1e 2018-08-09 16:00:17 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
2b441ec6 2018-02-05 11:40:39 SDL Changes to support clean reads CR: saml
e3cc5b2c 2018-01-03 10:03:25 Updated copyright for 2018
c49fa37c 2017-08-09 11:59:29 Added SDL hints to filter the set of game controllers reported by SDL
ca89d9b5 2017-01-25 22:22:05 Darwin: fix detection of Xbox One S controller Firmware revision 3.1.1221.0 changes the mapping of the Xbox One S controller in Bluetooth mode. Aside from changing the layout of other buttons, this revision also changes the triggers to act as Accelerator and Brake axes from the simulation controls page. The Darwin sysjoystick code didn't previously map anything at these axes, making it impossible to detect input on these two buttons.
61a3ba30 2017-01-07 17:09:14 Replaced a few single-line "//" comments.
082132a7 2017-01-03 23:39:28 Fixed binding the D-pad on some Super NES style controllers Fixed a case where partial trigger pull could be bound to another button There is a fundamental problem not resolved by this commit: Some controllers have axes (triggers, pedals, etc.) that don't start at zero, but we're guaranteed that if we get a value that it's correct. For these controllers, the current code works, where we take the first value we get and use that as the zero point and generate axis motion starting from that point on. Other controllers have digital axes (D-pad) that assume a zero starting point, and the first value we get is the min or max axis value when the D-pad is moved. For these controllers, the current code thinks that the zero point is the axis value after the D-pad motion and this doesn't work. My hypothesis is that the first class of devices is more common and that we should solve for that, and add an exception to SDL_JoystickAxesCenteredAtZero() as needed for the second class of devices.
45b774e3 2017-01-01 18:33:28 Updated copyright for 2017
4fc0fe1f 2016-12-23 02:23:44 Removed debug print statements
ad26769c 2016-12-22 18:43:00 Fixed compile errors on various platforms
97aa5775 2016-11-16 22:08:51 Fixed empty parameter list in signatures of internal functions.
801a9eaf 2016-11-11 04:06:00 Updated Mac OS X game controller support
ac74e16c 2016-11-10 17:19:34 Standardized the format of the SDL joystick GUID and added functions to retrieve the USB VID/PID from a joystick and game controller.
ad1bfea5 2016-08-26 12:18:08 Added SDL_PrivateJoystickAdded() and SDL_PrivateJoystickRemoved() Updated the removal code to iterate over all joystick add messages instead of just the first one.
8097f272 2016-08-08 12:17:53 [ OSX ] enables Xbox One S Guide (System Main Menu) button detection. the one possible impact is that since button identifiers on OSX are just their sequence in the HID report descriptor we might change the button order, and any existing/saved mappings may get their order changed.
4a468739 2016-05-21 00:20:52 Removed Mac OS 10.5 support (bug #3137). Also fixed a warning about deprecated Carbon code when using SDL_audio (bug #3127, thanks Dominik!)
42065e78 2016-01-02 10:10:34 Updated copyright to 2016
4ae69e32 2015-12-28 15:44:09 Mac: expose joystick buttons that report themselves as having 'Start' and 'Select' HID usages. I don't know if any joysticks report those usages for any buttons in practice, but other prominent Mac gaming software exposes them, so we might as well too.
9c51c4a6 2015-11-12 22:44:32 Mac: Detect the d-pad and pause buttons on Steelseries MFi gamepads (bug #3124.)
76fc3788 2015-09-14 22:44:20 Fixed the header guard in the darwin SDL_sysjoystick_c.h file.
4295a6fe 2015-09-13 11:29:45 Mac: Fixed off-by-one bug when plugging in a joystick (thanks, Konstantin!).
0e45984f 2015-06-21 17:33:46 Fixed crash if initialization of EGL failed but was tried again later. The internal function SDL_EGL_LoadLibrary() did not delete and remove a mostly uninitialized data structure if loading the library first failed. A later try to use EGL then skipped initialization and assumed it was previously successful because the data structure now already existed. This led to at least one crash in the internal function SDL_EGL_ChooseConfig() because a NULL pointer was dereferenced to make a call to eglBindAPI().
d1980b93 2015-05-26 12:52:28 Mac: Fix compiler warning when building with a min target >= 10.6.
52306459 2015-05-26 08:52:02 Fixed bug 2869 - Controllers connected on launch are reported twice. Since all device detection/removal happens on the main thread now, post events inline with when the status changes occur. Also fixed rare cases when joystick API functions could return data about removed joysticks when called with a device index.
2c4a6ea0 2015-05-26 06:27:46 Updated the copyright year to 2015
b72938c8 2015-04-20 12:22:44 Windows: Always set the system timer resolution to 1ms by default. An existing hint lets apps that don't need the timer resolution changed avoid this, to save battery, etc, but this fixes several problems in timing, audio callbacks not firing fast enough, etc. Fixes Bugzilla #2944.
fe6c797c 2015-04-10 23:30:31 Fixed an iOS view orientation issue when SDL_GL_CreateContext or SDL_CreateRenderer is called.
162ef5ea 2015-03-24 13:52:01 Cleanups in the joystick code. Removed some redundant state and other confusions. Fixes Bugzilla #2738.
4a071b31 2015-03-24 03:24:57 Mac: patched to compile with haptic subsystem disabled (thanks, Rodrigo!). Fixes Bugzilla #2717.
da843f6a 2015-03-11 21:14:21 Updated internal documentation comments.
d34d608e 2015-03-02 11:43:24 SDL - fix crash on OSX when removing a device. If the remove happened due to the CFRunLoopRunInMode call in SDL_SYS_JoystickDetect then we would delete the device right away, before SDL_SYS_JoystickUpdate could clean it up. So move the CFRunLoopRunInMode to after the cleanup logic, preventing this case. This does mean that adds and removes of joysticks now take 1 extra frame to show up.
20186815 2015-02-19 23:52:10 Mac OS X: Better way to stop duplicate joystick reports (thanks, Kyungdahm!). Fixes Bugzilla #2822.
b88ca1b4 2015-02-10 16:28:56 the last parameter of XChangeProperty is the number of elements.. and when the element format is 32.. the element is "long" so we have 5 long elements here. Yes this seems confusing as on mac+linux Long is either 32 or 64bits depending on the architecture, but this is how the X11 protocol is defined. Thus 5 is the correct value for the nelts here. Not 5 or 10 depending on the architecture. More info on the confusion https://bugs.freedesktop.org/show_bug.cgi?id=16802
b48e54aa 2015-01-26 22:00:29 Fixed bug 2802 - [patch] Fix android build compiling in wrong filesystem implementation Jonas Kulla The configure script didn't differentiate between Linux and Android, unconditionally compiling in the unix implementation of SDL_sysfilesystem.c. I'm probably one of the very few people building SDL for android using classic configure + standalone toolchain, so this has gone undetected all along.
70438be2 2014-12-03 10:55:23 WinRT: fixed bug whereby SDL would override an app's default orientation WinRT apps can set a default, preferred orientation via a .appxmanifest file. SDL was overriding this on app startup, and making the app use all possible orientations (landscape and portrait). Thanks to Eric Wing for the heads up on this!
9c398852 2014-11-22 22:20:40 Corrected header file documentation comment.
24c86b55 2014-09-11 19:24:42 [X11] Reconcile logical keyboard state with physical state on FocusIn since the window system doesn't do it for us like other platforms. This prevents sticky keys and missed keys when going in and out of focus, for example Alt would appear to stick if switching away from an SDL app with Alt-Tab and had to be pressed again. CR: Sam
724d24d9 2014-08-31 11:21:10 Mac: Don't add the same joystick twice if IOKit reports a duplicate device. Fixes Bugzilla #2704.
fc4e798d 2014-07-07 12:48:25 Fixed bug 2631 - Mac: minor code cleanup Alex Szpakowski Some minor changes to the Mac-specific backend code: - Fixed up some code style issues (mostly brace style inconsistencies). - Fixed a compiler warning in SDL_cocoaevents.m. - Removed some useless code now that the 10.7 SDK is required to build SDL. - Removed Gestalt(gestaltSystemVersion, ...) call and switched to NSAppKitVersionNumber for version checking code. Using Gestalt with gestaltSystemVersion will give 0x1090 in Mac OS 10.10+, and the whole Gestalt function was deprecated in Mac OS 10.8.
446d19c4 2014-06-14 23:31:23 Removed SDL_SYS_JoystickNeedsPolling(). It was simpler to just have the polling (actually: hotplug detection) functions return immediately if it's not an appropriate time to poll. Note that previously, if any joystick/controller was opened, we would poll every time anyhow, skipping this function.
9e5504f8 2014-06-13 14:52:26 Mac: Run the CFRunLoop in joystick mode during SDL_SYS_JoystickNeedsPolling(). This fixes hotplugging failing to detect devices.
8c2c744a 2014-06-13 10:50:24 - fixed crash if you removed a device twice, the deviceRef is invalid if removed from the removed device callback (added in http://hg.libsdl.org/SDL/rev/d4e4d0fcda03 ).
5d7562c7 2014-04-24 23:24:48 Mac OS X: Look for joystick hotplug in its own CFRunLoop. This allows the joystick hotplug to function without the main event loop (specifically: without SDL_INIT_VIDEO), and moves explicit polling for joysticks where it belongs at the low-level: in SDL_SYS_JoystickDetect(). This lets apps call SDL_JoystickUpdate() to get hotplug events and keep SDL_NumJoysticks() correct, as expected. As SDL_PumpEvents() (and SDL_PollEvents, etc) calls SDL_JoystickUpdate(), existing apps will function as before. Thanks to "raskie" on the forums for pointing this out!
3dcb451f 2014-04-09 21:29:19 Added a README file regarding WinRT support To note, this file is currently formatted with CRLF line endings, rather than LF, to allow the file to be viewed with Notepad.
96f09df7 2014-02-23 01:24:46 Free the correct variable.
b67b970d 2014-02-22 21:15:34 Mac joystick: ignore duplicate HID elements. The DualShock 4 has all elements listed twice: once in the top-level list of elements, and once in an "Application Collection" element at the top-level. Each element has a proper cookie with a unique value, so now we descend into each element collections, but before we add an element to the device's list, we make sure we don't already have one with that cookie, probably from another collection or a buggy device.
0deb54c0 2014-02-22 00:55:28 Reworked Mac OS X joystick code to use the 10.5+ HID Manager API. Besides being a little more simple to use than the earlier IOKit HID API, and less likely to be deprecated, it also has the added benefit of working with the Sony DualShock 4 controller in Bluetooth mode out of the box, whereas the previous API has a bug that makes it report bad data for the controller. Cleaned up several other things in this code, having gone over every line of it. The remaining deprecated calls are also gone.
7f942688 2014-02-05 01:02:09 Cleanup some vi footer comments, rename new PRIVATE_* funcs to MacHaptic_*.
b352698d 2014-02-04 18:17:16 Implement new backend methods for haptic and hot plugging on OS X
58edac3e 2014-02-02 00:53:27 Fixed bug 2374 - Update copyright for 2014... Is it that time already??
f848adff 2013-11-29 10:06:08 Improve Android pause/resume behavior.
7e1289af 2013-11-24 23:56:17 Make internal SDL sources include SDL_internal.h instead of SDL_config.h The new header will include SDL_config.h, but allows for other global stuff.
b30e396b 2013-11-10 17:56:07 Fixed bug 1965 - Mac: dead code for supporting OS 10.4 Alex Szpakowski The new patch removes all the truly obsolete code I could find. I tested on OS 10.8 and OS 10.5.
cca09422 2013-10-06 20:39:23 Only allocate a joystick instance ID once we know it's a joystick. This fixes compatibility with code that assumes 0 based joystick instance IDs.
5f8de2b9 2013-08-21 10:27:39 Patched to compile on Darwin
695344d1 2013-08-21 09:43:09 OCD fixes: Adds a space before */
dad42067 2013-08-12 11:13:50 Fixes #2022, do not resume on Android when surfaceChanged If the app is in landscape mode and the user presses the power button, a pause is followed immediately by a surfaceChanged event because the lock screen is shown in portrait mode. This triggers a "false" resume. So, we just pause and resume following the onWindowFocusChanged events. Also, wait for SDL_APP_WILLENTERBACKGROUND and SDL_APP_DIDENTERBACKGROUND before blocking the event pump.
1ad936eb 2013-08-11 19:56:43 Fixed bug 2027 - Full-screen appears to be broken - hang in SDL_DestroyWindow() Rainer Deyke I'm running Linux Mint 15 with the Cinnamon window manager. SDL_DestroyWindow consistently locks up for me when the window if fullscreen.