2012-07-11 9 views
6

Sto provando a convertire gli eventi della tastiera letti da/dev/input/event0 dai valori definiti nel loro equivalente ASCII all'interno di un'applicazione incorporata che è non esegue X o un terminale.Come posso convertire i codici chiave Linux da/dev/input/event * in ASCII

Penso che questo dovrebbe essere fatto tramite la funzionalità della mappa di chiavi definita all'interno di Linux piuttosto che creare la mia std :: map <> ma non riesco a trovare un buon punto di partenza. La maggior parte degli esempi che ho trovato finora presuppongono che io stia correndo con X windows o con un terminale.

+0

Trovare il codice sorgente di qualsiasi implementa il terminale potrebbe essere interessante. Anche se potrebbe essere sepolto sotto i 40 anni di astrazione per supportare i terminali legacy. –

+0

Sì, ho scavato attraverso kdb-1.12.tar.gz ma ho continuato a perdere la pista. –

+0

Questo aiuto? [Inserito da Derek @ TheDailyLinux in Programmazione »Immetti input tastiera raw dal nodo Device Event (/dev/input/event)](http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from -Event-dispositivo-node-devinputevent /) – kbulgrien

risposta

1

L'input di testo (ad eccezione del caso molto semplice della tastiera tradizionale statunitense e dello standard ASCII a 7 bit) è un campo estremamente complicato. Ti suggerisco caldamente di farlo utilizzando un client X, in cui puoi sfruttare tutti i metodi di input esistenti.

Ma se si deve, e si è soddisfatti con un tipo di tastiera e una lingua, lo si fa interpretando gli eventi proprio come farebbe un terminale. Controllare la definizione in /usr/include/linux/input.h per i valori. Tieni traccia della posizione dei tasti Maiusc e Ctrl (i tasti non ASCII come Alt, Fn, ecc ... sono a tua discrezione per interpretare, ovviamente) ed emetti il ​​byte corrispondente sull'evento key up. Forse vorrai implementare anche una funzione di ripetizione automatica se i valori predefiniti non funzionano per la tua applicazione.

Ma fondamentalmente: no. Questo è un (molto) problema più difficile di quanto sembri realizzare.

Problemi correlati