estructura _URB_CONTROL_TRANSFER (usb.h)

Los controladores de cliente USB usan la estructura _URB_CONTROL_TRANSFER para transferir datos hacia o desde una canalización de control.

Sintaxis

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];
};

Miembros

Hdr

Puntero a una estructura de _URB_HEADER que especifica la información del encabezado URB. Hdr.Function debe ser URB_FUNCTION_CONTROL_TRANSFER y Hdr.Length debe ser sizeof(_URB_CONTROL_TRANSFER).

PipeHandle

Identificador de la canalización de control.

Si el destino es el punto de conexión de control predeterminado, PipeHandle debe ser NULL. En este caso, TransferFlags debe contener la marca USBD_DEFAULT_PIPE_TRANSFER.

Si el destino es un punto de conexión de control no predeterminado, PipeHandle especifica un identificador opaco para la canalización de control. El controlador del controlador de host devuelve este identificador cuando el controlador cliente selecciona la configuración del dispositivo con un URB de tipo URB_FUNCTION_SELECT_CONFIGURATION o cuando el controlador cliente cambia la configuración de una interfaz con un URB de tipo URB_FUNCTION_SELECT_INTERFACE.

TransferFlags

Especifica cero, uno o una combinación de las marcas siguientes:

Valor Significado
USBD_TRANSFER_DIRECTION_IN
Se establece para solicitar datos desde un dispositivo. Para transferir datos a un dispositivo, esta marca debe estar desactivada.
USBD_TRANSFER_DIRECTION_OUT
Se establece para transferir datos a un dispositivo. Establecer esta marca equivale a borrar la marca USBD_TRANSFER_DIRECTION_IN.
USBD_SHORT_TRANSFER_OK
Se establece para dirigir al controlador de host que no devuelva un error cuando recibe un paquete del dispositivo que es más corto que el tamaño máximo del paquete para el punto de conexión. El tamaño máximo de paquete para el punto de conexión se notifica en el miembro bMaxPacketSize0 de la estructura de USB_DEVICE_DESCRIPTOR (descriptor de dispositivo) para el punto de conexión de control predeterminado. Para un punto de conexión de control no predeterminado, el tamaño máximo del paquete se establece en el miembro wMaxPacketSize de la estructura de USB_ENDPOINT_DESCRIPTOR (descriptor de punto de conexión).

Cuando el controlador de host recibe un paquete cuya longitud es menor que el valor wMaxPacketSize en un punto de conexión de control, el comportamiento es el siguiente en función del tipo de controlador de host:

  • En los controladores host de EHCI, el controlador de host continúa inmediatamente a la fase de estado de la transferencia de control. La transferencia se completa correctamente, independientemente de si se ha establecido USBD_SHORT_TRANSFER_OK.
  • En los controladores de host UHCI y OHCI, si se establece USBD_SHORT_TRANSFER_OK, el controlador de host continúa con la fase de estado. Si no se establece USBD_SHORT_TRANSFER_OK, el controlador de host abandona las fases de datos y estado de la transferencia de control y la transferencia se completa con un error.
USBD_DEFAULT_PIPE_TRANSFER
Se establece para dirigir el controlador de host para realizar una transferencia de control en la canalización de control predeterminada. Esto permite al autor de la llamada enviar comandos a la canalización de control predeterminada sin especificar explícitamente el identificador de canalización.

TransferBufferLength

Especifica la longitud, en bytes, del búfer especificado en TransferBuffer o descrito en TransferBufferMDL. El controlador del controlador de host devuelve el número de bytes enviados o leídos desde la canalización de este miembro.

TransferBuffer

Puntero a un búfer residente para la transferencia o es NULL si se proporciona un MDL en TransferBufferMDL. El contenido de este búfer depende del valor de TransferFlags. Si se especifica USBD_TRANSFER_DIRECTION_IN, este búfer contendrá datos leídos del dispositivo a cambio del controlador del controlador de host. De lo contrario, este búfer contiene datos proporcionados por el controlador para la transferencia al dispositivo.

TransferBufferMDL

Puntero a un MDL que describe un búfer residente o es NULL si se proporciona un búfer en TransferBuffer. El contenido del búfer depende del valor de TransferFlags. Si se especifica USBD_TRANSFER_DIRECTION_IN, el búfer descrito contendrá datos leídos del dispositivo a cambio del controlador del controlador de host. De lo contrario, el búfer contiene datos proporcionados por el controlador para la transferencia al dispositivo. Este MDL debe asignarse desde un grupo no paginado.

UrbLink

Reservado. No utilizar.

hca

Reservado. No utilizar.

SetupPacket[8]

Especifica un paquete de configuración de solicitud definido por USB. El formato de un paquete de configuración de solicitud USB se encuentra en la especificación del núcleo USB.

Comentarios

La estructura URB_CONTROL_TRANSFER_EX es idéntica a URB_CONTROL_TRANSFER, salvo que proporciona un valor de tiempo de espera en el campo Tiempo de espera .

Los miembros reservados de esta estructura deben tratarse como opacos y están reservados para el uso del sistema.

Requisitos

Requisito Valor
Header usb.h (incluye Usb.h)

Consulte también

URB

URB_CONTROL_TRANSFER_EX

Estructuras USB

_URB_HEADER