Сканкоды клавиатуры? - PullRequest
       22

Сканкоды клавиатуры?

3 голосов
/ 18 сентября 2008

текстовая консоль GNU / Linux, X11 не задействован, даже не задействован установлены. Клавиатура для США, раскладка для США по умолчанию. ядро версия 2.20.x или выше.

Приложение, написанное на C, получает ввод с клавиатуры в режим перевода, то есть XLATE или UNICODE. Когда ключ нажата, приложение получает соответствующий KeyString. В качестве примера вы нажимаете F1, приложение читает "\033[[A".

Прежде чем ядро ​​отправит строку ключей в приложение, оно должен знать, какая клавиша нажата, т.е. сканкод. В приведенном выше примере F1 скан-код для ключа нажата 59 или 0x3b.

То есть, даже когда клавиатура находится в режиме перевода, сканкоды хранятся где-то в памяти. Как можно приложение получает к ним доступ, не переключая клавиатуру на RAW или MEDIUMRAW режим? Фрагмент кода поможет.

Ответы [ 4 ]

2 голосов
/ 19 сентября 2008

Скорее всего, вы вводите команды ioctl с неверным файловым дескриптором, проверьте коды ошибок, возвращаемые из ioctl и tcsetattr.

Вы должны открыть консольное устройство, а затем выполнить команды перевода клавиатуры на этом устройстве. Вы должны в основном подражать тому, что делает X-сервер.

Это ссылка на исходный код codesearch.google.com .

1 голос
/ 18 сентября 2008

Конечно, код, который вы хотите посмотреть, находится в kbd-1.12.tar.bz2, который является исходным пакетом для пакета 'kbd'. Пакет «kbd» предоставляет такие инструменты, как «dumpkeys», «showkeys» и «loadkeys», которые полезны для просмотра текущего сопоставления клавиатуры, проверки того, какие клавиши генерируют какие коды сканирования, и загрузки нового сопоставления.

Вам нужно будет общаться с ядром через ioctls, и это довольно сложно, поэтому я рекомендую прочитать исходный код этого пакета, чтобы увидеть, как это делается.

Вот ссылка на архив: kbd-1.12.tar.bz2 (618K) .

0 голосов
/ 18 сентября 2008

Возможно, вы захотите взглянуть на kbdev или evdev (для начала посмотрите на файл Documentation/input/input.txt в исходном каталоге ядра). Это будет работать для доступа к консоли.

0 голосов
/ 18 сентября 2008

В терминал я ввел

dumpkeys -f > test.txt

и было много подробной информации, в том числе:

код клавиши 29 = Контроль
...
строка F1 = "\ 033 [[A"
строка F2 = "\ 033 [[B"
строка F3 = "\ 033 [[C"
строка F4 = "\ 033 [[D"
строка F5 = "\ 033 [[E"
строка F6 = "\ 033 [17 ~"
строка F7 = "\ 033 [18 ~"
строка F8 = "\ 033 [19 ~"
...
строка Prior = "\ 033 [5 ~"
string Next = "\ 033 [6 ~"
Строка Macro = "\ 033 [M"
строка Pause = "\ 033 [P"

dumpkeys был включен по умолчанию в мой дистрибутив. Но вы должны быть в состоянии найти его в том, что написал в jerub Я бы начал с поиска kbd-1.12/src/loadkeys.y.

Похоже, что ядро ​​отвечает за хранение этих данных и может отчитываться перед теми, кто знает, как спрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...