Gamepad mit Python auslesen -> IOError

OP #3464616
Lesenswert?
• ▲
▼
Hallo,

ich habe hier einen kleinen TL-MR3020-Router mit OpenWRT drauf, an dem 
über einen Hub ein Gamepad angeschlossen ist. Treiber funktioniert auch, 
denn mit etwas gewackel an den Buttons/Sticks ergibt sich:
1
root@OpenWrt:~# cat /dev/input/js0 | hexdump
2
0000000 007f c984 0000 8100 007f c984 0000 8101
3
0000010 007f c984 0000 8102 007f c984 0000 8103
4
0000020 007f c984 0000 8104 007f c984 0000 8105
5
0000030 007f c984 0000 8106 007f c984 0000 8107
6
0000040 007f c984 0000 8108 007f c984 0000 8109
7
0000050 007f c984 0000 810a 007f c984 0000 810b
8
0000060 007f c984 0000 8200 007f c984 0000 8201
9
0000070 007f c984 0000 8202 007f c984 0000 8203
10
0000080 007f c984 0000 8204 007f c984 0000 8205
11
0000090 007f c984 7fff 8206 007f d460 0001 0100
12
00000a0 007f d4c4 0000 0100 007f d6f4 0001 0100
13
00000b0 007f d730 0001 0101 007f d74e 0000 0100
14
^C
15
root@OpenWrt:~#

Ziel ist jetzt, das ganze mit Python auszuwerten und letztendlich einen 
Roboter steuern. Also erst mal das Auslesen testen:
1
root@OpenWrt:~/gamepad# cat gamepad.py 
2
#!/usr/bin/env python
3
import sys
4

5
gamepad = open('/dev/input/js0','r')
6

7
print(gamepad)
8

9
test = gamepad.read(1)
10
print(test)
11

12
gamepad.close()
13
root@OpenWrt:~/gamepad# ./gamepad.py 
14
<open file '/dev/input/js0', mode 'r' at 0x77408e38>
15
Traceback (most recent call last):
16
  File "./gamepad.py", line 8, in <module>
17
    test = gamepad.read(1)
18
IOError: [Errno 22] Invalid argument
19
root@OpenWrt:~/gamepad#

Weis damit jemand was anzufangen? Gemacht habens auch schon andere, z.B. 
http://upgrayd.blogspot.de/2011/03/logitech-dual-action-usb-gamepad.html

Würde mich über einen Tipp freuen ;-)
Gast #3465253
Lesenswert?
• ▲
▼
Simon S. schrieb:
> Weis damit jemand was anzufangen?

Steht da doch:
Simon S. schrieb:
> Traceback (most recent call last):
>   File "./gamepad.py", line 8, in <module>
>     test = gamepad.read(1)
> IOError: [Errno 22] Invalid argument
Du hast die Funktion read() falsch aufgerufen, bzw. gibt es Probleme 
beim lesen.
Um welche Pythonversion handelt es sich?
Probier doch einfach mal read() ohne Argument, oder
1
f = open(file)
2
for line in f:
3
  print(line)

Schau auch hier mal rein: 
http://stackoverflow.com/questions/11662960/ioerror-errno-22-invalid-argument-when-reading-writing-large-bytestring
Kann sein das du das Device im Binarymode oeffnen musst, und nicht im 
normalen readmode.

Gruesse
OP #3465676
Lesenswert?
• ▲
▼
Kaj schrieb:
> Du hast die Funktion read() falsch aufgerufen, bzw. gibt es Probleme
> beim lesen.
http://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects
> To read a file’s contents, call f.read(size), which reads some quantity
> of data and returns it as a string. [...] at most size bytes are read
> and returned. If the end of the file has been reached, f.read() will
> return an empty string ("").
Sollte passen? (BTW: Wenn ich anstatt /dev/input/js0 eine andere leere 
Datei nehme funktioniert es tadellos, es liegt also nicht an fehlendem 
Input)

> Um welche Pythonversion handelt es sich?
2.7.3

> Probier doch einfach mal read() ohne Argument
Genau der selbe Fehler..

>, oder
1
f = open(file)
2
for line in f:
3
  print(line)
Das wirft zwar keinen Fehler, hilft aber leider nicht, weil der Treiber 
kein \n sendet, somit ist die line nie zuende
(Es gibt auch keinen Fehler mit .read(0), aber 0 Zeichen lesen macht 
wenig Sinn :-P )

>
> Schau auch hier mal rein:
> 
http://stackoverflow.com/questions/11662960/ioerror-errno-22-invalid-argument-when-reading-writing-large-bytestring
> Kann sein das du das Device im Binarymode oeffnen musst, und nicht im
> normalen readmode.
'rb', 'r+b', 'r+' hilft auch nicht, genau der selbe Fehler


Danke für deine Hilfe ;)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.