Seite 1 von 1

hilfe bei der benutzung von struct

Verfasst: Mittwoch 14. Januar 2009, 11:06
von Costi
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!

Verfasst: Mittwoch 14. Januar 2009, 11:23
von rayo
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

Verfasst: Mittwoch 14. Januar 2009, 15:32
von Costi
hab ich auch schon ausprobiert...., ging nicht :cry:


pyconstruct scheint ganz interessant zu sein, ist aber fuer diesen einsatzweck voellig overkill

Verfasst: Mittwoch 14. Januar 2009, 15:47
von rayo
Stimmen denn die Daten ungefähr?

Also mach mal

Code: Alles auswählen

print read.encode('hex')
Gruss

Verfasst: Donnerstag 15. Januar 2009, 13:07
von Costi

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>

Verfasst: Donnerstag 15. Januar 2009, 14:03
von rayo
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