1

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

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

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

此外,evtest给出错误但Invalid Argument在. 当我同时使用 libevdev 两个设备文件时也会发生同样的情况。js1event23

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

设备文件有什么区别?为什么他们有不同的信息,以及event23提供的更多信息是什么js1

4

1 回答 1

3

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

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

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

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

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

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

另一个很大的区别:joydev纯粹是为了输入。evdev支持游戏手柄隆隆声和力反馈效果。

于 2020-06-15T17:12:15.240 回答