estructura de _URB_BULK_OR_INTERRUPT_TRANSFER (usb.h)

Los controladores de cliente USB usan la estructura _URB_BULK_OR_INTERRUPT_TRANSFER para enviar o recibir datos en una canalización masiva o en una canalización de interrupción.

Sintaxis

struct _URB_BULK_OR_INTERRUPT_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;
};

Miembros

Hdr

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

PipeHandle

Especifica un controlador opaco para la canalización masiva o de interrupción. 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 del paquete para el punto de conexión se notifica en el miembro wMaxPacketSize de la estructura USB_ENDPOINT_DESCRIPTOR (descriptor de punto de conexión). Cuando el controlador de host recibe un paquete más corto que wMaxPacketSize en un punto de conexión masivo o de interrupción, el controlador de host deja de solicitar datos del punto de conexión y completa la transferencia. Si no se establece la marca USBD_SHORT_TRANSFER_OK, el controlador de host completa la transferencia con un error.

Esta marca no se debe establecer a menos que también se establezca USBD_TRANSFER_DIRECTION_IN. Nota En los controladores de host de EHCI, USBD_SHORT_TRANSFER_OK se omite para los puntos de conexión masivos e interrupciones. La transferencia de paquetes cortos en los controladores EHCI no produce una condición de error.

En los controladores de host UHCI y OHCI, si no se establece USBD_SHORT_TRANSFER_OK para una transferencia masiva o de interrupción, una transferencia de paquetes corta detiene el punto de conexión y se devuelve un código de error para la transferencia. El controlador cliente debe reanudar el punto de conexión enviando una solicitud de URB_FUNCTION_SYNC_RESET_PIPE_AND_CLEAR_STALL antes de enviar una solicitud de transferencia al punto de conexió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.

Comentarios

Los controladores pueden usar la rutina de servicio UsbBuildInterruptOrBulkTransferRequest para dar formato a este URB. Los búferes especificados en TransferBuffer o descritos en TransferBufferMDL deben ser no paginables.

En un URB, los parámetros TransferBuffer y TransferBufferMDL pueden ser valores no NULL, al mismo tiempo. En ese caso, el búfer de transferencia y el MDL señalados a TransferBuffer y TransferBufferMDL deben apuntar al mismo búfer.

El controlador de bus USB procesa este URB en DISPATCH_LEVEL.

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

Estructuras USB

_URB_HEADER