我找不到信息,如何使用uinput/suinput创建带有多个按钮的操纵杆。使用python-uinput的python示例
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。
发布于 2016-09-22 05:22:20
更多按钮-更多按钮代码。最初,按钮代码从用户空间的角度定义在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_ )。
https://stackoverflow.com/questions/39559063
复制相似问题