hilfe bei der benutzung von struct

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

ich will daten meines openmoko freerunner touchscreens auslesen
mit:

Code: Alles auswählen

import struct

fmt = 'iiIll'
size = struct.calcsize(fmt)

f =  file('/dev/input/touchscreen0', 'rb')

while True:
	read = f.read(size)
	print struct.unpack(fmt, read)
bekomme ich falsche daten

was mache ich falsch?

Code: Alles auswählen

struct ts_sample {
	int		x;
	int		y;
	unsigned int	pressure;
	struct timeval	tv;
};

typedef struct timeval {
  long tv_sec;
  long tv_usec;
} timeval;
danke!
cp != mv
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Ich rate nur mal ... probier mal folgende struct-formate:

Code: Alles auswählen

fmt = '=iiIll'
fmt = '>iiIll'
fmt = '>iiIll'
Gibt eines die richtigen Daten?
Sind einfach verschienede Byteorder und Alignings.

Ich würde dir aber pyconstruct nahelegen, da man damit einfach Daten parsen kann.

Gruss
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

hab ich auch schon ausprobiert...., ging nicht :cry:


pyconstruct scheint ganz interessant zu sein, ist aber fuer diesen einsatzweck voellig overkill
cp != mv
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Stimmen denn die Daten ungefähr?

Also mach mal

Code: Alles auswählen

print read.encode('hex')
Gruss
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

Code: Alles auswählen

root@om-gta02:~# python touchscreen.py 
Traceback (most recent call last):
  File "touchscreen.py", line 12, in <module>
    print read.encode('hex')
LookupError: no codec search functions registered: can't find encoding
:lol:


vieleicht kannst du mir "print repr(read)" was anfangen?

Code: Alles auswählen

root@om-gta02:~# python touchscreen.py 
'\xc2\x88mI<o\x02\x00\x03\x00\x00\x00\xd8\x01\x00\x00\xc2\x88mI'
========
'eo\x02\x00\x03\x00\x01\x00\x1e\x02\x00\x00\xc2\x88mImo\x02\x00'
========
'\x01\x00J\x01\x01\x00\x00\x00\xc2\x88mIso\x02\x00\x03\x00\x18\x00'
========
'\x01\x00\x00\x00\xc2\x88mIyo\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00'
========
'\xc2\x88mI~o\x02\x00\x01\x00J\x01\x00\x00\x00\x00\xc2\x88mI'
========
'\x83o\x02\x00\x03\x00\x18\x00\x00\x00\x00\x00\xc2\x88mI\x88o\x02\x00'
========
'\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x88mI\x1c\xf8\x02\x00\x03\x00\x00\x00'
========
'\xe9\x01\x00\x00\xc2\x88mI1\xf8\x02\x00\x03\x00\x01\x00\x1b\x02\x00\x00'
========
'\xc2\x88mI8\xf8\x02\x00\x01\x00J\x01\x01\x00\x00\x00\xc2\x88mI'
========
'=\xf8\x02\x00\x03\x00\x18\x00\x01\x00\x00\x00\xc2\x88mIB\xf8\x02\x00'
========
'\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x88mI2F\x03\x00\x03\x00\x00\x00'
========
'\xd5\x01\x00\x00\xc2\x88mIIF\x03\x00\x03\x00\x01\x00\x0e\x02\x00\x00'
========
'\xc2\x88mIQF\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x88mI'
========
'S\x94\x03\x00\x03\x00\x00\x00\xff\x01\x00\x00\xc2\x88mIi\x94\x03\x00'
<snipp>
cp != mv
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Bist du sicher dass aus dem Device wirklich diese structs herauskommen?

Wie gross sind die Datentypen int und long auf openmoko? Auch 32Bits?

Die Folge \xc2\x88mI kommt immer wieder vor, ich nehme mal an das koennte nicht sein wenn du immer wieder woanders geklickt hast.

Irgendwie siehts aus als waere das ganze nur 16Byte gross und nicht 20 (\xc2\x88mI sieht aus wie ein Header, etwas konstantes sollte es ja nicht geben bei den klicks oder?)

Gruss
Antworten