/ dev / input / eventX和/ dev / input / jsX有什么区别?

问题描述 投票:0回答:1

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

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

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

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

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

设备文件之间有什么区别?为什么它们具有不同的信息,并且event23提供了比js1更多的信息?

linux input joystick gamepad evdev
1个回答
0
投票
/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游戏手柄时,evdevjoydev使用设备的HID报告描述符中的信息来检测按钮和轴输入的数量。 joydev仅考虑“ HID按钮用法”页面中的按钮,但是较新的游戏手柄有时会定义具有不同用法的特殊按钮。这对于Android游戏手柄来说尤其常见,因为Home和Back按钮具有非Button用法。 joydev不会拾取这些按钮。

另一个巨大的区别:joydev纯粹是用于输入。 evdev支持游戏手柄隆隆声和强制反馈效果。

© www.soinside.com 2019 - 2024. All rights reserved.