Я заинтересован в чтении ввода геймпада, в частности, геймпада с компоновкой проводного контроллера xbox 360, с C на Linux-машине.Я понимаю, что это можно сделать разными способами, однако мне было интересно, каков современный метод достижения этого.Насколько я понимаю, evdev
- это «будущее», в то время как Joystick API является устаревшим.Используя libudev
, я могу найти подключенные геймпады и определить, когда они подключены и отключены:
// skipping setup code ....
char const* val = udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK");
if (val != NULL && strcmp(val, "1") == 0) {
char const* devfs_path = udev_device_get_devnode(udev_device);
}
// .....
struct udev_device* device = udev_monitor_recieve_device(udev_monitor);
char const* action = udev_device_get_action(device);
if (strcmp(action, "add") == 0) {
// .....
}
if (strcmp(action, "remove") == 0) {
// .....
}
Суть моего вопроса заключается в том, как лучше всего читать нажатия кнопок и движение осей.В настоящее время я не уверен, использовать ли struct js_event
или struct input_event
.По правде говоря, я надеялся сделать это с той же проверкой для подключенных и удаленных геймпадов с libudev
.Если это невозможно, какой самый дальновидный подход?Спасибо.