/dev/input/eventX 和 /dev/input/jsX 有什么区别?
What is the difference between /dev/input/eventX and /dev/input/jsX?
当我在 Linux 内核 v5.14 上连接游戏手柄时,会出现两个新设备:
/dev/input/event23
/dev/input/js1
如果我 cat <file> | xxd
两个设备文件都提供游戏手柄事件信息。但是 event23
比 js1
.
冗长得多
此外,evtest
在 js1
上给出错误 Invalid Argument
,但在 event23
上工作正常。当我使用 libevdev 两个设备文件时,也会发生同样的情况。
看起来对于每个事件,js1
都会转储 input_event
结构(在 linux/input.h
中定义)
的内容
设备文件有什么区别?为什么他们有不同的信息?event23
提供的信息多于 js1
?
/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
通常仍然可用。
"looks like a joystick button or axis" 启发式有时可能成为 joydev
的问题。连接 HID 游戏手柄时,evdev
和 joydev
使用设备 HID 报告描述符中的信息来检测按钮和轴输入的数量。 joydev
仅考虑 HID 按钮使用页面中的按钮,但较新的游戏手柄有时会定义具有不同用途的特殊按钮。这对于 Android 游戏手柄来说尤其常见,它们对 Home 和 Back 按钮具有非按钮用法。 joydev
.
不会选择这些按钮
另一个很大的区别:joydev
纯粹是为了输入。 evdev
支持游戏手柄震动和力反馈效果。
当我在 Linux 内核 v5.14 上连接游戏手柄时,会出现两个新设备:
/dev/input/event23
/dev/input/js1
如果我 cat <file> | xxd
两个设备文件都提供游戏手柄事件信息。但是 event23
比 js1
.
此外,evtest
在 js1
上给出错误 Invalid Argument
,但在 event23
上工作正常。当我使用 libevdev 两个设备文件时,也会发生同样的情况。
看起来对于每个事件,js1
都会转储 input_event
结构(在 linux/input.h
中定义)
设备文件有什么区别?为什么他们有不同的信息?event23
提供的信息多于 js1
?
/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
通常仍然可用。
"looks like a joystick button or axis" 启发式有时可能成为 joydev
的问题。连接 HID 游戏手柄时,evdev
和 joydev
使用设备 HID 报告描述符中的信息来检测按钮和轴输入的数量。 joydev
仅考虑 HID 按钮使用页面中的按钮,但较新的游戏手柄有时会定义具有不同用途的特殊按钮。这对于 Android 游戏手柄来说尤其常见,它们对 Home 和 Back 按钮具有非按钮用法。 joydev
.
另一个很大的区别:joydev
纯粹是为了输入。 evdev
支持游戏手柄震动和力反馈效果。