【问题标题】:Modern way to read gamepad input with C on Linux在 Linux 上使用 C 读取游戏手柄输入的现代方法
【发布时间】:2019-06-27 18:12:45
【问题描述】:

我有兴趣阅读游戏手柄输入,特别是具有有线 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 对连接和移除的游戏手柄进行相同的检查来做到这一点。如果这是不可能的,那么哪种方法是最具前瞻性的? 谢谢。

【问题讨论】:

  • 提示:在验证之前不要取消对指针的引用。
  • @wildplasser 我同意你的观点,为简洁起见,我省略了所有错误检查。查看 SDL 源代码,他们使用 input_event 结构,所以我也可以使用它。

标签: c linux gamepad evdev


【解决方案1】:

根据kernel docs

鼓励新客户切换到通用事件 (evdev) 接口。

所需控制器的具体映射可以在linux input kernel community docs中找到

因此,请使用struct input_event

【讨论】:

  • 您好,您的 pdf 链接指向 403。您可以考虑重新发布吗?
  • @Nelstaar 可以在Wayback Machine上找到
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多