当我在Linux内核v5.14上连接游戏手柄时,会显示两个新设备:
/dev/input/event23
/dev/input/js1
如果我cat <file> | xxd
两个设备文件都提供游戏手柄事件信息。但是event23
比冗长得多js1
。
另外,在上evtest
给出错误Invalid Argument
,js1
但在上可以正常工作event23
。当我同时使用两个设备文件libevdev时,也会发生同样的情况。
看起来像每个事件一样,js1
转储input_event
struct的内容(在中定义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
通常仍可用。
启发式“看起来像操纵杆按钮或轴”有时可能是一个问题joydev
。当HID手柄连接,evdev
并且joydev
在设备的HID报告描述符来检测的按钮和轴输入的数目使用的信息。joydev
仅考虑“ HID按钮用法”页面中的按钮,但是较新的游戏手柄有时会定义具有不同用法的特殊按钮。这对于Android游戏手柄来说尤其常见,因为Home和Back按钮具有非Button用法。这些按钮不会被选中joydev
。
另一个很大的区别:joydev
纯粹是为了输入。evdev
支持游戏手柄隆隆声并强制反馈效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句