OSDev

для всех
Текущее время: 27 апр 2024, 09:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Сканкоды клавиатуры через BIOS int 16h
СообщениеДобавлено: 28 фев 2013, 05:39 

Зарегистрирован: 28 фев 2013, 05:20
Сообщения: 2
Получаю скан-коды клавиатуры через прерывание BIOS int 16h, функцией 0:
Код:
   uint8_t _asciiCode = 0;
   uint8_t _scanCode = 0;
   __asm
   {
      mov ah, 00h
      int 16h
      mov _asciiCode, al
      mov _scanCode, ah
   }

Экспериментально установлено, что приходят сканкоды из набора 1.
Однако выявился ряд странных особенностей:
  • Все приходящие сканкоды однобайтовые. Даже если нажата клавиша, у которой в описании указан двухбайтовый сканкод(например Del).
  • Не приходят сканкоды отпускание клавиш, только на нажатие.
  • Не приходят сканкоды на нажатие клавиш-модификаторов.
  • При нажатой клавише Alt при нажатии цифровых клавиш приходят совсем другие сканкоды. А при нажатии символьных клавиш не приходит никаких сканкодов.

Это всё по большей части можно пережить, за исключением последнего пункта. Я не могу ловить нажатия сочетаний Alt+символьная клавиша (например Alt-[). Подскажите пожалуйста, как можно решить эту проблему наиболее простым способом?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 06:44 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Написать драйвер для клавиатуры.
Это не сложно.
Вешаешь на прерывание свой обработчик.
Который напрямую общается с контроллёро 8042. Проверяешь что источником прерывания является 8042. Читаешь сканкод и переводишь в удобный тебе формат.
Предварительно только надо настроитб 8042. Для совместимости можно ещё старый обработчик вызывать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 10:53 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
megafanat писал(а):
Однако выявился ряд странных особенностей...
Ничего странного. BIOS транслирует оригинальные сканкоды.

Цитата:
Это всё по большей части можно пережить, за исключением последнего пункта. Я не могу ловить нажатия сочетаний Alt+символьная клавиша (например Alt-[). Подскажите пожалуйста, как можно решить эту проблему наиболее простым способом?
Для большинства сочетаний Alt/Ctrl/Shift+Клавиша BIOS возвращает вполне определенные коды (ищи соотв. таблицы в инете по кл. словам "расширенные коды клавиш"). Вроде если на выходе al=0, то в ah находится расширенный код.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 12:50 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Можно биос использовать.
http://docviewer.yandex.ru/?url=ya-disk ... e&page=140
http://docviewer.yandex.ru/?url=ya-disk ... c9&page=50


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 13:50 

Зарегистрирован: 28 фев 2013, 05:20
Сообщения: 2
Как раз проблема в том, что для некоторых сочетаний, например Alt-[ скан-код не приходит.

Впрочем, кажется я нашел частичное решение: вместо функций 00h и 02h можно использовать функции 10h и 12h. Они позволяют ловить сочетания вида Alt-[.

Но к сожалению, все равно остается ложка дегтя: эти функции не ловят сочетание Alt и клавиши со скан-кодом 0x56(обычно расположена справа от левой клавиши Shift). А это сочетание тоже нужно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 фев 2013, 14:57 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
ИХМО самый простой способ - через порты вода вывода. Пишешь драйвер раз и на всегда.
Ты сможешь контролировать одновременное нажатия нескольких клавиш. CTRL, SHIFT работают без вопросов, стрелки работают, мультимедийные клавиши тоже работают.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB