我找不到有关如何使用 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
为例,应用程序语言是 C
和 libsuinput
。
最佳答案
更多按钮——更多按钮代码。从用户空间的角度来看,最初按钮代码是在 linux/input.h
header 中定义的,或者 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]
。
因此,要使用这些额外的按钮/轴,您只需使用这些标识符,就像将 BTN_JOYSTICK
与 ABS_X
和 ABS_Y
一起使用一样。
现在,另一个有趣的问题可能是您尝试模拟的真实操纵杆使用了此列表中的哪些值。此值可以通过使用 evtest 获得或 evemu程序(当然使用真正的操纵杆)。一些广泛使用的操纵杆(Xbox 和 PS3)也是 discussed here (如您所见,操纵杆产生的按钮代码非常不同)。为了真正确定(或模拟某些您无法使用 evtest 检查的设备),您还可以查看 real joystick drivers (只是 BTN_
和 ABS_
他们使用的东西)。
关于c - Lib(s)uinput : creating joystick with more than one button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39559063/