Lib(s)input:创build具有多个button的游戏杆

我找不到信息,如何使用uinput / suinput创build带有几个button的suinput 。 使用python-uinput

 import uinput def main(): events = ( uinput.BTN_JOYSTICK, uinput.ABS_X + (0, 255, 0, 0), uinput.ABS_Y + (0, 255, 0, 0), ) with uinput.Device(events) as device: for i in range(20): # syn=False to emit an "atomic" (5, 5) event. device.emit(uinput.ABS_X, 5, syn=False) device.emit(uinput.ABS_Y, 5) device.emit_click(uinput.BTN_JOYSTICK) if __name__ == "__main__": main() 

正如你所看到的,在这个例子中使用BTN_JOYSTICK作为button。 而如何创build第二个button/成瘾两个ABS_X / ABS_Y

注意:我使用python作为示例,应用程序语言是使用libsuinput C语言。

更多按钮 – 更多按钮代码。 最初的按钮代码是从用户空间透视图的linux/input.h头文件或者从内核透视图的uapi/linux/input-event-codes.h的。 对于python,它们被复制到ev.py 。 正如你所看到的,它们有很多,而且你最感兴趣的是BTN_JOYSTICKBTN_THUMBR之间的东西(但也有一些BTN_TRIGGER_HAPPY值)。 最有趣的是BTN_THUMBBTN_PINKIEBTN_[ABC]BTN_SELECTBTN_START

至于附加轴,选择ABS_XABS_MISC之间的任何ABS_MISC 。 最有趣的附加的是ABS_R[XYZ]ABS_HAT0[XYZ]

所以要使用额外的按钮/轴,只需使用这些标识符就像使用ABS_XABS_Y一样使用ABS_Y

现在,另一个有趣的问题可能是来自这个列表的值是否被真正的游戏杆使用,你试图效仿。 这个值可以通过使用evtest或evemu程序(当然使用真正的游戏杆)来获得。 一些广泛使用的游戏杆(Xbox和PS3)也在这里讨论 (你可以看到,游戏杆在他们生产的按键代码上有很大的不同)。 要真正确定(或者模拟一些你不能用evtest进行检查的设备),你还可以看看真正的游戏杆驱动 (仅仅是BTN_ABS_东西)。