src/haptic


Log

Author Commit Date CI Message
Sam Lantinga 3f1fd5ab 2023-05-23T10:59:03 Updated source to match SDL function prototype style
Sam Lantinga 0d763800 2023-03-09T15:10:00 Code style: changed "sizeof foo" to "sizeof(foo)" (thanks @sezero!) (cherry picked from commit c6443d86c92e962683a1efe5f123a144988875b5)
Sylvain 17515f4a 2023-02-04T15:51:37 Backport simplify flags PR #7220
Sam Lantinga 0479df53 2023-01-09T09:48:21 Updated copyright for 2023
Sam Lantinga d59caffe 2022-12-13T14:03:40 Added support for clang thread-safety analysis The annotations have been added to SDL_mutex.h and have been made public so applications can enable this for their own code. Clang assumes that locking and unlocking can't fail, but SDL has the concept of a NULL mutex, so the mutex functions have been changed not to report errors if a mutex hasn't been initialized. We do have mutexes that might be accessed when they are NULL, notably in the event system, so this is an important change. This commit cleans up a bunch of rare race conditions in the joystick and game controller code so now everything should be completely protected by the joystick lock. To test this, change the compiler to "clang -Wthread-safety -Werror=thread-safety -DSDL_THREAD_SAFETY_ANALYSIS"
Ozkan Sezer b990e914 2022-12-02T02:13:59 build fixes after d0bbfdbfb881e5407911d84c12899bd5b442a130
Pierre Wendling d0bbfdbf 2022-12-01T16:07:03 Clang-Tidy fixes (#6725) (cherry picked from commit 3c501b963dd8f0605a6ce7978882df39ba76f9cd)
Sam Lantinga b8d85c69 2022-11-30T12:51:59 Update for SDL3 coding style (#6717) I updated .clang-format and ran clang-format 14 over the src and test directories to standardize the code base. In general I let clang-format have it's way, and added markup to prevent formatting of code that would break or be completely unreadable if formatted. The script I ran for the src directory is added as build-scripts/clang-format-src.sh This fixes: #6592 #6593 #6594 (cherry picked from commit 5750bcb174300011b91d1de20edb288fcca70f8c)
Sam Lantinga 2d24baaa 2022-11-29T09:26:29 Fixed building on Windows with SDL_VIDEO=OFF Fixes https://github.com/libsdl-org/SDL/issues/6562
Sylvain Becker fb0ce375 2022-11-27T17:38:43 Cleanup add brace (#6545) * Add braces after if conditions * More add braces after if conditions * Add braces after while() conditions * Fix compilation because of macro being modified * Add braces to for loop * Add braces after if/goto * Move comments up * Remove extra () in the 'return ...;' statements * More remove extra () in the 'return ...;' statements * More remove extra () in the 'return ...;' statements after merge * Fix inconsistent patterns are xxx == NULL vs !xxx * More "{}" for "if() break;" and "if() continue;" * More "{}" after if() short statement * More "{}" after "if () return;" statement * More fix inconsistent patterns are xxx == NULL vs !xxx * Revert some modificaion on SDL_RLEaccel.c * SDL_RLEaccel: no short statement * Cleanup 'if' where the bracket is in a new line * Cleanup 'while' where the bracket is in a new line * Cleanup 'for' where the bracket is in a new line * Cleanup 'else' where the bracket is in a new line (cherry picked from commit 6a2200823c66e53bd3cda4a25f0206b834392652 to reduce conflicts merging between SDL2 and SDL3)
Ryan C. Gordon bb0b8ada 2022-11-16T22:02:21 mac: Fix handling of deprecated symbol. This needs to check what our deployment target is, not what SDK is available, since this is a linker symbol and not an enum value or whatever. Also removed a copy/paste error that mentioned CoreAudio in the haptic subsystem. Fixes #6534.
Ryan C. Gordon 9d67686a 2022-11-16T10:08:40 haptic: Deal with deprecated macOS symbol.
chalonverse f317d619 2022-07-01T13:59:14 Xbox GDKX support (#5869) * Xbox GDK support (14 squashed commits) * Added basic keyboard testing * Update readme * Code review fixes * Fixed issue where controller add/removal wasn't working (since the device notification events don't work on Xbox, have to use the joystick thread to poll XInput)
Jade Macho 6a2e6c82 2022-06-28T21:03:16 Add SDL_HINT_DIRECTINPUT_ENABLED (on by default)
pionere 60deadba 2022-01-17T17:22:30 re-use return value of SDL_SetError/WIN_SetErrorFromHRESULT/SDL_OutOfMemory
Sam Lantinga 120c76c8 2022-01-03T09:40:00 Updated copyright for 2022
Cameron Gutman f903a39e 2021-11-27T10:18:41 haptic: Fix SDL_MouseIsHaptic() always returning SDL_TRUE on Android
Sylvain d31251b0 2021-11-21T22:30:48 use SDL's functions version inplace of libc version
Sam Lantinga c2dd50a9 2021-11-12T08:28:02 Fixed whitespace
Cameron Gutman 6b64c47b 2021-11-09T23:45:32 haptics: Enumerate XInput/DInput joysticks after haptic init Since the haptic subsystem is usually initialized after the joystick subsystem, the initial calls to HapticMaybeAddDevice() from inside SDL_JoystickInit() will arrive too early to be handled by the haptic subsystem. We need to add those haptic devices for those already present joysticks ourselves.
Cameron Gutman 715e7bda 2021-11-09T01:43:44 haptic: Don't enumerate joysticks if the joystick subsystem is active The joystick subsystem has complex precedence logic to deal multiple competing backends like XInput, RawInput, and WGI. Let it fire the MaybeAdd callbacks for joystick devices, since it knows which backend will end up managing them. This resolves a situation where the RawInput joystick backend would take control of an XInput device but the XInput haptic backend would still create a haptic device. Since the XInput joystick backend didn't own the underlying joystick device, we'd end up with an orphaned haptic device that didn't work with SDL_HapticOpenFromJoystick() on the associated joystick device.
Sam Lantinga 345c161f 2021-09-22T09:06:45 Fixed some accidental uses of external C runtime functions
Sam Lantinga bf97c5a2 2021-09-08T14:47:40 Make sure SDL file descriptors don't leak into child processes
Dimitriy Ryazantcev a6da2fbf 2021-05-25T12:33:23 Rename haptic methods to avoid confusion with joystick: `SDL_DINPUT_MaybeAddDevice`->`SDL_DINPUT_HapticMaybeAddDevice` `SDL_DINPUT_MaybeRemoveDevice`->`SDL_DINPUT_HapticMaybeRemoveDevice` `SDL_XINPUT_MaybeAddDevice`->`SDL_XINPUT_HapticMaybeAddDevice` `SDL_XINPUT_MaybeRemoveDevice`->`SDL_XINPUT_HapticMaybeRemoveDevice`
Dimitriy Ryazantcev 73dc68a7 2021-05-19T17:52:08 Simplify and cleanup DirectInput joystick backend code: - Do not call IDirectInputDevice8_QueryInterface(device, &IID_IDirectInputDevice8,...) on DIRECTINPUTDEVICE8 device - Get joystick VendorID and ProductID via IDirectInputDevice8_GetProperty(.., DIPROP_VIDPID, ..) call instead of messing with DIDEVICEINSTANCE.guidProduct - Normalize HID device interface path to upper case for stable operation of XInput check - Remove useless RawInput calls in SDL_IsXInputDevice() - just check for "IG_" string in HID device interface path that we already have There shouldn't be any observable behavior changes.
Sam Lantinga 9130f7c3 2021-01-02T10:25:38 Updated copyright for 2021
Sam Lantinga cb361896 2020-12-09T07:16:22 Fixed bug 5235 - All internal sources should include SDL_assert.h Ryan C. Gordon We should really stick this in SDL_internal.h or something so it's always available.
Sam Lantinga fd894467 2020-11-21T14:13:26 Fixed building on Mac OS X on the command line and with an older macOS SDK
Simon McVittie 8db3171b 2020-11-11T19:14:34 udev: Factor out SDL_EVDEV_GuessDeviceClass This works on capability bitfields that can either come from udev or from ioctls, so it is equally applicable to both udev and non-udev input device detection. Signed-off-by: Simon McVittie <smcv@collabora.com>
stfx b1626295 2020-07-08T17:28:34 cmake: Fix building with -DSDL_HAPTIC=Off
stfx efe09359 2020-06-15T10:31:16 Fix compile without DIRECTX
Sam Lantinga cf01ee16 2020-05-27T10:27:04 Fixed building with --disable-joystick on Linux
Sam Lantinga 03a7abf8 2020-05-27T09:57:26 Fixed building with --disable-joystick on macOS
Ryan C. Gordon 68777406 2020-05-20T16:58:33 windows: Fix calls to CoCreateInstance() so last parameter is a LPVOID *.
Sam Lantinga 65ad4534 2020-05-04T13:17:43 Improvement for bug 3446 - The haptic API does not allow to select the direction axes meyraud705 I see how the documentation is confusing. I think that the choice of the axis is an implementation detail. The documentation should state the goal of this value, so I propose this wording: "Use this value to play an effect on the steering wheel axis. This provides better compatibility across platforms and devices as SDL will guess the correct axis." Value could even be renamed 'SDL_HAPTIC_STEERING_AXIS'. For Linux, sending an effect on the X axis with a Logitech wheel works. Others brands don't have driver for Linux as far as I know.
Sam Lantinga 4c22a21e 2020-03-17T14:18:05 Fixed bug 3446 - The haptic API does not allow to select the direction axes meyraud705 Added Linux implementation, otherwise you get "Unsupported direction type" error. Added documentation to explain why one would use SDL_HAPTIC_FIRST_AXIS.
Sam Lantinga 73799917 2020-03-16T13:28:38 Fixed bug 3446 - The haptic API does not allow to select the direction axes Mathieu Laurendeau Consider a device supporting effects on multiple axes. There's currently no way to play effects against a single-axis direction. A device supporting effects against X and Y may not allow to play effects with a two-axis direction coordinate, even if one of the coordinates is null. My current (ugly) work around for this is to add a direction type SDL_HAPTIC_X_FORCE to play effects against a X-axis only direction (patch attached). This issue impacted two GIMX users using the following wheels: - Leo Bodnar SimSteering force feedback wheel - Accuforce direct drive wheel Playing constant/spring/damper effects against a X-axis direction worked well for the first wheel, but not for the second one. A better strategy seems to play the effects against the first axis reported by the DirectInput enumeration. This strategy also works with Logitech wheels (at least the DFGT). It's been more than a year that I have the latest patch (playing effects against the first axis only) in the GIMX software. It's being used by thousands of people, mostly for adapting their FFB wheel to the PS4. I had no report that proves this strategy to be wrong.
Sam Lantinga a8780c6a 2020-01-16T20:49:25 Updated copyright date for 2020
Sam Lantinga 982f8a83 2019-12-22T13:56:50 Fixed bug 4910 - Missing joystick-driver type check in haptic meyraud705 On Linux and MacOS, some haptic system functions access joystick->hw_data without checking the driver type.
Sam Lantinga 5e13087b 2019-01-04T22:01:14 Updated copyright for 2019
Ethan Lee 0b6e24f7 2018-12-06T14:26:18 Linux Haptic: Fix periodic.magnitude value
Sylvain Becker 252dc85e 2018-12-06T09:22:00 Fix warnings detected on Android build
Micha? Janiszewski 91820998 2018-10-28T21:36:48 Add and update include guards Include guards in most changed files were missing, I added them keeping the same style as other SDL files. In some cases I moved the include guards around to be the first thing the header has to take advantage of any possible improvements compiler may have for inclusion guards.
Sam Lantinga b0c48dd9 2018-10-16T08:29:27 Support vibration magnitude on Android 8.0 (thanks Rachel!)
Sam Lantinga 9a98e4b6 2018-10-11T15:14:48 Allow Android haptics to work when SDL is reinitialized (thanks Rachel!)
Sam Lantinga 53260b31 2018-10-08T12:49:23 There are legitimate reasons to skip full cleanup at shutdown, don't assert in that case.
Sam Lantinga 09ab752a 2018-08-24T10:41:57 Implement SDL_HapticStopEffect on Android (thanks Rachel!)
Sam Lantinga f1bc1c12 2018-08-22T17:44:28 Fixed crash trying to open HIDAPI controller as a haptics device on Windows
Mai Lavelle e714f659 2018-08-07T12:06:31 haptic: Fix initial detection of haptic devices on Linux system SDL_UDEV_Scan must be called during SDL_SYS_HapticInit to ensure devices outside of the 0-31 range are added to the list of haptic devices. Fixes Bugzilla #3923.
Sam Lantinga df0d3f13 2018-07-12T13:28:15 More controller drivers support CARTESIAN coordinates. This fixes rumble on the Saitek Cyborg V.3 Rumble Pad
Ethan Lee 0a7faa4a 2018-05-04T21:58:39 Fix Linux haptic scaling, add 2.1 FIXME
Sam Lantinga e3cc5b2c 2018-01-03T10:03:25 Updated copyright for 2018
Sam Lantinga e0d0184f 2017-12-11T14:44:34 Fixed bug 3999 - Build failed when try to build with configure script for Android
Sam Lantinga 0d011ec6 2017-08-28T00:22:23 Renaming of guard header names to quiet -Wreserved-id-macro
Sam Lantinga 72b195d2 2017-08-14T20:45:14 Fixed Android build warning
Sam Lantinga 0a52db54 2017-08-12T08:15:09 Fixed bug 3191 - haptic system on android? Patch provided by jintiao and Milan Nikolic, thanks!
Ryan C. Gordon d96419c9 2017-06-21T01:22:00 xinput: use the full range of the haptic motors (thanks, Trent!). XInput goes from 0 to 64k; we were feeding it values in the range of 0 to 32k. Fixes Bugzilla #3002.
Philipp Wiesemann 22c221f3 2017-06-11T22:30:58 linux: Changed internal functions to be static.
Ryan C. Gordon 70c0400b 2017-02-13T17:00:46 windows: Try to unify all the GUID comparison code into a core helper function. There are likely several more I missed.
Sam Lantinga dd007e3f 2017-01-18T11:58:16 Fixed bug 3561 - Re-acquire device before playing effects if needed. Mathieu Laurendeau Check the result of IDirectInputEffect_SetParameters and re-acquire the device to solve concurrency issues.
Sam Lantinga 45b774e3 2017-01-01T18:33:28 Updated copyright for 2017
Sam Lantinga 36156335 2016-11-20T21:34:54 Renaming of guard header names to quiet -Wreserved-id-macro Patch contributed by Sylvain
Philipp Wiesemann 97aa5775 2016-11-16T22:08:51 Fixed empty parameter list in signatures of internal functions.
Sam Lantinga c2837ef6 2016-11-13T23:04:47 Fixed unresolved symbol on Visual Studio
Sam Lantinga 57d01d7d 2016-11-13T22:57:41 Patch from Sylvain to fix clang warnings
Sam Lantinga 27d4f099 2016-10-07T23:40:44 Implemented SDL_GetHintBoolean() to make it easier to check boolean hints
Sam Lantinga a21a227a 2016-10-04T03:50:28 Fixed bug 3021 - HapticOpenFromJoystick() problems Joe Thompson With Direct Input device (MOMO Steering Wheel w/FF) with SDL 2.0.3, SDL_HapticOpenFromJoystick() would fail. (Can't set exclusive mode) Now with 2.0.4 rc1, SDL_HapticOpenFromJoystick() succeeds but the the returned SDL_Haptic* cannot be used. Calls to SDL_HapticNewEffect() fail with "Haptic error Unable to create effect" If SDL_HapticOpen() is used instead of HapticOpenFromJoystick(), the device is usable. Calls to HapticNewEffect() succeed with the exact same parameters as the previous failing call. I have attached a proposed patch for this issue. When using SDL_HapticOpenFromJoystick(), the original code did not (re)enumerate the axes. This returned a new haptic device with 0 axes. Later, when a new effect is created, SDL_SYS_SetDirection() would set the flags to include DIEFF_SPHERICAL, regardless of what the caller actually set. (see Line 566 in SDL_dinputhaptic.c). This would cause the SDL_HapticNewEffect() to fail (or interpret the coordinates incorreclty.) The patch moves the call to IDirectInputDevice8_EnumObjects() outside of the if() block so that the axes are (re)enumerated for the new haptic device. Note: For steering wheels it is common for the joystick to have multiple axes (ie steering, throttle, brake), but the haptic portion of the joystick usually only applies to steering.
Sam Lantinga fa0f4176 2016-10-01T14:48:18 Fixed build warnings and errors
Philipp Wiesemann 4743b55c 2016-07-20T21:01:14 Linux: Fixed memory leak in haptic implementation (thanks, Martin!). Fixes Bugzilla #3238.
Ryan C. Gordon 9b4db2b8 2016-04-12T18:11:36 Patched to compile on various platforms.
Ryan C. Gordon c61675dc 2016-04-12T16:45:10 threads: Move SDL's own thread creation to a new internal API. This allows us to set an explicit stack size (overriding the system default and the global hint an app might have set), and remove all the macro salsa for dealing with _beginthreadex and such, as internal threads always set those to NULL anyhow. I've taken some guesses on reasonable (and tiny!) stack sizes for our internal threads, but some of these might turn out to be too small in practice and need an increase. Most of them are simple functions, though.
Ryan C. Gordon 7605ccf6 2016-01-05T02:29:16 Use SDL's stdinc functions instead of C runtime calls.
Ryan C. Gordon fa8c83c1 2016-01-03T06:50:50 Remove almost all instances of "volatile" keyword. As Tiffany pointed out in Bugzilla, volatile is not useful for thread safety: https://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-for-multi-threaded-programming/ Some of these volatiles didn't need to be, some were otherwise protected by spinlocks or mutexes, and some got moved over to SDL_atomic_t data, etc. Fixes Bugzilla #3220.
Sam Lantinga 42065e78 2016-01-02T10:10:34 Updated copyright to 2016
Sam Lantinga c2f03948 2015-09-30T15:38:30 Fix crash on controller hotplug on linux. CR: Sam
Philipp Wiesemann 0e45984f 2015-06-21T17: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().
Ryan C. Gordon 0c3830a9 2015-06-16T00:57:45 Haptic/Linux: Keep track of device numbers properly to track duplicates. Fixes Bugzilla #3014.
Sam Lantinga e3df6d5e 2015-06-14T19:21:13 Fixed bug 2953 - Crash due to a bad cleanup in the SDL_SYS_HapticQuit function Technically this is caused by the haptic devices not being closed at quit time, which we need to fix anyway, but this is a bandaid for now.
Philipp Wiesemann 86e9ab79 2015-06-08T20:46:09 Linux: Fixed not needed call to close() on error. It was called if file descriptor was none and -1.
Ryan C. Gordon 8bac7967 2015-06-07T18:29:23 Maybe patched to compile on some Windows configurations. (Maybe) Fixes Bugzilla #3001.
Ryan C. Gordon 84ce0006 2015-05-28T01:27:24 I think this will be the time...
Ryan C. Gordon 7964f3ad 2015-05-28T01:22:14 Still trying to get this to compile...
Ryan C. Gordon cae4fd7f 2015-05-28T01:16:55 More patching to compile...
Ryan C. Gordon 58447b24 2015-05-28T00:54:52 Move tests from SDL_config higher up in Windows joystick/haptic code. Fixes Bugzilla #2932.
Ryan C. Gordon 59f69f63 2015-05-26T16:14:25 Whoops, fix the static analysis fix.
Ryan C. Gordon 37f4eb53 2015-05-26T12:47:03 Darwin haptic: Fixed a static analysis warning if axes==0.
Sam Lantinga 2c4a6ea0 2015-05-26T06:27:46 Updated the copyright year to 2015
Ryan C. Gordon b72938c8 2015-04-20T12: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.
Philipp Wiesemann 56c82bc8 2015-04-11T20:41:49 Mac: Fixed typo in two error messages.
Alex Szpakowski fe6c797c 2015-04-10T23:30:31 Fixed an iOS view orientation issue when SDL_GL_CreateContext or SDL_CreateRenderer is called.
Ryan C. Gordon a3097559 2015-02-19T13:11:19 Remove unnecessary parentheses and an unnecessary free() of a NULL pointer. (Thanks, Simon!) Fixes Bugzilla #2881.
Edward Rudd b88ca1b4 2015-02-10T16: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
Philipp Wiesemann b48e54aa 2015-01-26T22: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.
Philipp Wiesemann e2a5c1d2 2014-12-11T23:38:02 Removed extern declaration of not existing SDL_numhaptics from internal header.
Philipp Wiesemann 4f26e776 2014-12-04T21:41:30 Replaced free() with SDL_free() because related allocation also uses wrapper.
David Ludwig 70438be2 2014-12-03T10: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!
Sam Lantinga 265b219e 2014-11-29T11:51:13 Fixed bug 2766 - Haptic coding bugs and fixes for Linux FF: periodic.phase handled as time instead of angle; + direction clarification Elias Vanderstuyft Remove the dependency of the calculation of Linux "phase" on "period", currently the "phase" parameter is interpreted as a time shift, instead of a phase shift. The Linux input documentation is not clear about the exact units of the "phase" parameter (see http://lxr.free-electrons.com/source/include/uapi/linux/input.h?v=3.17#L1075 ), but we're about to standardize the 'phase shift' interpretation into the Linux input documentation, since this will ease the job of a driver to recalculate the effect's state when the user dynamically updates the "period" parameter.
Sam Lantinga ef8c3d89 2014-11-29T11:48:43 Fixed bug 2766 - Haptic coding bugs and fixes for Linux FF: periodic.phase handled as time instead of angle; + direction clarification Elias Vanderstuyft It's not obvious from the general "haptic direction" description what the SDL direction actually means in terms of force magnitude sign, currently its meaning is only reflected by the example.
Philipp Wiesemann 9c398852 2014-11-22T22:20:40 Corrected header file documentation comment.
Ryan C. Gordon 5f9ea7ed 2014-09-17T14:49:36 Haptic: Deal with negative periodic magnitudes (thanks, Elias!). A negative periodic magnitude doesn't exist in Windows' and MacOS' FF APIs The periodic magnitude parameter of the SDL Haptic API is based on the Linux FF API, so it means they are not directly compatible: 'dwMagnitude' is a 'DWORD', which is unsigned. Fixes Bugzilla #2701.