在 Linux 上使用 C 读取游戏手柄输入的现代方法



我对阅读游戏手柄输入感兴趣,特别是具有有线 Xbox 360 控制器布局的游戏手柄,在 Linux 机器上使用 C。我知道这可以通过多种方式完成,但是我想知道实现这一目标的现代方法是什么。据我了解,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相同的检查来连接和移除游戏手柄来做到这一点。如果这是不可能的,哪种方法最具前瞻性?谢谢。

根据内核文档

建议较新的客户端切换到通用事件 (evdev( 接口。

所需控制器的特定映射可以在 linux 输入内核社区文档中找到

因此,请使用struct input_event

相关内容

  • 没有找到相关文章

最新更新