Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 54

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 48 49 50 51 52 53 < 54 > 55 56 57 58 59 60 .. 166 >> Следующая

8.1. Свойства HID-устройства
Разработка спецификации HID-устройств была основана на следующих ipe-бованиях:
? максимально компактный программный код, требуемый со стороны устройства;
150
Часть III. Практика программирования
? возможность ПО пропускать незнакомую информацию, поступающую от устройства;
? протокол должен быть наращиваемым и устойчивым;
? устройство должно само описывать свои свойства, позволяя создавать базовое (классовое) программное обеспечение.
HID-устройством может быть любое устройство, способное функционировать согласно правилам, определенным спецификацией:
? полноскоростное HID-устройство может передавать вплоть до 60 ООО байт в секунду, т. е. 64 байта в каждом кадре 1 мс (см. разд. 3.5), низкоскоростное — 800 байт в секунду,.т. е. 8 байт каждые 10 мс;
? HID-устройство может устанавливать частоту своего опроса для выяснения, имеет ли устройство новые данные для пересылки;
? весь обмен с HID-устройством происходит с помощью определенной структуры, которая называется репортом (Report). Один репорт может содержать до 65 535 байт данных. Микропрограмма устройства должна содержать дескриптор репорта (Report Descriptor), который описывает структуру данных репорта. Репорт имеет достаточно гибкую структуру для описания любого типа устройства и формата передачи данных;
? HID-устройство должно иметь конечную точку типа Interrupt IN (см. разд. 3.6) для выдачи данных в хост. Дополнительно устройство может иметь конечную точку типа Interrupt OUT для получения периодических данных от хоста;
? HID-устройство должно содержать дескриптор класса и один или более дескрипторов репорта;
? HID-устройство должно поддерживать специфический для класса управляющий запрос Get_Report, а также опционально поддерживать дополнительный запрос Set_Report;
? для передачи данных из устройства в хост устройство должно положить данные репорта в буфер соответствующей конечной точки и разрешить передачу. При получении данных от хоста устройство должно разрешить соответствующую конечную точку, а затем, после прихода пакета, забрать данные из буфера.
HID-устройство должно иметь один или более дескрипторов репорта, которые запрашиваются только после того, как хост определил, что подключенное US В-устройство относится к классу HID.
Обмен между хостом и устройством может производиться с помощью трех видов репортов:
? Input и Output (входные и выходные репорты) используются для передачи и приема периодических данных, например, нажатий клавиш;
гпава 8. HID-устройства
151
? Feature (специальные репорты) используются там, где очень важно время доставки, например, для установки различных параметров устройства и его инициализации.
Обмен данными с хостом (точнее, с HID-драйвером) производится либо по основному каналу сообщений (канал нулевой конечной точки), либо по каналу прерываний (рис. 8.1).
HID-устройство Канал нулевой точки НЮ-драйвер
^--^ Канал INTERRUPT

Рис. 8.1. Каналы обмена HID-устройства и драйвера
Канал нулевой точки используется для следующих операций:
? приема и передачи управляющих посылок;
? передачи данных с помощью запроса Get_Report (будет обсуждаться дальше);
? приема данных от хоста.
Канал прерываний используется для передачи асинхронных (не требуемых хостом) данных: данные с конечной точки читаются только в том случае, если устройство подтверждает наличие новых данных и необходимость их передачи.
Спецификация HID определяет два типа HID-устройств: устройства, участвующие в начальной загрузке и не участвующие. Первый тип называется загрузочные устройства (boot device). К загрузочным устройствам относятся, например, мышь и клавиатура, работа которых начинается с самого начала включения компьютера. Загрузочные устройства должны поддерживать специальные запросы (см. табл. 8.2).
8.2. Порядок обмена данными с HID-устройством
Когда хост запрашивает входной репорт, устройство выдает пакет данных с помощью передачи по прерыванию (т. е. передачи типа interrupt, см. разд. 3.3). Периодичность генерации таких запросов указывается в дескрипторе конечной точки.
При генерации выходных репортов хост посылает данные в устройство, используя управляющие посылки (Control Transfers) или передачу по прерываниям (Interrupt Transfers). Возможность проводить передачи по прерыванию
152
Часть III. Практика программирования
в НШ-устройство доступна только начиная с Windows 98 SE, а более ранние версии Windows 98 будут использовать для выходных репортов управляющие передачи. Если HID-устройство не имеет конечной точки с типом Interrupt Output, то драйвер ОС будет использовать управляющие посылки.
Специальные репорты (т. е. репорты типа Feature) имеют направление передачи данных как от хоста к устройству, так и от устройства в хост. Для них всегда используются управляющие посылки. Для того чтобы послать репорт этого типа, хост инициирует запрос set_Report, предшествующий пакету данных, а далее, в фазе статуса, хост принимает от устройства подтверждение об успешном либо неуспешном принятии данных. Для того чтобы получить специальный репорт, хост инициирует запрос set_Report, устройство при этом отвечает пакетом данных, а в фазе статуса хост возвращает в устройство информацию об успешно проведенной транзакции. Еще одно преимущество специальных репортов — это возможность задавать каждому репорту его номер (Repoit ID). При этом у программиста появляется возможность мультиплексировать запросы, если существует необходимость создания интерфейса передачи команд управления и данных через нулевую конечную точку (см. разд. 13.8).
Предыдущая << 1 .. 48 49 50 51 52 53 < 54 > 55 56 57 58 59 60 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100