estructura USBD_PIPE_INFORMATION (usb.h)

Los controladores de cliente USB usan la estructura USBD_PIPE_INFORMATION para contener información sobre una canalización desde una interfaz específica.

Sintaxis

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;

Miembros

MaximumPacketSize

Especifica el tamaño máximo de paquete, en bytes, que controla esta canalización. Este valor debe ser menor o igual que el valor de wMaxPacketSize en el descriptor de punto de conexión. La pila USB omite este valor si la marca USBD_PF_CHANGE_MAX_PACKET no está establecida en el miembro PipeFlags .

En el caso de los puntos de conexión isócronos de alta velocidad, el valor MaximumPacketSize recibido incluye el número de bytes que se pueden transferir en transacciones adicionales, si el punto de conexión los admite. Para obtener más información, vea la sección Comentarios.

EndpointAddress

Especifica la dirección del bus para esta canalización.

Interval

Contiene el intervalo de sondeo, indicado por el campo bInterval en el descriptor de punto de conexión correspondiente (USB_ENDPOINT_DESCRIPTOR). Este valor solo es válido para las tuberías de interrupción e isócrónicas. Para otros tipos de canalización, este valor debe omitirse. Refleja la configuración del dispositivo en el firmware. Los controladores no pueden cambiarlo.

El intervalo de sondeo, junto con la velocidad del dispositivo y el tipo de controlador host, determinan la frecuencia con la que el controlador debe iniciar una transferencia. El valor de Interval no representa una cantidad fija de tiempo. Es un valor relativo y la frecuencia de sondeo real también dependerá de si el dispositivo y el controlador de host USB funcionan a baja, completa o alta velocidad.

Si el controlador host o el dispositivo funcionan a baja velocidad, el período de tiempo entre transferencias (también conocido como "período de sondeo") se mide en unidades de 1 milisegundos y el período está relacionado con el valor de Interval , como se indica en la tabla siguiente:

Intervalo Período de sondeo (fotogramas de 1 milisegundos) Interrupción Isócrono
De 0 a 15 8 Compatible. No compatible.
De 16 a 35 16 Compatible. No compatible.
De 36 a 255 32 Compatible. No compatible.
 

En el caso de los dispositivos y controladores host que pueden funcionar a toda velocidad, el período se mide en unidades de 1 milisegundos fotogramas. Para las transferencias isócrónicas de velocidad completa, el valor interval y el período de sondeo siempre son 1. Ese valor indica que los datos se pueden transferir en cada fotograma. Para las transferencias de interrupción de velocidad completa, el período de sondeo se deriva del valor Interval . En la tabla siguiente se indican los valores admitidos para los puntos de conexión de interrupción e isócrono.

Intervalo Período de sondeo (fotogramas de 1 milisegundos) Interrupción Isócrono
1 1 Compatible. Compatible.
De 2 a 3 2 Compatible. No compatible.
De 4 a 7 4 Compatible. No compatible.
8 a 15 8 Compatible. No compatible.
De 16 a 31 16 Compatible. No compatible.
De 32 a 255 32 Compatible. No compatible.
 

En el caso de los dispositivos y controladores host que pueden funcionar a alta velocidad, el período se mide en unidades de microframes. El período de sondeo se deriva del valor Interval mediante la fórmula Polling period = 2 ** (Interval - 1). Los valores calculados se indican en la tabla siguiente:

Intervalo Período de sondeo (microframes) Interrupción Isócrono
1 1 Compatible. Compatible.
2 2 Compatible. Compatible.
3 4 Compatible. Compatible.
4 8 Compatible. Compatible.
5 16 Compatible. No compatible.
De 6 a 255 32 Compatible. No compatible.
 

Los períodos de sondeo admitidos para las transferencias isócrónicas de alta velocidad son 1, 2, 4 y 8. Si un controlador cliente envía una solicitud de URB_FUNCTION_ISOCH_TRANSFER para un punto de conexión isócrono de alta velocidad con un período de sondeo superior a 8, la solicitud produce un error de estado USBD_STATUS_INVALID_PARAMETER. Para obtener información sobre las transferencias isócrónicas, vea How to Transfer Data to USB Isochronous Endpoints (Cómo transferir datos a puntos de conexión isócronos USB).

Las asignaciones de las tablas anteriores entre períodos e intervalos de sondeo son válidas en Microsoft Windows 2000 y versiones posteriores del sistema operativo Windows.

PipeType

Especifica qué tipo de transferencia usa esta canalización. Estos valores se definen en la enumeración USBD_PIPE_TYPE .

PipeHandle

Especifica un identificador 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.

MaximumTransferSize

Especifica el tamaño máximo, en bytes, para una solicitud de transferencia en esta canalización. En Windows Server 2003, Windows XP y sistemas operativos posteriores, este miembro no se usa y no contiene datos válidos.

Para obtener información sobre los tamaños máximos de transferencia de cada tipo de punto de conexión USB en diferentes versiones de Windows, consulte Transferencia USB y tamaños de paquetes.

Nota Para WinUSB, no use MaximumTransferSize para determinar el tamaño máximo de una transferencia USB. En su lugar, use el valor de MAXIMUM_TRANSFER_SIZE recuperado por WinUsb_GetPipePolicy.
 

PipeFlags

Contiene un OR bit a bit de marcas de canalización que el controlador puede usar para especificar determinadas características configurables de la canalización. El controlador especifica estas características de canalización cuando selecciona la configuración de un dispositivo USB con una solicitud URB cuyo tipo de función es URB_FUNCTION_SELECT_CONFIGURATION.

En la tabla siguiente se explica el significado de cada marca de canalización:

Nombre del marcador Significado
USBD_PF_CHANGE_MAX_PACKET Indica que el controlador reemplaza el tamaño máximo de paquete del punto de conexión con el valor especificado en MaximumPacketSize. Este valor debe ser menor o igual que el máximo predeterminado especificado en el descriptor de punto de conexión de la canalización.

Comentarios

Esta estructura contiene información para un punto de conexión, recuperado del descriptor de interfaz del dispositivo. Para obtener una explicación de cómo obtener la información en USBD_PIPE_INFORMATION desde el descriptor de interfaz, vea Cómo seleccionar una configuración para un dispositivo USB.

El valor MaximumPacketSize se deriva de los primeros 11 bits del campo wMaxPacketSize del descriptor de punto de conexión, que indica el número máximo de bytes que el controlador de host puede enviar o recibir desde el punto de conexión en una sola transacción.

Normalmente, para transferencias de alta velocidad, el controlador de host envía o recibe una transacción por microframe. Sin embargo, los puntos de conexión isócronos o de interrupción de ancho de banda alto admiten mayores velocidades de datos a través de transacciones adicionales. Esto permite que el controlador de host transfiera hasta 3072 bytes en un solo microframe. El número de transacciones adicionales admitidas por ese tipo de punto de conexión se indica mediante bits 12..11 de wMaxPacketSize (el bit menos significativo es 0). Ese número puede ser 0, 1 o 2. Si 12..11 indica 0, el punto de conexión no admite transacciones adicionales por microframe. Si el número es 1, el controlador de host puede enviar una transacción adicional (total de dos transacciones por microframe); 2 indica dos transacciones adicionales (total de tres transacciones por microframe).

El valor recibido en MaximumPacketSize para un punto de conexión isócrono (alta velocidad y ancho de banda alto) indica el número total de bytes que el controlador de host puede enviar o recibir desde el punto de conexión en un microframe. El valor incluye el número de bytes en transacciones adicionales, si el punto de conexión los admite. Por ejemplo, tenga en cuenta las siguientes características del punto de conexión isócrono:

  • wMaxPacketSize es 1024
  • Los bits 12...11 indican 2
  • El intervalo es 1.
En el ejemplo anterior, el valor recibido en MaximumPacketSize es de 3072 bytes (total de transacciones * wMaxPacketSize). Dado que Interval es 1, el período de sondeo es 1. Por lo tanto, el controlador de host puede transferir 3072 bytes en cada microframe de un marco. En una única solicitud de E/S (descrita en un URB), el controlador de host no puede transferir más de 24 576 bytes.

Requisitos

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

Consulte también

Estructuras USB

USB_ENDPOINT_DESCRIPTOR