структура USBD_PIPE_INFORMATION (usb.h)
Структура USBD_PIPE_INFORMATION используется драйверами USB-клиента для хранения сведений о канале из определенного интерфейса.
Синтаксис
typedef struct _USBD_PIPE_INFORMATION {
USHORT MaximumPacketSize;
UCHAR EndpointAddress;
UCHAR Interval;
USBD_PIPE_TYPE PipeType;
USBD_PIPE_HANDLE PipeHandle;
ULONG MaximumTransferSize;
ULONG PipeFlags;
} USBD_PIPE_INFORMATION, *PUSBD_PIPE_INFORMATION;
Члены
MaximumPacketSize
Указывает максимальный размер пакета в байтах, обрабатываемый данным каналом. Это значение должно быть меньше или равно значению wMaxPacketSize в дескрипторе конечной точки. Стек USB игнорирует это значение, если флаг USBD_PF_CHANGE_MAX_PACKET не задан в элементе PipeFlags .
Для высокоскоростных изохронных конечных точек полученное значение MaximumPacketSize включает количество байтов, которые можно передать в дополнительных транзакциях, если конечная точка поддерживает их. Дополнительные сведения см. в подразделе "Примечания".
EndpointAddress
Указывает адрес шины для этого канала.
Interval
Содержит интервал опроса, указанный полем bInterval в соответствующем дескрипторе конечной точки (USB_ENDPOINT_DESCRIPTOR). Это значение допустимо только для прерываний и изохронных каналов. Для других типов каналов это значение следует игнорировать. Он отражает конфигурацию устройства во встроенном ПО. Драйверы не могут изменить его.
Интервал опроса вместе со скоростью устройства и типом хост-контроллера определяет частоту, с которой драйвер должен инициировать передачу. Значение в параметре Interval не представляет фиксированное количество времени. Это относительное значение, и фактическая частота опроса также будет зависеть от того, работает ли устройство и контроллер узла USB на низкой, полной или высокой скорости.
Если контроллер узла или устройство работает с низкой скоростью, период времени между передачами (также известный как "период опроса") измеряется в единицах 1 миллисекунд кадра, а период связан со значением в интервале , как показано в следующей таблице:
Интервал | Период опроса (кадры 1 миллисекунда) | Прервать | Изохронный |
---|---|---|---|
От 0 до 15 | 8 | Поддерживается. | Не поддерживается. |
от 16 до 35 | 16 | Поддерживается. | Не поддерживается. |
от 36 до 255 | 32 | Поддерживается. | Не поддерживается. |
Для устройств и контроллеров узлов, которые могут работать на полной скорости, период измеряется в единицах 1 миллисекунды кадров. Для полноскоростных изохронных передач значение Interval и период опроса всегда равны 1. Это значение указывает, что данные могут быть переданы в каждом кадре. Для полноскоростной передачи прерываний период опроса является производным от значения Interval . В следующей таблице указаны поддерживаемые значения для прерываний и изохронных конечных точек.
Интервал | Период опроса (кадры 1 миллисекунда) | Прервать | Изохронный |
---|---|---|---|
1 | 1 | Поддерживается. | Поддерживается. |
От 2 до 3 | 2 | Поддерживается. | Не поддерживается. |
От 4 до 7 | 4 | Поддерживается. | Не поддерживается. |
8–15 | 8 | Поддерживается. | Не поддерживается. |
от 16 до 31 | 16 | Поддерживается. | Не поддерживается. |
от 32 до 255 | 32 | Поддерживается. | Не поддерживается. |
Для устройств и контроллеров узлов, которые могут работать на высокой скорости, период измеряется в единицах микрофреймов. Период опроса является производным от значения Interval с помощью формулы Polling period = 2 ** (Interval - 1)
. Вычисляемые значения указаны в следующей таблице:
Интервал | Период опроса (микрофреймы) | Прервать | Изохронный |
---|---|---|---|
1 | 1 | Поддерживается. | Поддерживается. |
2 | 2 | Поддерживается. | Поддерживается. |
3 | 4 | Поддерживается. | Поддерживается. |
4 | 8 | Поддерживается. | Поддерживается. |
5 | 16 | Поддерживается. | Не поддерживается. |
От 6 до 255 | 32 | Поддерживается. | Не поддерживается. |
Поддерживаемые периоды опроса для высокоскоростных изохронных передач: 1, 2, 4 и 8. Если драйвер клиента отправляет URB_FUNCTION_ISOCH_TRANSFER запрос на высокоскоростную изохронную конечную точку с периодом опроса больше 8, запрос завершается ошибкой с состоянием USBD_STATUS_INVALID_PARAMETER. Сведения об изохронной передаче см. в статье Передача данных в изохронные конечные точки USB.
Сопоставления в предыдущих таблицах между периодами и интервалами опроса допустимы в Microsoft Windows 2000 и более поздних версиях операционной системы Windows.
PipeType
Указывает, какой тип передачи использует этот канал. Эти значения определяются в перечислении USBD_PIPE_TYPE .
PipeHandle
Указывает непрозрачный дескриптор для конвейера массовых операций или прерываний. Драйвер контроллера узла возвращает этот дескриптор, когда драйвер клиента выбирает конфигурацию устройства с URB типа URB_FUNCTION_SELECT_CONFIGURATION или когда драйвер клиента изменяет параметры интерфейса с URB типа URB_FUNCTION_SELECT_INTERFACE.
MaximumTransferSize
Указывает максимальный размер (в байтах) для запроса на передачу по этому каналу. В Windows Server 2003, Windows XP и более поздних версиях этот элемент не используется и не содержит допустимых данных.
Сведения о максимальных размерах передачи для каждого типа конечных точек USB в разных версиях Windows см. в разделе Передача ПО USB и размеры пакетов.
PipeFlags
Содержит побитовое ИЛИ флагов канала, которые драйвер может использовать для указания определенных настраиваемых характеристик канала. Драйвер указывает эти характеристики канала при выборе конфигурации USB-устройства с запросом URB, тип функции которого URB_FUNCTION_SELECT_CONFIGURATION.
В следующей таблице объясняется значение каждого флага канала:
Имя флага | Значение |
---|---|
USBD_PF_CHANGE_MAX_PACKET | Указывает, что драйвер переопределяет максимальный размер пакета конечной точки значением, указанным в параметре MaximumPacketSize. Это значение должно быть меньше или равно максимальному значению по умолчанию, заданному в дескрипторове конечной точки канала. |
Комментарии
Эта структура содержит сведения о конечной точке, полученные из дескриптора интерфейса устройства. Сведения о том, как получить сведения в USBD_PIPE_INFORMATION из дескриптора интерфейса, см. в разделе Выбор конфигурации для USB-устройства.
Значение MaximumPacketSize является производным от первых 11 бит поля wMaxPacketSize дескриптора конечной точки, которое указывает максимальное количество байтов, которое контроллер узла может отправлять или получать от конечной точки в одной транзакции.
Как правило, для высокоскоростной передачи контроллер узла отправляет или получает одну транзакцию на микрофрейм. Однако высокая скорость, высокая пропускная способность изохронные конечные точки или конечные точки прерываний поддерживают более высокую скорость передачи данных за счет дополнительных транзакций. Это позволяет контроллеру узла передавать до 3072 байт в одном микрофрейме. Количество дополнительных транзакций, поддерживаемых этим типом конечной точки, обозначается битами 12..11wMaxPacketSize (наименее значимый бит — 0). Это число может быть 0, 1 или 2. Если 12..11 указывает на значение 0, то конечная точка не поддерживает дополнительные транзакции на микрофрейм. Если число равно 1, контроллер узла может отправить дополнительную транзакцию (всего две транзакции на микрофрейм); 2 обозначает две дополнительные транзакции (всего три транзакции на микрофрейм).
Значение, полученное в MaximumPacketSize для изохронной конечной точки (высокой скорости и высокой пропускной способности), указывает общее количество байтов, которые контроллер узла может отправлять или получать от конечной точки в одном микрофрейме. Значение включает количество байтов в дополнительных транзакциях, если конечная точка поддерживает их. Например, рассмотрим следующие изохронные характеристики конечной точки:
- wMaxPacketSize — 1024
- Биты 12..11 указывают на 2
- Интервал равен 1.
Требования
Требование | Значение |
---|---|
Заголовок | usb.h (включая Usb.h) |