XBox 360 Analog Stick

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

Hallo,
ich habe jetzt das wunderbare Vergnügen die Analog Sticks meines XBox Controllers zu programmieren.

Und ja, ich hatte gedacht, man müsste lediglich die X und Y Werte der Achsen auslesen.

Nun, ich habe 4 bytes aus denen ich etwas basteln muss.

Daher hatte ich vermutet, daß 2 bytes pro Achse (256*2) genutzt werden.

Leider komme ich zu keinen brauchbaren Ergebnissen.

Mein Code sieht im Moment etwa so aus:

Code: Alles auswählen

events = (
    uinput.ABS_X,
    uinput.ABS_Y,
    #undokumentierte Schreibweise:
    #uinput.ABS_Y + (min, max, ?, ?)
    #uinput.ABS_Y + ( 0, 255, 0, 0),
    )

## LAnalog bytes[10:14]
## Vermutete Werte:
## x=2bytes, y=2bytes ???, values=65536, center=32768
##minDeadzone~0+6000, maxDeadzone~65536/2 +- 3000 ??

with uinput.Device(events) as device:
    for i in range(2000):
        x =0 ; y=0
        data = dev.read(0x81, 29 , 0)
        
        x=(data[10]*data[13])
        y=(data[12]*data[11])
        
        if x > 3000 and x < 29000:
            device.emit(uinput.ABS_X, -5, syn=False)
            #device.emit_click(uinput.KEY_A)
            print("-x", x)
Mag sein, daß meine Herangehensweise auch falsch ist, ich wäre für jede Hilfe dankbar.

Mfg d
Zuletzt geändert von Anonymous am Donnerstag 22. Dezember 2016, 13:44, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

@djevil: Du rätst, was Du aus 4 Bytes zusammenbasteln kannst? Und Dir kommt dabei ein Produkt zweier Zahlen überkreuz in den Sinn? Nach welcher Dokumentation arbeitest Du da?

Wenn ich etwas raten müßte, würde ich ja auf sowas kommen:

Code: Alles auswählen

x, y = struct.unpack_from("<hh", data, 10)
djevil
User
Beiträge: 58
Registriert: Montag 22. August 2016, 14:28

@Sirius3
Wenn ich etwas raten müßte, würde ich ja auf sowas kommen:
Da hast du aber verdammt gut geraten :)
Und Dir kommt dabei ein Produkt zweier Zahlen überkreuz in den Sinn?
Ne, hab nur ein bischen rumprobiert,

aber auf "struct.unpack_from" wäre ich wohl nie gekommen, muss ich mir bei Gelegenheit mal näher angucken..

Vielen,vielen Dank, und Frohe Weihnachten.

Mfg djevil
BlackJack

@djevil: Du hättest auch ”manuell” die beiden Werte aus jeweils zwei Bytes der Daten berechnen können.
Antworten