Seite 1 von 1

Device File (/dev/input) lesen

Verfasst: 21.11.2018 18:43
von Programie
Hi,

nach etwa 7 Jahren Pause habe ich mal wieder den Weg zurueck zu PureBasic gefunden. RSBasic hat mich gestern auf eine interessante Idee gebracht: Er verwendet unter Windows eine separate Tastatur fuer Shortcuts. Das moechte ich jetzt unter Linux mit PureBasic umsetzen.

Ich habe schon rausgefunden wie man die Tastatureingaben direkt aus dem Device File liest und verhindert dass der X Server darauf reagiert. Also habe ich mal versucht in PB das Device File mit ReadFile zu oeffen und Bytes rauszulesen. Laut einem Blogartikel ist jedes Keyboard Event 24 Byte lang. Allerdings scheint PB mit den Read* Funktionen auf mehr Bytes zu warten.

Beispiel:

Code: Alles auswählen

EnableExplicit
ReadFile(0, "/dev/input/event12")

Define *memory = AllocateMemory(24)
ReadData(0, *memory, 24)

Debug PeekS(*memory, 16) ; timestamp
Debug PeekW(*memory + 16); type
Debug PeekW(*memory + 18); code
Debug PeekL(*memory + 20); value
Wenn ich das Programm starte, wartet es trotz Eingabe auf der Tastatur auf ReadData. Erst nach etwa 30 Tastendruecken bekomme ich ein Ergebnis obwohl doch durch das erste Event (Key Down) schon 24 Bytes zum Lesen vorhanden sind. Es ist auch kein Read Timeout oder aehnliches, denn wenn ich keine Eingabe mache wartet das Programm ewig.

Mit dem Python Script aus dem Blogartikel funktioniert das Auslesen problemlos.

Hat jemand eine Idee was ich falsch mache?

Re: Device File (/dev/input) lesen

Verfasst: 21.11.2018 19:12
von RSBasic
[ot]
Willkommen zurück. :allright:
[/ot]

Re: Device File (/dev/input) lesen

Verfasst: 21.11.2018 19:16
von Programie
Problem gefunden: File Buffering

Bei ReadFile "#PB_File_NoBuffering" als Flag angegeben und tut.

Re: Device File (/dev/input) lesen

Verfasst: 21.11.2018 20:35
von NicTheQuick
Cool, halt uns mal auf dem Laufenden. :allright: