- •Лабораторная работа
- •Структура usb.
- •Физический интерфейс.
- •Модель передачи данных.
- •Типы передачи данных.
- •Протокол.
- •Форматы пакетов.
- •Работа с мышью.
- •Листинг программы для работы с мышью через интерфейс usb (ос Dos):
- •Блок-схема алгоритма:
- •Работа с принтером.
- •Листинг программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb.
- •Блок-схема алгоритма программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb
- •Листинг программы для работы с принтером (ос Windows хр) через интерфейс usb.
- •Блок-схема алгоритма:
- •Результат работы программы:
- •Контрольные вопросы:
- •1. Опиши те все, что вы знаете о хост-контроллерах.
- •3. Опишите четыре базовых типа передачи данных, предусмотренных протоколом usb.
- •4. Опишите реализацию запросов к usb устройствам.
- •5. Что такое Human Interface Devices?
- •6. Опишите все, что вы знаете о рапортах.
- •7. Опишите разряды слова состояния конечной точки.
- •8. Опишите модель передачи данных.
- •9. Перечислите и опишите основные операции при работе с интерфейсом usb.
- •10. Опишите формат пакетов передаваемых данных.
- •11. Что вы знаете об однонаправленном и двунаправленном интерфейсах?
- •12. Как проверить принадлежность устройства к классу принтеров?
- •13. Опишите особенности и принцип работы с принтером через usb интерфейс.
- •14. Какие командные языки используются для управления процессом печати?
- •15. Как производится программный сброс принтера?
- •16. Опишите назначение полей bDeviceClass, bDeviceSubClass, bDeviceProtocol в дескрипторе устройства.
- •17. Что происходит по запросу Get Port Status?
- •18. Что происходит по запросу Get Device id?
Работа с мышью.
Код класса для устройств, принадлежащих к группе HID, имеет значение 03h. Мышь и клавиатура участвуют в процессе начальной загрузки компьютера, поэтому их относят к подклассу загрузочных устройств (Boot Devices), который обозначается кодом 01 h. Код протокола для клавиатуры имеет значение 01 h, а для мыши — значение 02h.
Пакет данных о текущем состоянии устройства HID и выполняемых с ним операциях именуется в документации рапортом (report) . Мышь передает хосту рапорты в режиме передачи по прерываниям. Поскольку мышь является загрузочным устройством, начальный участок рапорта стандартизирован:
-
байт 0 содержит информацию о состоянии клавиш мыши;
-
байт 1 передает значение перемещения по оси X;
-
байт 2 передает значение перемещения по оси Y.
Назначение остальных байтов рапорта мыши определяется изготовителем (для так называемых трехкоординатных устройств координата Z обычно передается в байте 3).
Значение перемещения передается в виде двоичного числа со знаком (при определении знака предполагается, что ось X направлена слева направо, ось Y — сверху вниз).
Структура байта 0 стандартизирована не полностью:
-
бит 0 — состояние клавиши 1 (0 — отпущена, 1 — нажата);
-
бит 1 — состояние клавиши 2 (0 — отпущена, 1 — нажата);
-
бит 2 — состояние клавиши 3 (0 — отпущена, 1 — нажата);
-
биты 3-7 используются по усмотрению изготовителя устройства.
Значение бита 0 соответствует состоянию левой клавише мыши.
Размер рапорта определяется изготовителем, но не может быть меньше трех байт. Получить размер рапорта в байтах можно из поля максимального размера пакета в дескрипторе конечной точки. Если включен режим эмуляции стандартного периферийного оборудования (мыши и клавиатуры PS/2), BIOS обрабатывает только стандартную часть рапорта мыши, а остальные данные отбрасывает. По этому же принципу можно строить простые универсальные программы для работы с изделиями разных изготовителей на аппаратном уровне, то есть принимать рапорт целиком, но обрабатывать только первые три байта.
В листинге приведена программа USB_Mouse, которая производит поиск мыши по портам хост-контроллера, а затем выводит курсор мыши на экран; программа контролирует состояние левой кнопки мыши и завершает свою работу при нажатии на нее. Программа использует следующие процедуры:
-
процедура IntEndpointDescriptor позволяет определить номер конечной точки, осуществляющей передачу данных от мыши, и размер передаваемого блока данных;
-
процедура InterruptIN_Transaction осуществляет прием данных от мыши в режиме передачи по прерываниям;
-
процедура ShowNewMouseCursorPosition отображает курсор мыши на экране монитора путем инверсии байта атрибута символа.
Далее будет представлен основной модуль программы, реализующий работу с манипулятором мышь через USB интерфейс. Программа определяет, подключена ли мышь, выводит курсор в текстовом режиме. Выход из программы осуществляется по нажатию левой кнопки мыши.