2012-07-11 22 views
6

Próbuję konwertować zdarzenia klawiatury odczytane z/dev/input/event0 z wartości zdefiniowanych w ich odpowiedniku ASCII w aplikacji osadzonej, która jest nie działa X lub terminal.Jak mogę przetłumaczyć kody klawiszy Linux z/dev/input/event * na ASCII

Myślę, że powinno się to odbywać za pomocą funkcjonalności mapy klawiszy zdefiniowanej w Linuksie, a nie tylko tworzyć własne std :: map <> ale nie mogę znaleźć dobrego miejsca do rozpoczęcia. Większość przykładów, które do tej pory znalazłem zakłada, że ​​używam X Window lub terminalu.

+0

Znalezienie kodu źródłowego, co realizuje terminal może być interesująca. Chociaż może być pochowany pod ponad 40 lat abstrakcji, aby wspierać stare terminale. –

+0

Tak, przeglądałem kdb-1.12.tar.gz, ale dalej traciłem ścieżkę. –

+0

Czy to pomaga? [Opublikowane przez Derek @ TheDailyLinux w programowaniu »Pobierz surowe wejście klawiatury z węzła urządzenia zdarzeń (/dev/input/event)](http://www.thelinuxdaily.com/2010/05/grab-raw-keyboard-input-from -event-device-node-devinputevent /) – kbulgrien

Odpowiedz

1

Wprowadzanie tekstu (z wyjątkiem bardzo prostego przypadku tradycyjnej amerykańskiej klawiatury i 7-bitowego standardu ASCII) jest niezwykle skomplikowanym polem. Zdecydowanie sugerowałbym, aby zrobić to za pomocą klienta X, w którym można wykorzystać wszystkie istniejące metody wprowadzania danych.

Ale jeśli musisz i jesteś zadowolony z jednego rodzaju klawiatury i jednego języka, robisz to, interpretując zdarzenia tak, jak terminal. Sprawdź definicję w wartościach /usr/include/linux/input.h. Śledź położenie klawiszy Shift i Ctrl (klawisze inne niż ASCII, takie jak Alt, Fn itd.) Są do ciebie w celu interpretacji, oczywiście) i emitują odpowiedni bajt na zdarzenie key up. Być może będziesz chciał zaimplementować funkcję automatycznego powtarzania, jeśli ustawienia domyślne nie będą działać dla ciebie.

Ale zasadniczo: nie rób tego. To jest dużo (!) Trudniejszy problem, niż zdajesz sobie sprawę.