Lib(s)输入:创建带有多个按钮的游戏杆
我找不到信息,如何使用uinput / suinput创建带有几个按钮的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()
正如你所看到的,在这个例子中使用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_X ABS_MISC 。 最有趣的附加功能是ABS_R[XYZ]和ABS_HAT0[XYZ] 。
因此,要使用额外的按钮/轴你只是在你用同样的方式使用这些标识符BTN_JOYSTICK与ABS_X和ABS_Y 。
现在,另一个有趣的问题可能是您尝试模拟的真实游戏杆使用此列表中的值。 这个值可以通过使用evtest或evemu程序(当然使用真正的游戏杆)来获得。 这里还讨论了一些广泛使用的游戏杆(Xbox和PS3)(正如您所看到的,游戏杆在生成的按钮代码上有很大不同)。 要真正确定(或者模拟一些你不能用evtest进行检查的设备),你还可以看看真正的摇杆驱动器(只是BTN_和ABS_他们使用的东西)。
上一篇: Lib(s)uinput: creating joystick with more than one button
