2016-09-18 11 views
7

Nie mogę znaleźć informacji, w jaki sposób utworzyć joystick z kilkoma przyciskami za pomocą uinput/suinput. Przykład na python użyciu python-uinput:Uznanie ujęcia (lib): tworzenie joysticka za pomocą więcej niż jednego przycisku

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() 

Jak widać, w tym przypadku za pomocą BTN_JOYSTICK jako przycisk. I w jaki sposób utworzyć drugi przycisk/uzależniający dwa ?

Uwaga: jako przykład używam python, językiem aplikacji jest C z libsuinput.

Odpowiedz

3

Więcej przycisków — więcej kodów przycisków. Pierwotnie kody przycisków są zdefiniowane w nagłówku linux/input.h z perspektywy przestrzeni użytkownika lub uapi/linux/input-event-codes.h z perspektywy jądra. W przypadku Pythona są one duplikowane w ev.py. Jak widać, jest ich dużo i interesują Cię głównie rzeczy między BTN_JOYSTICK i BTN_THUMBR (ale wartości te są również używane przez niektórych). Najciekawsze z nich to:, BTN_[ABC], BTN_SELECT i .

Jeśli chodzi o dodatkową oś, wybierz dowolne spośród ABS_X i ABS_MISC. Najciekawsze dodatkowe to ABS_R[XYZ] i ABS_HAT0[XYZ].

Aby korzystać z dodatkowych przycisków/osi, wystarczy użyć tych identyfikatorów w ten sam sposób, w jaki używa się BTN_JOYSTICK z ABS_X i ABS_Y.

Inną ciekawą kwestią jest prawdopodobnie to, jakie wartości z tej listy są używane przez prawdziwe joysticki, które próbujesz naśladować. Wartości te można uzyskać za pomocą programów evtest lub evemu (oczywiście za pomocą prawdziwego joysticka). Niektóre szeroko dostępne joysticki (Xbox i PS3) również były discussed here (jak widać, joysticki są bardzo różne w tym, jakie kody przycisków wytwarzają). I aby być naprawdę pewnym (lub emulować jakieś urządzenie, którego nie można sprawdzić za pomocą evtest), można również spojrzeć na(tylko BTN_ i ABS_ rzeczy, z których korzystają).

+0

Widzę, zarejestrowałeś się na ruSO. Proszę publicznie odpowiedzieć tutaj: 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