Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб11_ЮСБ.doc
Скачиваний:
13
Добавлен:
21.12.2018
Размер:
1.78 Mб
Скачать

Работа с мышью.

Код класса для устройств, принадлежащих к группе 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 интерфейс. Программа определяет, подключена ли мышь, выводит курсор в текстовом режиме. Выход из программы осуществляется по нажатию левой кнопки мыши.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]