Современный способ чтения ввода геймпада с C на Linux - PullRequest
0 голосов
/ 04 февраля 2019

Я заинтересован в чтении ввода геймпада, в частности, геймпада с компоновкой проводного контроллера 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.Если это невозможно, какой самый дальновидный подход?Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

В соответствии с документами ядра

Более новым клиентам рекомендуется переключаться на общий интерфейс событий (evdev).

Определенные сопоставлениятребуемый контроллер можно найти в документации сообщества ядра ввода linux

Поэтому используйте struct input_event

...