2012-07-11 20 views
6

Estoy tratando de convertir los eventos del teclado leídos de/dev/input/event0 de los valores definidos en su equivalente ASCII dentro de una aplicación incrustada que es no ejecutando X o una terminal.¿Cómo puedo traducir los códigos clave de Linux de/dev/input/event * a ASCII

Creo que esto debería hacerse a través de la funcionalidad del mapa de teclas definida en Linux en lugar de simplemente crear mi propio estándar :: <> pero parece que no puedo encontrar un buen lugar para comenzar. La mayoría de los ejemplos que he encontrado hasta ahora asumen que estoy ejecutando X ventanas o con una terminal.

+0

Encontrar el código fuente de cualquier implementa el terminal podría ser interesante. Aunque puede estar enterrado en más de 40 años de abstracción para admitir terminales heredados. –

+0

Sí, he estado cavando a través de kdb-1.12.tar.gz pero seguí perdiendo el rastro. –

+0

¿Esto ayuda? [Publicado por Derek @ TheDailyLinux en la programación »Obtener entrada del teclado sin procesar desde el nodo del dispositivo del evento (/dev/input/event)](http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from -event-device-node-devinputevent /) – kbulgrien

Respuesta

1

La entrada de texto (excepto en el caso muy simple del teclado tradicional estadounidense y el estándar ASCII de 7 bits) es un campo inmensamente complicado. Le sugiero encarecidamente que haga esto utilizando un cliente X, donde puede aprovechar todos los métodos de entrada existentes.

Pero si debes hacerlo, y estás satisfecho con un tipo de teclado y un idioma, hazlo interpretando los eventos como lo haría un terminal. Consulte la definición en /usr/include/linux/input.h para conocer los valores. Siga la posición de las teclas Mayús y Ctrl (las teclas que no sean ASCII como Alt, Fn, etc. dependen de usted para interpretar, por supuesto) y emitirá el byte correspondiente en el evento de tecla arriba. Quizás también desee implementar un recurso de repetición automática si los valores predeterminados no funcionan para su aplicación.

Pero, básicamente, no. Este es un problema mucho (!) Más difícil de lo que parece darse cuenta.

Cuestiones relacionadas