Настройка и работа в Linux


              

Клавиатура


Теперь рассмотрим ту часть syscons, которая работает с клавиатурой.

Начнем с самого "низа" - "железного" контроллера клавиатуры. При нажатии на любую клавишу он выдает ее скан-код - некий номер кнопки на клавиатуре. Сразу замечу, что этот скан-код не имеет ничего общего с ASCII-кодами тех символов, которые "нарисованы на кнопках".

Более того, для каждой кнопки контроллер выдает по крайней мере два разных кода - один, когда вы нажимаете кнопку, другой - когда отпускаете ее. Эти коды всегда отличаются на величину 128 (старший бит в байте кода), хотя в данном случае это не так уж и важно. Кроме этого, при нажимании некоторых кнопок (и отпускании) контроллер генерирует скан-коды состоящие из двух байт - "префикса" (обычно это E0) и собственно кода кнопки. Обычно такие скан-коды называют "расширенными".

Основная задача syscons - преобразовать эти скан-коды в соответствующие коды символов. Причем, он делает это в два этапа.

Сначала "сырые" скан-коды (которые считываются из контроллера) преобразуются во внутренние коды syscons. В основном это касается "расширенных" кодов. Для обычных клавиш в качестве внутреннего кода берется просто скан-код, а вот "расширенные" коды заменяются на однобайтные коды (естественно, те, которые не заняты обычными клавишами). Кстати, в документации они обычно тоже называются скан-кодами, но учтите, что это "немного не те" скан-коды.

На втором этапе уже внутренние коды по специальной таблице "раскладки клавиатуры" (keyboard map) преобразуются в обычные ASCII коды символов. Надо заметить, что при этом используется только скан-код "нажатия клавиши".

Наконец, для некоторых клавиш существует еще и третий этап. На этом этапе коды, уже преобразованные через таблицу раскладки, превращаются в последовательность из нескольких кодов (такие клавиши называются "функциональными", но об этом чуть позже).
То есть, при нажатии таких клавиш, получаются опять как бы "расширенные" коды. Естественно, это уже не те "расширенные" скан-коды, которые выдает контроллер клавиатуры (да и клавиши другие).



Содержание  Назад  Вперед