Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixed game controller hotplug support for some embedded Linux devices
When guessing the device class, it ends up being 0 for devices that have been removed (because the device node no longer exists)
  • Loading branch information
slouken committed Jan 29, 2015
1 parent 0874eb9 commit a725806
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions src/joystick/linux/SDL_sysjoystick.c
Expand Up @@ -142,13 +142,15 @@ IsJoystick(int fd, char *namebuf, const size_t namebuflen, SDL_JoystickGUID *gui
#if SDL_USE_LIBUDEV #if SDL_USE_LIBUDEV
void joystick_udev_callback(SDL_UDEV_deviceevent udev_type, int udev_class, const char *devpath) void joystick_udev_callback(SDL_UDEV_deviceevent udev_type, int udev_class, const char *devpath)
{ {
if (devpath == NULL || !(udev_class & SDL_UDEV_DEVICE_JOYSTICK)) { if (devpath == NULL) {
return; return;
} }


switch( udev_type ) switch (udev_type) {
{
case SDL_UDEV_DEVICEADDED: case SDL_UDEV_DEVICEADDED:
if (!(udev_class & SDL_UDEV_DEVICE_JOYSTICK)) {
return;
}
MaybeAddDevice(devpath); MaybeAddDevice(devpath);
break; break;


Expand Down Expand Up @@ -335,13 +337,12 @@ JoystickInitWithoutUdev(void)
static int static int
JoystickInitWithUdev(void) JoystickInitWithUdev(void)
{ {

if (SDL_UDEV_Init() < 0) { if (SDL_UDEV_Init() < 0) {
return SDL_SetError("Could not initialize UDEV"); return SDL_SetError("Could not initialize UDEV");
} }


/* Set up the udev callback */ /* Set up the udev callback */
if ( SDL_UDEV_AddCallback(joystick_udev_callback) < 0) { if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) {
SDL_UDEV_Quit(); SDL_UDEV_Quit();
return SDL_SetError("Could not set up joystick <-> udev callback"); return SDL_SetError("Could not set up joystick <-> udev callback");
} }
Expand Down

0 comments on commit a725806

Please sign in to comment.