Skip to content

Commit

Permalink
Fixed bug 2477 - [PATCH] Joysticks do not work on RHEL6/CentOS6 systems
Browse files Browse the repository at this point in the history
Ashley Whetter

RHEL6 and CentOS6 systems still use an old version of udev (147). It wasn't until udev 148 (Yep. 1 version off!) that the input class system changed from "ID_CLASS" to "ID_INPUT_{JOYSTICK,KEYBOARD,MOUSE,etc}" (http://lwn.net/Articles/364728/). Because SDL2 looks for the ID_INPUT_X field this means that it never detects any input devices on RHEL6 systems.

I've attached a patch which fixes the problem. If no input devices are detected with "ID_INPUT_X" then SDL will fallback to looking for the old style "ID_CLASS" udev field instead.
Because of the "big change" between udev versions I doubt it'll ever get upgraded on RHEL6, but because RHEL7 is on the way I don't know if this patch is worth merging. Hopefully it'll help anyone out that's having this problem though.
  • Loading branch information
slouken committed Apr 18, 2014
1 parent 5439f9d commit 7ae52b1
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion src/core/linux/SDL_udev.c
Expand Up @@ -308,7 +308,21 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev)
}

if (devclass == 0) {
return;
// Fall back to old style input classes
val = _this->udev_device_get_property_value(dev, "ID_CLASS");
if (val != NULL) {
if (SDL_strcmp(val, "joystick") == 0) {
devclass = SDL_UDEV_DEVICE_JOYSTICK;
} else if (SDL_strcmp(val, "mouse") == 0) {
devclass = SDL_UDEV_DEVICE_MOUSE;
} else if (SDL_strcmp(val, "kbd") == 0) {
devclass = SDL_UDEV_DEVICE_KEYBOARD;
} else {
return;
}
} else {
return;
}
}
} else {
return;
Expand Down

0 comments on commit 7ae52b1

Please sign in to comment.