src/hidapi


Log

Author Commit Date CI Message
Sam Lantinga aa2e2f48 2022-09-22T18:22:17 Make sure HID devices can be opened before making them available to the application This prevents a number of issues where devices are enumerated but not actually able to be opened, like https://github.com/libsdl-org/SDL/issues/5781. We currently leave the devices open, allowing us to more easily do controller feature detection, protocol negotiation, detect dropped Bluetooth connections, etc. with the expectation that the application is likely to open the controllers shortly.
Sam Lantinga 99e85cc2 2022-09-22T10:10:20 Accidentally reverted https://github.com/libsdl-org/SDL/commit/172865ff137532123ec06177119be163ba1811f5
Sam Lantinga 6cbdc666 2022-09-22T09:05:06 Fixed use of uninitialized 'size' variable (thanks @ozkan!)
Sam Lantinga 2e9f5b59 2022-09-16T15:41:35 Added support for the HORI Fighting Commander OCTA (Xbox Series X and PS versions)
Sam Lantinga 910d499c 2022-09-16T09:19:20 Fixed comment typo
Sam Lantinga 172865ff 2022-09-16T09:16:18 Don't enumerate HID devices on macOS if we don't have input monitoring permissions Unfortunately the only way to detect this is to actually try opening a device, so we wait until the application tries, and then stop enumerating afterwards. Fixes https://github.com/libsdl-org/SDL/issues/5781
Ozkan Sezer 28476963 2022-09-01T22:55:00 hidapi: really fix dynamic / non-dynamic libusb loading.
Ozkan Sezer 9d77945d 2022-09-01T21:56:50 fixed linkage libusb not dynamicaly loaded after commit 3f89d1704d build/.libs/SDL_hidapi.o: In function `SDL_EnableGameCubeAdaptors': src/hidapi/SDL_hidapi.c:1593: undefined reference to `libusb_init' src/hidapi/SDL_hidapi.c:1594: undefined reference to `libusb_get_device_list' src/hidapi/SDL_hidapi.c:1596: undefined reference to `libusb_get_device_descriptor' src/hidapi/SDL_hidapi.c:1604: undefined reference to `libusb_open' src/hidapi/SDL_hidapi.c:1608: undefined reference to `libusb_kernel_driver_active' src/hidapi/SDL_hidapi.c:1614: undefined reference to `libusb_claim_interface' src/hidapi/SDL_hidapi.c:1623: undefined reference to `libusb_close' src/hidapi/SDL_hidapi.c:1626: undefined reference to `libusb_free_device_list' src/hidapi/SDL_hidapi.c:1628: undefined reference to `libusb_exit' src/hidapi/SDL_hidapi.c:1609: undefined reference to `libusb_detach_kernel_driver' src/hidapi/SDL_hidapi.c:1620: undefined reference to `libusb_attach_kernel_driver' src/hidapi/SDL_hidapi.c:1615: undefined reference to `libusb_control_transfer' src/hidapi/SDL_hidapi.c:1616: undefined reference to `libusb_release_interface' build/.libs/SDL_hidapi.o: In function `SDL_hid_init_REAL': src/hidapi/SDL_hidapi.c:1086: undefined reference to `libusb_init' src/hidapi/SDL_hidapi.c:1087: undefined reference to `libusb_exit' src/hidapi/SDL_hidapi.c:1088: undefined reference to `libusb_get_device_list' src/hidapi/SDL_hidapi.c:1089: undefined reference to `libusb_free_device_list' src/hidapi/SDL_hidapi.c:1090: undefined reference to `libusb_get_device_descriptor' src/hidapi/SDL_hidapi.c:1091: undefined reference to `libusb_get_active_config_descriptor' src/hidapi/SDL_hidapi.c:1092: undefined reference to `libusb_get_config_descriptor' src/hidapi/SDL_hidapi.c:1093: undefined reference to `libusb_free_config_descriptor' src/hidapi/SDL_hidapi.c:1094: undefined reference to `libusb_get_bus_number' src/hidapi/SDL_hidapi.c:1095: undefined reference to `libusb_get_device_address' src/hidapi/SDL_hidapi.c:1096: undefined reference to `libusb_open' src/hidapi/SDL_hidapi.c:1097: undefined reference to `libusb_close' src/hidapi/SDL_hidapi.c:1098: undefined reference to `libusb_claim_interface' src/hidapi/SDL_hidapi.c:1099: undefined reference to `libusb_release_interface' src/hidapi/SDL_hidapi.c:1100: undefined reference to `libusb_kernel_driver_active' src/hidapi/SDL_hidapi.c:1101: undefined reference to `libusb_detach_kernel_driver' src/hidapi/SDL_hidapi.c:1102: undefined reference to `libusb_attach_kernel_driver' src/hidapi/SDL_hidapi.c:1103: undefined reference to `libusb_set_interface_alt_setting' src/hidapi/SDL_hidapi.c:1104: undefined reference to `libusb_alloc_transfer' src/hidapi/SDL_hidapi.c:1105: undefined reference to `libusb_submit_transfer' src/hidapi/SDL_hidapi.c:1106: undefined reference to `libusb_cancel_transfer' src/hidapi/SDL_hidapi.c:1107: undefined reference to `libusb_free_transfer' src/hidapi/SDL_hidapi.c:1108: undefined reference to `libusb_control_transfer' src/hidapi/SDL_hidapi.c:1109: undefined reference to `libusb_interrupt_transfer' src/hidapi/SDL_hidapi.c:1110: undefined reference to `libusb_handle_events' src/hidapi/SDL_hidapi.c:1111: undefined reference to `libusb_handle_events_completed' collect2: ld returned 1 exit status
Sam Lantinga 3f89d170 2022-09-01T11:30:02 Fixed building with libusb not dynamicaly loaded
Sam Lantinga b2ac758f 2022-08-29T17:33:00 Added support for the Hori Fighting Stick Alpha to the HIDAPI driver
Ludovico de Nittis e8cb4da7 2022-08-26T12:28:33 Add utility function to detect if SDL is inside a sandbox Refactor the previous sandbox check in a standalone function that also includes Snap support. Signed-off-by: Ludovico de Nittis <ludovico.denittis@collabora.com>
Sam Lantinga 679582e7 2022-08-25T11:07:20 Fixed crash if there are no devices available
Sam Lantinga 70c781c8 2022-08-24T10:25:56 Fixed build warning because of redefining string functions
Sam Lantinga 3ed8e219 2022-08-24T01:25:14 Fixed building HIDAPI libusb support on Windows
Sam Lantinga b6f96b69 2022-08-23T22:45:37 Initial HIDAPI driver support for the PS3 controller
Sam Lantinga b880709e 2022-08-12T18:11:27 Added libusb hack for Gamesir-G3w which needs the same adjustment as the Hori controllers
Sam Lantinga a547c185 2022-08-08T12:21:40 Fixed crash if uevent info isn't available
Sam Lantinga d6a8b43c 2022-08-05T10:37:38 Added support for the HORIPAD FPS for Nintendo Switch
Sam Lantinga be3a945a 2022-07-20T11:05:55 Added support for the 8BitDo Ultimate Wired Controller for Xbox
Pierre Wendling 6c536afd 2022-06-27T15:43:17 Fix C89 declaration for macOS modules. Since Clang 14, `-Wdeclaration-after-statement` is enforced on every standard.
chalonverse 3b191580 2022-06-27T17:19:39 Windows GDK Support (#5830) * Added GDK * Simplfied checks in SDL_config_wingdk.h * Added testgdk sample * Added GDK readme * Fixed error in merge of SDL_windows.h * Additional GDK fixes * OpenWatcom should not export _SDL_GDKGetTaskQueue * Formatting fixes * Moved initialization code into SDL_GDKRunApp
Sam Lantinga 72fea0ed 2022-06-15T13:58:28 Added support for the Qanba Dragon Arcade Joystick
Sam Lantinga ce576323 2022-06-10T12:42:45 The backlight event is "change", not "add" or "remove"
Ethan Lee 964e979d 2022-05-30T16:17:04 hidapi: Allow disabling libusb support at runtime
Sam Lantinga bef9f2b2 2022-05-26T20:45:13 Don't trigger device notifications when Steam Deck backlight changes
Sam Lantinga 22d6e09a 2022-05-25T11:04:58 Don't try to call hid_ble_scan() if HIDAPI is disabled Fixes https://github.com/libsdl-org/SDL/issues/5699
Ozkan Sezer 9220f92b 2022-05-25T01:01:02 hidapi/libusb/hid.c (read_thread): mark as SDLCALL
Cameron Cawley ffab9f46 2022-05-18T21:07:33 Avoid clashing with system headers when redefining standard library functions
Ozkan Sezer 7a574303 2022-04-23T20:01:40 hidapi, libusb: import mainstream commit 536bad201e
Eddy Jansson a40405d7 2022-04-20T18:06:02 hidapi: Wrap CopyHIDDeviceInfo in define checks. The purpose of this is to silence a 'defined but not used' warning.
Sam Lantinga 7b3449b8 2022-04-04T20:46:56 Minor cleanup
Ryan C. Gordon 4fe7b2cb 2022-03-24T11:00:43 static analysis: Fixed several complaints from codechecker. There are still some pending Objective-C specific issues. Reference issue #4600.
Jonatha Gabriel b944dc8f 2022-03-22T15:05:05 Also fix Android crash when SDL_HIDAPI_DISABLED set to 1 The Java code needs the native functions to be implemented, even if they're not surfaced via the C API, therefore, a stub version of functions were made only to the purpose of "fill the gaps" when SDL_HIDAPI_DISABLED set to 1.
Sam Lantinga b559a4ac 2022-03-19T10:39:22 Fixed Android crash when SDL_HIDAPI_DISABLED set to 1 The Java code needs the native functions to be implemented, even if they're not surfaced via the C API. Fixes https://github.com/libsdl-org/SDL/issues/5326
Sam Lantinga 09b652b7 2022-03-09T13:54:23 Make sure the string properties are actually strings (thanks Nat!)
Sam Lantinga 14db417e 2022-03-08T21:32:27 Reenable getting the serial number on macOS We filter now on game controllers, so we shouldn't hit the crash bug on random devices that this was working around.
Sam Lantinga c3ca3445 2022-03-08T18:56:49 Prefer HIDAPI on macOS, as that has extended functionality
pionere ebdd5366 2022-01-17T16:26:02 use SDL_InvalidParamError or SDL_assert instead of custom SDL_SetError
Ozkan Sezer e9511f71 2022-01-14T14:39:04 hidapi, libusb: don't use iconv on OS/2, it lacks wchar_t functionality. Taken from a patch by Silvan Scherrer at bitwiseworks' OS/2 fork.
Ozkan Sezer 7527c8d3 2022-01-11T11:33:02 hidapi, libusb: provide a wcsdup implementation if it is not available. similar to mac and android versions..
Ozkan Sezer f14c7bb4 2022-01-09T20:33:32 added missing hidapi stuff for os/2 with libusb
Sam Lantinga 120c76c8 2022-01-03T09:40:00 Updated copyright for 2022
Sam Lantinga 67c4b996 2021-12-15T10:39:42 Fixed enabling udev hotplug detection on Linux
Ozkan Sezer 09465a90 2021-11-30T21:10:10 hidapi, windows: replace a strncpy() with plain memcpy() mainstream has a similar change, already.
Ozkan Sezer 8f17af5e 2021-11-27T20:56:56 hidapi: mark libusb function pointers with LIBUSB_CALL.
Sam Lantinga 30f04d63 2021-11-26T07:15:46 HIDAPI is only reliable on Android 4.3 and newer Fixes https://github.com/libsdl-org/SDL/issues/4955
Sylvain d5813776 2021-11-25T09:56:15 Release UDEV ressources
Sylvain d31251b0 2021-11-21T22:30:48 use SDL's functions version inplace of libc version
Cameron Gutman 343fa612 2021-11-20T13:17:59 hid: fix inconsistent indentation
Cameron Gutman db60b271 2021-11-20T13:13:17 hid: Only enumerate IOHIDDevices that are likely to be joysticks Touching HID devices with keyboard usages will trigger a keyboard capture permission prompt on macOS 11+. See #4887 Like the IOKit joystick backend, we accept HID devices that have joystick, gamepad, or multi-axis controller usages. We also allow the Valve VID for the Steam Controller, just like the Windows HIDAPI implementation does.
Ozkan Sezer b6796597 2021-11-19T11:55:50 SDL_hidapi.c: fix SDL_udev.h include path fixes https://github.com/libsdl-org/SDL/issues/4981
Ozkan Sezer d2cf1919 2021-11-17T10:00:10 hidapi, linux: merged a minor warning + code style fix from mainstream.
Sam Lantinga 66058bbb 2021-11-15T16:52:56 Fixed exception accessing Bluetooth devices on Android 12 Since accessing Bluetooth prompts the user for permission on both Android and iOS, and we only need it for Steam Controller support, we'll leave it off by default. You can enable it by setting the hint SDL_HINT_JOYSTICK_HIDAPI_STEAM to "1" before calling SDL_Init() Fixes https://github.com/libsdl-org/SDL/issues/4952
Mathieu Eyraud 5fc7a90a 2021-11-12T10:00:41 Fix refcounting in SDL_hid_exit
Sam Lantinga 162772aa 2021-11-11T20:50:54 Fixed build warnings on Android
Sam Lantinga 9c3bcf8e 2021-11-11T17:31:14 Added SDL_hid_ble_scan() for pairing Steam Controllers on iOS and tvOS
Sam Lantinga 911d91c5 2021-11-11T14:35:51 Retry hid_send_feature_report() if the ioctl() fails with EPIPE (e.g. the device stalled)
Sam Lantinga b9b0df40 2021-11-11T12:52:31 Fixed Linux build
Sam Lantinga c9ada1c1 2021-11-11T12:45:38 Made HIDAPI device change notifications available via SDL_hid_device_change_count()
Sam Lantinga 6c4b4ee7 2021-11-10T09:41:43 Don't assert on API parameters This causes lots of spam in test automation and it's not clear it's useful to developers. If we need this level of validation, we should add a log category for it.
Sam Lantinga 0f2bf629 2021-11-09T06:20:46 Fixed building hidapi when libusb is available
Sam Lantinga b8327a4a 2021-11-08T07:19:45 Added SDL_HIDAPI_DISABLED so it can be disabled like other SDL subsystems
Sam Lantinga f61b10dc 2021-11-08T06:34:32 Do more robust validation of devices passed to the SDL HIDAPI functions
Ozkan Sezer dd8c3548 2021-11-08T17:00:56 SDL_hidapi.c: avoid possible NULL pointer dereferences.
Sam Lantinga 5b646cd1 2021-11-07T22:58:44 Build hidapi code into SDL as a new public API This prevents conflicts with hidapi linked with applications, as well as allowing applications to make use of HIDAPI on Android and other platforms that might not normally have an implementation available.
Sam Lantinga db18764e 2021-10-01T16:27:59 Use correct relative include path
Sam Lantinga bf97c5a2 2021-09-08T14:47:40 Make sure SDL file descriptors don't leak into child processes
Sam Lantinga 7d66fa20 2021-09-07T17:38:26 Fixed double-copy of the report in BlueZ >= 5.56
Sam Lantinga 8b1f8b6e 2021-08-27T11:14:09 Use the high speed alternate setting on new Microsoft Xbox controllers
Sam Lantinga a91ab883 2021-08-06T12:28:03 Fixed building on Windows with cmake, ninja, and clang
Sam Lantinga f93e9047 2021-07-08T18:44:50 Implemented the timeout in hid_read_timeout() on Android This fixes detecting PS5 controllers connected over USB
Sam Lantinga 814285d6 2021-06-23T09:19:02 Workaround for crash on Apple Mac M1 hardware
Sam Lantinga 0e62926e 2021-06-10T16:28:32 Fixed crash if vendor or product strings are empty
Sam Lantinga cb5e8635 2021-06-08T13:15:24 Fixed crash after reinitializing libusb HID support
Sam Lantinga 6de33c09 2021-06-03T09:05:33 Clarify why we're skipping Game Controller framework supported devices in hid.c
Patrick Hogan 28da6c5d 2021-05-27T14:42:03 Have HIDAPI skip MFI supported HID devices on macOS to avoid duplicate devices.
Steven Noonan 17d8479d 2021-04-22T15:44:01 hidapi/libusb: maintain in-memory cache of vendor/product strings The get_usb_string call is rather expensive on some USB devices, so we cache the vendor/product strings for future lookups (e.g. when hid_enumerate is invoked again later). This way, we only need to ask libusb for strings for devices we haven't seen since before we started. Signed-off-by: Steven Noonan <steven@valvesoftware.com> Signed-off-by: Sam Lantinga <slouken@libsdl.org>
Sam Lantinga 3377861a 2021-03-26T11:57:19 Added support for the Amazon Game Controller to the HIDAPI driver
Sam Lantinga 1133ea03 2021-03-22T19:18:57 Fixed crash on macOS when AirPods are connected
Sam Lantinga 1f7ec3fa 2021-02-11T17:27:22 Added support for the PowerA Xbox One Series X Wired Controller
Ozkan Sezer bb9e049d 2021-02-07T00:37:00 minor updates to libc function checks
Sam Lantinga 1dc9180f 2021-01-27T21:30:25 Fixed compiler warnings
Sam Lantinga d59a9268 2021-01-27T21:30:21 Fixed build warning
Sam Lantinga eb83da02 2021-01-27T21:30:17 Fixed PS4 controllers over Bluetooth on Windows 7
Sam Lantinga a4db44fa 2021-01-27T12:41:37 The Sharkoon Skiller SGH2 headset hangs in DirectInput enumeration, so avoid it here just in case. See bug 5485 for details.
Ozkan Sezer e91f83c1 2021-01-22T20:03:50 hidapi.h: adjust so that it gives a smaller diff against mainstream
Sam Lantinga d4794028 2021-01-22T08:45:38 Fixed build
Sam Lantinga 9e45372a 2021-01-21T22:47:37 Fixed build on Android and iOS
Sam Lantinga bf53651d 2021-01-21T22:32:17 Make sure we only do GameCube adapter initialization if we were able to load libusb
Sam Lantinga 3527b494 2021-01-21T22:30:34 Fixed initializing the Nyko and EVORETRO GameCube adaptors This requires root on most Linux distributions, as we have to directly send USB messages to the devices to enable input reports.
Ozkan Sezer 07f83cd5 2021-01-19T19:50:10 hidapi/libusb/hid.c: fix race condition on device close (bug #5484) From hidapi mainstream git: https://github.com/libusb/hidapi/issues/142 https://github.com/libusb/hidapi/commit/d2c3a9862eefe2d3f4db0f00c0238277bfb4e44b Read callback may fire itself on its own even after its been requested to stop and exactly before the calling code waits for its completion in indefinite loop. Explicitly preventing re-fireing the submission loop fixes the issue.
Ozkan Sezer 327ea974 2021-01-19T15:50:02 hidapi/libusb/hid.c: whitespace tidy-up.
Sam Lantinga c8a64ad9 2021-01-07T10:23:55 Fixed building when SDL_LIBUSB_DYNAMIC is defined
Sam Lantinga bf754b52 2021-01-04T12:17:24 Valve contributed code is under the Zlib license
Ozkan Sezer 01a2f276 2021-01-04T01:23:50 consistently use TEXT() macro with LoadLibrary() and GetModuleHandle() cf. bug #5435.
Sam Lantinga 9130f7c3 2021-01-02T10:25:38 Updated copyright for 2021
Sam Lantinga f0b6c787 2021-01-02T09:58:08 Fixed Windows XP compatibility with recent hidapi commit
Cameron Gutman 414ddc32 2021-01-01T17:34:07 Do not wait in GetOverlappedResult() in hid_read_timeout() This is unsafe because the event is auto-reset, therefore the call to WaitForSingleObject() resets the event which GetOverlappedResult() will try to wait on. Even though the overlapped operation is guaranteed to be completed at the point we call GetOverlappedResult(), it will still wait on the event handle for a short time to trigger the reset for auto-reset events. This amounts to roughly a 100 ms sleep each time GetOverlappedResult() is called for a completed I/O with a non-signalled event. In the context of HIDAPI, this extra sleep means that callers that loop on hid_read_timeout() with timeout=0 will loop forever, since the 100 ms sleep each iteration ensures ReadFile() will always have new data.
Sam Lantinga ab55ec48 2021-01-01T11:12:41 Fix use-after-free SBH corruption due to overlapped ReadFile in hidapi not being canceled for all threads before device close - hidapi already called CancelIo on hid_close but that only cancels pending IO for the current thread. Controller read/writes originate from multiple threads (serialized, but on a different thread nonetheless) but device destruction was always done on the main device thread which left any pending overlapped reads still running after hidapi's internal read buffer is deallocated leading to intermittent free list corruption.
Sam Lantinga ff913a22 2020-12-23T16:16:55 Fixed compile warnings on platforms without hidapi support