本来是奎克质造生产的模拟飞行设备QMCP737C
https://x-plane.vip/quickmade/qmcp737c/
我在写软件,支持全平台win/lin/mac,和模拟飞行平台X-Plane 11保持一致。结果WIN/MAC对设备支持没问题,插上就可以用。
但是Linux,插上也可以用,但是只剩80个按键,明明我的设备是104个按键,结果只识别出80个按键。
然后用各种关键字max USB HID button number之类一顿GOOGLE搜索,无果。
我记得Linus说过,你不要以为所谓别人会解决问题,如果问题是你发现的,那么你就是解决问题的最佳人选。此话值得回味。
好吧先看看Linux内核代码,这个神奇的数字80到底来自何方?
一顿80内核搜索,无果。
80=0x50,再是一顿代码搜索,同样无果。
终于读了一下逻辑,发现80确实有来头,下载ubuntu内核代码,经过几个小时的下载,编译,再修改编译,然后奇迹发生了。104个按键全部出来。
提交代码给内核社区,未来受益全人类了
https://patchwork.kernel.org/patch/11657985/
我编译的测试内核linux-image-4.15.18_2.0.qmcp737c_amd64.deb,这个内核,我连Nvidia Vulkan都能跑起来,所以也可以用于运行X-Plane 11.50。可以免费下载
https://download.csdn.net/download/cpuwolf/12600014
自定义新内核
关于input驱动的官方信息在这里
https://www.kernel.org/doc/Documentation/input/input.txt
对于飞行模拟平台X-Plane 11.50b14,从启动的log看,ring3 APP识别到了设备,但是依然是80个按键,应该和/dev/input/event3的代码相关
0:00:04.305 D/HID: Hardware ADDED(0483, 5680) - QuickMake QMCP737C at path /dev/input/event3 - Has 79 buttons, 0 hat switch