Современный способ чтения ввода геймпада с 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

Другие вопросы по тегам