2016-09-18 56 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