8

我找不到信息,如何使用uinput/创建带有几个按钮的操纵杆suinputpython使用示例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_JOYSTICKas 按钮。以及如何创建第二个按钮/附加两个ABS_X/ ABS_Y

注意:我以我python为例,应用程序语言Clibsuinput.

4

1 回答 1

4

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

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

BTN_JOYSTICK因此,要使用额外的按钮/轴,您只需以与使用ABS_X和使用相同的方式使用这些标识符ABS_Y

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

于 2016-09-21T21:22:20.393 回答