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

 

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

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

Агуров П.В. Интерфейсы USB. Практика использования и программирования — СПб.: БХВ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interface2004.djvu
Предыдущая << 1 .. 38 39 40 41 42 43 < 44 > 45 46 47 48 49 50 .. 166 >> Следующая

Если интерфейс использует только нулевую конечную точку, то поле bNumEndpoints должно быть равно нулю.
Дескриптор конечной ТОЧКИ
Стандартный дескриптор конечной точки (Standard Endpoint Descriptor) содержит информацию об одной из конечных точек, доступных при использовании определенного интерфейса. Структура дескриптора конечной точки показана в табл. 4.6, а соответствующее описание на языках С и Pascal показано в листинге 4.8.
Таблица 4.6. Структура стандартного дескриптора конечной точки
Сме- Поле Размер Описание
щение
0 bLength 1 Размер дескриптора в байтах
1 bDescriptorType 1 Тип дескриптора
(usb endpoint_descriptor_type)
114
Часть II. Внутренняя организация USB
Таблица 4.6 (окончание)
Смещение
Поле
Размер Описание
2
bEndpointAddress
1
Код адреса конечной точки
3
bmAttributes
Атрибуты конечной точки
Максимальный размер пакета для конечной точки
4
wMaxPacketSize
2
6
blnterval
Интервал опроса конечной точки при передаче данных (задается в миллисекундах)
Листияг 4.8. Дескриптор КС
. . ........... .2?..«' .а..» .
// описание на языке С
typedef struct _USB_ENDPOINT_DESCRIPTOR { UCHAR bLength; UCHAR bDescriptorType; UCHAR bEndpointAddress; UCHAR bmAttributes; USHORT wMaxPacketSize; UCHAR blnterval;
} USB_ENDPOINT_DESCRIPTOR, *P0SB_ENDPOINT_DESCRIPTOR; Il описание на языке Pascal TUsbEndpomtDescriptor = packed record
bLength : BYTE
bDescriptorType : BYTE
bEndpointAddress : BYTE
bmAttributes : BYTE
wMaxPacketSize : WORD
blnterval : BYTE
Размер дескриптора конечной точки составляет 7 байт.
Код адреса bEndpointAddress и байт атрибутов bmAttributes для многих
классов периферийных устройств позволяет однозначно определить функциональное назначение конечной точки.
End;
Глава 4. Внутренняя организация устройства
115
Код адреса bEndpointAddress содержит следующие биты:
? [7] направление передачи (игнорируется для каналов сообщений):
• 0 — OUT (от хоста);
• 1 — IN (к хосту);
? [6:4] зарезервированы и должны содержать нули;
? [3:0] номер конечной точки.
Байт атрибутов bmAttributes содержит следующие биты:
? [7:6] зарезервированы и должны быть равны нулю;
? [5:4] тип использования конечной точки:
• 00 — конечная точка (данные);
• 01 — конечная точка для явной обратной связи;
• 10 — конечная точка неявной обратной связи;
• 11 — зарезервировано;
? [3:2] тип синхронизации (для изохронных каналов, см. разд. 3.4):
• 00 — нет синхронизации;
• 01 — асинхронная;
• 10 — адаптивная;
• 11 — синхронная;
? [1:0] тип конечной точки:
• 00 канал сообщений;
• 01 — изохронный канал;
• 10 — канал передачи данных;
• 11 — канал прерываний.
Интервал опроса конечной точки (поле binterval) имеет значение только в том случае, если точка используется для передачи данных по прерываниям. Для изохронных конечных точек это поле всегда равно 1. Для остальных типов конечных точек значение этого поля игнорируется.
В HS-режиме для изохронных передач и прерываний биты [12:11] поля wMaxPacketSize определяют число транзакций внутри фрейма определяемым значением поля binterval (табл. 4.7).
116
Часть II. Внутренняя организация USB
Таблица 4.7. Соответствие числа транзакций и размера пакетов
Биты [12:11] Максимально допустимый размер пакета
ПОЛЯ wMaxPacketSize (биты [10:0] ПОЛЯ wMaxPacketSize)
00 1-1024
01 513-1024
10 683-1024
11 Не используется, зарезервировано
Дескриптор строки
Дескриптор строки (UNICODE String Descriptor) содержит текст в формате UNICODE. Строка не ограничивается нулем, а длина строки вычисляется вычитанием 2 из размера дескриптора. Структура дескриптора строки показана в табл. 4.8, а соответствующее описание на языках С и Pascal показано в листинге 4.9.
Таблица 4.8. Структура дескриптора строки
Смещение Поле Размер Описание
0 bLength 1 Размер дескриптора в байтах (N + 2)
1 bDescriptorType 1 Тип дескриптора (usb_string_descriptor_type)
2 bString N Строка символов UNICODE
листинг.аа^
// описание на языке С
typedef struct _USB_STRING_DESCRTPTOR {
UCHAR bLength;
UCHAR bDescriptorType;
WCHAR bString[l]; } USB_STRING_DESCRIPTOR; // описание на языке Pascal TUsbStringDescriptor = packed record
bLength : BYTE;
Глава 4. Внутренняя организация устройства
117
bDescriptorType : BYTE; bStrmg : Array of Byte;
End;
Дескриптор строки является необязательным. Если устройство не поддерживает дескрипторы строк, все ссылки на такие дескрипторы из дескрипторов устройства, конфигурации или интерфейса должны иметь нулевое значение.
Устройство может поддерживать несколько различных языков, поэтому при запросе дескриптора строки нужно задавать идентификатор языка (langid).
Строковый индекс 0 для всех языков соответствует дескриптору строки, содержащей массив 16-разрядных идентификаторов всех поддерживаемых языков. Массив идентификаторов не ограничен нулем, а размер массива в байтах вычисляется вычитанием 2 из размера дескриптора (табл. 4 9).
Таблица 4.9. Структура дескриптора идентификатора языков
Смещение Поле Размер Описание
0 bLength 1 Размер дескриптора в байтах (N + 2)
Предыдущая << 1 .. 38 39 40 41 42 43 < 44 > 45 46 47 48 49 50 .. 166 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100