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

 

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

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

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

// далее следуют один или несколько дескрипторов
struct _HID_DESCRIPTOR_DESC_LIST {
{
UCHAR bReportType;
USHORT wReportLength; } DescriptorList[1]; } USB_HID_DESCRIPT0R; Il Описание на языке Pascal Туре
THidDescriptorList = packed record
bReportType : BYTE;
wReportLength : WORD; End;
TUsbHidDescriptor = packed record bLength : BYTE;
bDescriptorType : BYTE; bcdHID - : WORD;
bCountryCode : BYTE;
156
Часть III. Практика программирования
bNumDescriptors : BYTE;
DescriptorList : Array of THidDescriptorList; End;
Первые три поля HI D-дескриптора содержат стандартные значения:
3 bLength = 9;
J bDescriptorType = $21;
3 bcdHiD = $100.
Поле bcountrycode содержит код языка, если устройство локализировано, и 3 --'если нет. Клавиатуры могут использовать это поля для передачи языка клавиш.
HID-дескриптор возвращается по запросу Get_Descriptor ($21).
8.4.4. Дескриптор репорта
Дескриптор репорта (тип report) не похож на остальные дескрипторы. Он имеет сложную табличную структуру. Длина дескриптора зависит от числа и гипа данных, которые он передает.
Содержимое дескриптора репорта складывается из частей, передающих информацию об устройстве. Первая часть каждого слагаемого содержит гри поля: тип, тег и размер. Такая структура позволяет, с одной стороны, идентифицировать любую составляющую репорта, а с другой, пропустить неизвестные части, сразу переместившись к следующей составляющей (см. разд .8.5).
Дескриптор репорта имеет код $22 и, соответственно, возвращается по запросу GetDescriptor ($22).
8.5. Структура дескриптора репорта
Дескриптор репорта (report descriptor) определяет структуру данных, передаваемых от устройства к хосту и от хоста к устройству. Дескриптор HID состоит из элементов (Items), каждый из которых несет определенную информацию об устройстве.
Элемент может содержать байты данных. Размер данных и структура элемента зависят от базового типа (fundamental type) элемента.
8.5.1. Структура элементов репорта
Существуют два основных базовых типа: короткие элементы (short item) и длинные элементы (long item).
Гпава 8. HID-устройства
157
Элементы короткого типа
Элементы короткого типа имеют однобайтный префикс, содержащий тип, тег и размер (рис. 8.2.):
? [7:4] — поле тега (ьтад, код функции элемента);
? [3:2] — тип (ьтуре, см. разд. 8.6):
• 00 — основной (main);
• 01 — глобальный (global);
• 10 — локальный (local);
? [0:1] — число байт данных в элементе (bsize):
• 00 — нет байт данных;
• 01 — 1 байт;
• 10 — 2 байта;
• 11—4 байта.
23
15
Данные
Данные
6 5 4 3 2
Тег ЬТад
1 О
Тип Размер
ЬТуре ЬБІ2Є
Рис. 8.2. Структура элемента дескриптора репорта
Элементы длинного типа
Элементы длинного типа имеют однобайтный префикс OxFE, поле bsize всегда равно 2, а длина данных указывается в следующем после префикса байте (рис. 8.3).
258..24
23
15
7 6 5 4 3 2 1 0
Данные Тип bLongltemTag Размер bDataSize 1111 11 10
Рис. 8.3. Структура длинного элемента дескриптора репорта
8.5.2. Типы элементов репорта
Спецификация определяет три типа элементов:
? основные элементы (main items) — определяют группу данных в дескрипторе;
158
Часть III. Практика программирования
? глобальные элементы (global items) — определяют данные репорта;
? локальные элементы (local items) — определяют характеристики конкретных данных.
Основные элементы
Основные элементы определяют или группируют элементы в дескрипторе репорта. Существуют пять элементов основного типа:
? Input, Output и Feature — определяют поля соответствующих репортов;
? Collection и End Collection — не определяют поля, но объединяют группу связанных полей внутри репорта.
Биты поля данных для элементов Input, Output и Feature показаны в табл. 8.2 и на рис. 8.4.
[-BW) —........
! О Data ! С Constant
Бісі
'і (• Array і C Variable
г ВИ-------------
<• Absolute C Relative
j Bit3---------------
<* No Wrap Г Wrap
Рис. 8.4. Биты данных элементов Input, Output и Feature
Таблица 8.2. Биты данных элементов Input, Output и Feature
Бит Если бит равен 0 Если бит равен 1
0 Data Constant
1 Array Variable
<• Linear t~ Non Linear
Bit8 -------
0" Bit Field Г Buffered
Bit5
(* Preferred State C NoPreffered
- rBit6--------------
(* No Null Position і j C Null State
- Bit7 .......
(* Nonvolatile; : Ґ" Volatile
ТЯГ
Cancel
Гпава 8. НЮ-устройства 159
Таблица 8.2 (окончание)
Бит Если бит равен О Если бит равен 1
2 Absolute Relative
3 No wrap Wrap
4 Linear Non-linear
5 Preferred state No preferred state
6 No null position Null state
7 Non-volatile Volatile
8 Bit Field Buffered Bytes
9-31 Зарезервировано
Data/Constant
Data означает, что данные, относящиеся к этой группе, могут изменяться. Constant означает, что данные изменяться не могут (только для чтения).
Array/Variable
Этот бит управляет представлением данных. Например, если клавиатура имеет 8 клавиш, то установка режима Variable будет означать, что клавиатура содержит по одному биту на каждую клавишу. В дескрипторе репорта нужно будет указать, что размер элемента данных (Report Size) равен 1, а число элементов данных (Report Count) равно 8. Установка режима Array будет означать, что каждая клавиша имеет индекс, который передается в репорте, если клавиша нажата. Для восьми клавиш индекс будет кодироваться тремя битами, поэтому поле Report Size должно быть равно 3, a Report Count должно быть равно числу клавиш, которые разрешено нажимать одновременно.
Предыдущая << 1 .. 50 51 52 53 54 55 < 56 > 57 58 59 60 61 62 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100