ими пристроями введення. Клавіатура є одним з таких пристроїв, поряд з маніпулятором миша raquo ;, джойстиками, трекбол, ігровими педалями, колесами, шоломами віртуальної реальності та ін.
Архітектура управління інтерактивними пристроями введення базується на стандарті USB Human Interface Device (HID), запропонованому організацією USB Implementers Forum. Однак архітектура не обмежена тільки USB-пристроями і підтримує інші типи пристроїв введення, зокрема, bluetooth-клавіатуру, клавіатуру і мишу, що підключаються по PS/2 порту, а також пристрої, що підключаються по ігровому порту (I/O port 201).
Далі ми розглянемо принципи побудови стека драйверів і стека пристроїв для PS/2-клавіатур, оскільки історично вони є першими типом пристроїв. USB-клавіатури використовують ряд елементів, введених при розробці програмної підтримки PS/2-клавіатур.
1.3.1 Стек драйверів для системних пристроїв введення
Драйвера клавіатури, незалежно від схем фізичного підключення, використовують системні драйвера класу клавіатури для обробки незалежних від апаратної частини операцій. Дані драйвера називаються драйверами класу, так як забезпечують необхідні системою, але не залежні від апаратної реалізації вимоги до конкретного класу пристроїв.
Відповідний функціональний драйвер (драйвер порту) реалізує залежну від конкретного пристрою підтримку виконання операцій введення-виведення. В ОС Windows для x86-платформ реалізований єдиний драйвер системної клавіатури (i8042) і миші.
Малюнок 2. Стек драйверів для Plug and Play PS/2-клавіатур
Стек драйверів містить (зверху вниз) (див. рис.2):
. Kbdclass - верхнеуровневий фільтр-драйвер класу клавіатури;
. опціональний верхнеуровневий фільтр-драйвер класу клавіатури;
. i8042prt - функціональний драйвер клавіатури;
. кореневої драйвер шини.
В ОС Windows 2000 і старше драйвером класу клавіатури є драйвер Kbdclass, основними завданнями якого є:
· забезпечення загальних та апаратно-незалежних операцій класу пристроїв;
· підтримка Plug and Play, підтримка управління живленням і Windows Management Instrumentation (WMI);
· підтримка операцій для legacy-пристроїв;
· одночасне виконання операцій більш ніж одного пристрою;
· реалізація class service callback routine, яка викликається функціональним драйвером для передачі даних з вхідного буфера пристрою в буфер даних драйвера класу пристроїв.
В ОС Windows 2000 і старше функціональним драйвером для пристроїв введення, що використовують PS/2-порт (клавіатури і миші), є драйвер i8042prt, основні функції якого наступні:
· забезпечення апаратно-залежних одночасних операцій PS/2-пристроїв введення (клавіатури і миші поділяють спільні порти введення виведення, але використовують різні переривання, процедури обробки переривань (ISR) і процедури завершення обробки переривань);
· підтримка Plug and Play, підтримка управління живленням і Windows Management Instrumentation (WMI);
· підтримка операцій для legacy-пристроїв;
· виклик class service callback routine для класів клавіатури і миші для передачі даних з вхідного буфера даних i8042prt в буфер даних драйвера класу;
· виклик набору функцій зворотного виклику, які можуть реалізувати драйвера-фільтри високого рівня для гнучкого управління пристроєм.
Список апаратних ресурсів, що використовуються драйвером i8042prt:
· порти введення-виведення (IO) 60h і 64h:
· апаратне переривання IRQ 1;
У показаному драйверного стеці новий драйвер-фільтр може бути доданий, наприклад, для специфічною обробки клавіатурного введення поверх драйвера класу клавіатури. Даний драйвер повинен підтримувати ту ж обробку всіх типів запитів вводу-виводу і керуючих команд (IOCTL), що і драйвер класу клавіатури. У цьому випадку перед передачею в підсистеми користувацького режиму дані будуть віддані на обробку в цей драйвер-фільтр.
. 3.2 Стек пристроїв для Plug and Play PS/2-клавіатури
Малюнок 3. Стек пристроїв для Plug and Play PS/2-клавіатури
Розглянемо тепер стек пристроїв, які створюють зазначені вище драйвера в драйверного стеці клавіатури. На рис.3 зображено стек пристроїв, наведений у MSDN Library для PS/2-клавіатури.
У цілому стек пристроїв (правильніше говорити про стек об'є...