Browse Source

joystick: Ensure HIDAPI is initialized before calling it

Andrew Eikum 5 years ago
parent
commit
c172f36bf4
2 changed files with 12 additions and 0 deletions
  1. 10 0
      src/joystick/hidapi/SDL_hidapijoystick.c
  2. 2 0
      src/joystick/linux/SDL_sysjoystick.c

+ 10 - 0
src/joystick/hidapi/SDL_hidapijoystick.c

@@ -99,6 +99,7 @@ static SDL_HIDAPI_DeviceDriver *SDL_HIDAPI_drivers[] = {
 static int SDL_HIDAPI_numdrivers = 0;
 static SDL_HIDAPI_Device *SDL_HIDAPI_devices;
 static int SDL_HIDAPI_numjoysticks = 0;
+static SDL_bool initialized = SDL_FALSE;
 
 #if defined(SDL_USE_LIBUDEV)
 static const SDL_UDEV_Symbols * usyms = NULL;
@@ -696,6 +697,10 @@ HIDAPI_JoystickInit(void)
 {
     int i;
 
+    if (initialized) {
+        return 0;
+    }
+
     if (hid_init() < 0) {
         SDL_SetError("Couldn't initialize hidapi");
         return -1;
@@ -709,6 +714,9 @@ HIDAPI_JoystickInit(void)
                         SDL_HIDAPIDriverHintChanged, NULL);
     HIDAPI_InitializeDiscovery();
     HIDAPI_JoystickDetect();
+
+    initialized = SDL_TRUE;
+
     return 0;
 }
 
@@ -1059,6 +1067,8 @@ HIDAPI_JoystickQuit(void)
     SDL_HIDAPI_numjoysticks = 0;
 
     hid_exit();
+
+    initialized = SDL_FALSE;
 }
 
 SDL_JoystickDriver SDL_HIDAPI_JoystickDriver =

+ 2 - 0
src/joystick/linux/SDL_sysjoystick.c

@@ -120,6 +120,8 @@ IsJoystick(int fd, char *namebuf, const size_t namebuflen, SDL_JoystickGUID *gui
     }
 
 #ifdef SDL_JOYSTICK_HIDAPI
+    SDL_HIDAPI_JoystickDriver.Init();
+
     if (HIDAPI_IsDevicePresent(inpid.vendor, inpid.product, inpid.version)) {
         /* The HIDAPI driver is taking care of this device */
         return 0;