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


person Ryan McClue    schedule 03.02.2019    source источник
comment
Подсказка: не разыгрывайте указатель до его проверки.   -  person wildplasser    schedule 04.02.2019
comment
@wildplasser Я согласен с вами, для краткости я опускал все проверки ошибок. Глядя на исходный код SDL, они используют структуру input_event, так что я тоже могу использовать ее.   -  person Ryan McClue    schedule 05.02.2019


Ответы (1)