Современный способ чтения ввода геймпада с C на Linux
Я заинтересован в чтении ввода геймпада, в частности, геймпада с компоновкой проводного контроллера xbox 360, с C на Linux-машине. Я понимаю, что это можно сделать разными способами, однако мне было интересно, каков современный метод достижения этого. Как я понимаю, evdev
это "будущее", в то время как 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
, Если это невозможно, какой самый дальновидный подход? Благодарю.
1 ответ
По данным ядра документов
Новым клиентам рекомендуется переключиться на общий интерфейс событий (evdev).
Конкретные сопоставления для желаемого контроллера можно найти в документации сообщества ввода Linux.
Поэтому используйте struct input_event