Lib(s)uinput:使用多个按钮创建操纵杆

时间:2016-09-18 15:00:58

标签: c linux uinput

我无法找到信息,如何使用uinput / suinput创建带有多个按钮的操纵杆。关于使用python的{​​{1}}的示例:

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 / ABS_X

注意:我以ABS_Y为例,应用语言为python C

1 个答案:

答案 0 :(得分:3)

更多按钮 - 更多按钮代码。最初的按钮代码在用户空间透视图的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_R[XYZ]ABS_HAT0[XYZ]

因此,要使用其他按钮/轴,您只需使用BTN_JOYSTICKABS_XABS_Y相同的方式使用这些标识符。

现在,另一个有趣的问题可能是这个列表中的值是由你试图模仿的真实操纵杆使用的。可以使用evtestevemu程序(当然使用真实操纵杆)获取此值。一些广泛使用的操纵杆(Xbox和PS3)也是discussed here(如你所见,操纵杆在它们产生的按钮代码上有很大不同)。要确定(或模拟某些设备,您无法使用evtest进行检查),您还可以查看real joystick drivers(仅使用BTN_ABS_个内容。< / p>