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

val*_*ica 7 c linux uinput

我找不到信息,如何使用uinput/ 创建带有几个按钮的操纵杆suinput.python使用示例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()
Run Code Online (Sandbox Code Playgroud)

如您所见,在此示例中使用BTN_JOYSTICKas按钮.如何创建第二个按钮/上瘾两个ABS_X/ ABS_Y

注:我使用python为例,应用语言是Clibsuinput.

Rom*_*mov 4

更多按钮 - 更多按钮代码。最初按钮代码是linux/input.h从用户空间角度或uapi/linux/input-event-codes.h从内核角度在标头中定义的。对于 python,它们在ev.py. 正如您所看到的,它们有很多,您最感兴趣的是BTN_JOYSTICK和之间的事物BTN_THUMBR(但BTN_TRIGGER_HAPPY有些人也使用值)。最有趣的是BTN_THUMBBTN_PINKIEBTN_[ABC]BTN_SELECTBTN_START

对于附加轴,请选择ABS_X和之间的任意一个ABS_MISC。最有趣的附加项是ABS_R[XYZ]ABS_HAT0[XYZ]

因此,要使用附加按钮/轴,您只需以BTN_JOYSTICKABS_X和 一起使用的相同方式使用这些标识符ABS_Y即可。

现在,另一个有趣的问题可能是您尝试模拟的真实操纵杆使用此列表中的哪些值。该值可以通过使用evtestevemu程序获得(当然使用真实的操纵杆)。这里还讨论了一些广泛使用的操纵杆(Xbox 和 PS3)(如您所见,操纵杆生成的按钮代码非常不同)。为了真正确定(或者模拟某些您无法使用 evtest 检查的设备),您还可以查看真正的操纵杆驱动程序(只是BTN_以及ABS_它们使用的东西)。