我找不到信息,如何使用uinput / suinput创建带有几个按钮的操纵杆.使用
python-uinput的
python示例:
import uinput def main(): events = ( uinput.BTN_JOYSTICK,uinput.ABS_X + (0,255,0),uinput.ABS_Y + (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作为示例,应用程序语言是带有libsuinput的C.
解决方法
更多按钮 – 更多按钮代码.最初的按钮代码在用户空间透视图中定义在linux / input.h头文件中,或者从内核角度定义为
uapi/linux/input-event-codes.h
.对于python,它们在
ev.py
中被复制.正如你所看到的,它们中有很多并且你最感兴趣的是BTN_JOYSTICK和BTN_THUMBR之间的东西(但BTN_TRIGGER_HAPPY值也被一些人使用).最有趣的是BTN_THUMB,BTN_PINKIE,BTN_ [ABC],BTN_SELECT和BTN_START.
对于附加轴,请在ABS_X和ABS_MISC之间选择任意一个.最有趣的是ABS_R [XYZ]和ABS_HAT0 [XYZ].
因此,要使用其他按钮/轴,您只需使用这些标识符,就像使用带有ABS_X和ABS_Y的BTN_JOYSTICK一样.
现在,另一个有趣的问题可能是这个列表中的值是由你试图模仿的真实操纵杆使用的.可以使用evtest或evemu程序(当然使用真实的操纵杆)获得该值.一些广泛使用的操纵杆(XBox和PS3)也是discussed here(正如你所看到的,操纵杆在它们产生的按钮代码上有很大不同).要确定(或模拟一些你无法用evtest检查的设备),你也可以看看real joystick drivers(他们使用的只是BTN_和ABS_).