2016-09-18 83 views
7

我无法找到信息,如何使用uinput/suinput创建与它几个按钮操纵杆创造操纵杆。在python例如使用python-uinput库(S)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作为示例,应用语言为Clibsuinput

回答

3

更多按钮—更多按钮代码。最初的按钮代码在用户空间透视图的linux/input.h标题中定义,或者从内核透视图的uapi/linux/input-event-codes.h中定义。对于python,它们在ev.py中被复制。正如你所看到的,它们中有很多,你最感兴趣的是BTN_JOYSTICKBTN_THUMBR之间的东西(但有些值也是BTN_TRIGGER_HAPPY)。最有趣的是BTN_THUMB,BTN_PINKIE,BTN_[ABC],BTN_SELECTBTN_START

至于附加轴,选择ABS_XABS_MISC之间的任何。最有趣的附加的是ABS_R[XYZ]ABS_HAT0[XYZ]

所以要使用额外的按钮/轴,只需使用这些标识符就可以使用BTN_JOYSTICKABS_XABS_Y

现在,另一个有趣的问题可能是您尝试模拟的真实游戏杆使用此列表中的值。这个值可以通过使用evtestevemu程序(当然使用真正的游戏杆)来获得。一些广泛使用的游戏杆(Xbox和PS3)也是discussed here(正如你所看到的,游戏杆在他们生产的按键代码上有很大的不同)。并且要确定(或者模拟一些你不能用evtest检查的设备),你也可以看看real joystick drivers(他们使用的只是BTN_ABS_)。

+0

我看到了,你注册了ruSO。请,公开你在这里回答:http://ru.stackoverflow.com/questions/567511/libsuinput-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0% B8%D0%B5-%D0%B4%D0%B6%D0%BE%D0%B9%D1%81%D1%82%D0%B8%D0%BA%D0%B0-%D1%81-%D0 %BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D0 BC%%%D0%B8- D0%BE%D1% 81%D1%8F%D0%BC%D0%B8-%D0%B8-%D0%BA%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0%D0%BC%D0% B8。 – val