Поделиться через


структура _URB_CONTROL_TRANSFER (usb.h)

Структура _URB_CONTROL_TRANSFER используется драйверами USB-клиента для передачи данных в канал управления или из нее.

Синтаксис

struct _URB_CONTROL_TRANSFER {
  struct _URB_HEADER   Hdr;
  USBD_PIPE_HANDLE     PipeHandle;
  ULONG                TransferFlags;
  ULONG                TransferBufferLength;
  PVOID                TransferBuffer;
  PMDL                 TransferBufferMDL;
  struct _URB          *UrbLink;
  struct _URB_HCD_AREA hca;
  UCHAR                SetupPacket[8];
};

Члены

Hdr

Указатель на структуру _URB_HEADER , указывающую сведения о заголовке URB. Функция Hdr.Function должна быть URB_FUNCTION_CONTROL_TRANSFER, а Hdr.Length — .sizeof(_URB_CONTROL_TRANSFER)

PipeHandle

Дескриптор для канала управления.

Если целевой объект является конечной точкой управления по умолчанию, pipeHandle должен иметь значение NULL. В этом случае TransferFlags должен содержать флаг USBD_DEFAULT_PIPE_TRANSFER.

Если target является конечной точкой элемента управления, отличной от конечной точки по умолчанию, PipeHandle указывает непрозрачный дескриптор для канала управления. Драйвер хост-контроллера возвращает этот дескриптор, когда драйвер клиента выбирает конфигурацию устройства с urb типа URB_FUNCTION_SELECT_CONFIGURATION или когда драйвер клиента изменяет параметры для интерфейса с URB типа URB_FUNCTION_SELECT_INTERFACE.

TransferFlags

Задает ноль, единицу или сочетание следующих флагов:

Значение Значение
USBD_TRANSFER_DIRECTION_IN
Задано для запроса данных с устройства. Для передачи данных на устройство этот флаг должен быть снят.
USBD_TRANSFER_DIRECTION_OUT
Задано для передачи данных на устройство. Установка этого флага эквивалентна снятию флага USBD_TRANSFER_DIRECTION_IN.
USBD_SHORT_TRANSFER_OK
Параметр указывает контроллеру узла не возвращать ошибку при получении пакета от устройства, который короче максимального размера пакета для конечной точки. Максимальный размер пакета для конечной точки указывается в элементе bMaxPacketSize0 структуры USB_DEVICE_DESCRIPTOR (дескриптор устройства) для конечной точки управления по умолчанию. Для конечной точки управления, отличной от используемой по умолчанию, максимальный размер пакета задается в элементе wMaxPacketSize структуры USB_ENDPOINT_DESCRIPTOR (дескриптор конечной точки).

Когда контроллер узла получает пакет, длина которого короче значения wMaxPacketSize в конечной точке управления, поведение в зависимости от типа контроллера узла выглядит следующим образом:

  • На контроллерах узла EHCI контроллер узла немедленно переходит к этапу состояния передачи элемента управления. Передача завершается успешно, независимо от того, задано ли USBD_SHORT_TRANSFER_OK.
  • Если на контроллерах узла UHCI и OHCI задано USBD_SHORT_TRANSFER_OK, контроллер узла переходит к этапу состояния. Если USBD_SHORT_TRANSFER_OK не задано, контроллер узла отменяет этапы передачи данных и состояния, и передача завершается ошибкой.
USBD_DEFAULT_PIPE_TRANSFER
Параметр указывает контроллеру узла на передачу элементов управления по каналу управления по умолчанию. Это позволяет вызывающей объекту отправлять команды в управляющий канал по умолчанию без явного указания дескриптора канала.

TransferBufferLength

Указывает длину (в байтах) буфера, указанного в TransferBuffer или описанного в разделе TransferBufferMDL. Драйвер хост-контроллера возвращает количество байтов, отправленных или считываемых из канала в этом элементе.

TransferBuffer

Указатель на резидентный буфер для передачи или имеет значение NULL , если MDL предоставляется в TransferBufferMDL. Содержимое этого буфера зависит от значения Параметра TransferFlags. Если указан USBD_TRANSFER_DIRECTION_IN этот буфер будет содержать данные, считанные с устройства при возврате из драйвера контроллера узла. В противном случае этот буфер содержит предоставленные драйвером данные для передачи на устройство.

TransferBufferMDL

Указатель на MDL, описывающий резидентный буфер, или имеет значение NULL , если буфер предоставлен в TransferBuffer. Содержимое буфера зависит от значения Параметра TransferFlags. Если указан USBD_TRANSFER_DIRECTION_IN, описанный буфер будет содержать данные, считываемые с устройства при возвращении из драйвера контроллера узла. В противном случае буфер содержит предоставленные драйвером данные для передачи на устройство. Этот MDL-файл должен быть выделен из непагрегированного пула.

UrbLink

Зарезервировано. Не используется.

hca

Зарезервировано. Не используется.

SetupPacket[8]

Указывает пакет установки запроса, определяемый USB. Формат пакета настройки запроса USB можно найти в спецификации USB-ядра.

Комментарии

Структура URB_CONTROL_TRANSFER_EX идентична структуре URB_CONTROL_TRANSFER, за исключением того, что она предоставляет значение времени ожидания в поле Timeout (Время ожидания ).

Зарезервированные элементы этой структуры должны рассматриваться как непрозрачные и зарезервированы для использования системой.

Требования

Требование Значение
Заголовок usb.h (включая Usb.h)

См. также раздел

URB

URB_CONTROL_TRANSFER_EX

Структуры USB

_URB_HEADER