【问题标题】:What is the difference between /dev/input/eventX and /dev/input/jsX?/dev/input/eventX 和 /dev/input/jsX 有什么区别?
【发布时间】:2020-10-02 21:59:03
【问题描述】:

当我在我的 Linux 内核 v5.14 上连接游戏手柄时,会出现两个新设备:

/dev/input/event23
/dev/input/js1

如果我cat <file> | xxd 两个设备文件都提供游戏手柄事件信息。但是event23js1 详细得多。

另外,evtestjs1 上给出错误Invalid Argument,但在event23 上工作正常。当我同时使用 libevdev 两个设备文件时也会发生同样的情况。

看起来像每个事件,js1 转储input_event 结构的内容(在linux/input.h 中定义)

设备文件有什么区别?为什么他们有不同的信息?event23js1 提供了更多的信息?

【问题讨论】:

    标签: linux input joystick gamepad evdev


    【解决方案1】:

    /dev/input/js* 设备由joydev 旧版游戏杆驱动程序创建。它仅支持操纵杆和类似操纵杆的设备。

    https://www.kernel.org/doc/html/latest/input/joydev/joystick.html

    /dev/input/event* 设备由evdev 输入事件接口创建。它支持所有类型的输入设备,而不仅仅是操纵杆。​​p>

    https://linux.die.net/man/4/evdev

    joydev 接口公开了通过evdev 公开的信息子集,具体来说,它只会公开看起来像操纵杆按钮或轴的输入。新应用程序应该更喜欢使用evdev,但joydev 通常仍然可用。

    “看起来像操纵杆按钮或轴”启发式有时可能会成为joydev 的问题。连接 HID 游戏手柄时,evdevjoydev 使用设备的 HID 报告描述符中的信息来检测按钮和轴输入的数量。 joydev 仅考虑 HID 按钮使用页面中的按钮,但较新的游戏手柄有时会定义具有不同用途的特殊按钮。这对于 Android 游戏手柄尤其常见,它们的 Home 和 Back 按钮具有非按钮用途。这些按钮不会被joydev 拾取。

    另一个很大的区别:joydev 纯粹用于输入。 evdev 支持手柄震动和力反馈效果。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2015-01-30
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多