Здравствуйте! Собрал простенький примерчик переключения LEDs индикаторов на клавиатуре. Про то, как это делается, много где написано. Но про то, как считать их состояние, работая с портами ввода/вывода контроллера i8042, для возврата в начальное состояние, никак найти не могу. Программка работает как драйвер режима ядра под NT 5.1. Подскажите, как решить данную задачу, используя порты ввода/вывода или состояние некой ячейки памяти, как это было в в DOS, не прибегая к экспорту каких либо функций. С уважением Subrealist
Mika0x65 Благодарю за помощь. Одно из решений там есть. Но оно касается использования функций ядра. Хотелось бы, хотя бы из чистого любопытства, узнать, можно ли решить эту задачу не прибегая к импорту
Great невнимательно прочитал, сорри Mika0x65 там не то Subrealist а почему бы и нет? посомотри АРХИТЕКТУРА ВВОДА-ВЫВОДА ПЕРСОНАЛЬНЫХ ЭВМ IBM PC. раздел 6.2 Клавиатура IBM PC AT
Subrealist Могу предложить еще вот эту ссылку. Беда в том, что я абсолютно не помню, как читать LEDs, помню только ссылки .
rain Команда 0edh на 064h порту переключает светодиоды. В псевдодрайвере я использовал именно её, только на 60h. Port 60h is for writing data and is maintained for compatibility with earlier models. If the examples using port 64h don't work, try using 60h. Переключение работает. Требуется сохранить первоначальное состояние для последующего востановления
Поправте, если я что понял не так Как я понял, если и есть возможность считать данные о состоянии светодиодов клавиатуры пользуясь портами ввода/вывода, то найти информацию о ней трудно. Свидетельство тому - масса примеров, как изменить их состояние через запись в порты 60h, 64h команды 0edh, но примеров считывания их состояния через порты мне найти не удалось. В досе для получения их состояния использовалось слово в сегменте данных BIOS по адресу 0417h. В Windows информация о состоянии LEDs храниться в элементе Extension->KeyboardIndicators.LedFlags объекта драйвера клавиатуры. Его значение инициализируется данными по умолчанию, используется для установки LEDs и изменяясь драйвером при нажатии соответствующих клавишь, используется для изменения состояния LEDs.
Дык может их просто нельзя прочитать, а только записать через порты? А прочитать через дров можно потому, что он их запоминает при изменении... хотя это лишь гипотеза. лень рыться
Great Наверное, так и есть. Драйвер как раз запомненное в его объекте значение и выдаёт. В досе тоже обработчик прерывания клавиатуры с запомненным значением работал. Хотелось более точно определиться с отсутствием такой возможности
Все верно. Нельзя прочитать ни состояние светодиодов, но и настроек клавиатуры. Именно поэтому состояние и хранится в памяти. Сам одно время искал, как считать статус и настройки, но вообще ничего не нашел, по крайней мере, в официальных доках подобные возможности даже не упоминаются. Да и исследование виндозных дров ничего не дали.
Subrealist Может быть это поможет. "Цветомузыка на CapsLock, NumLock и ScrollLock" в аттаче сорц и ехе