Funciones winUSB para la modificación de directivas de canalización
Para permitir que las aplicaciones obtengan y establezcan los parámetros de directiva predeterminados de una canalización de punto de conexión, Winusb.dll expone la función WinUsb_GetPipePolicy para recuperar la directiva predeterminada de la canalización. La función WinUsb_SetPipePolicy permite a una aplicación establecer el parámetro de directiva en un nuevo valor.
WinUSB permite modificar su comportamiento predeterminado aplicando directivas a la canalización de un punto de conexión. Con estas directivas, puedes configurar WinUSB para que coincida mejor con tu dispositivo con sus funcionalidades. En la tabla siguiente se proporciona una lista de las directivas de canalización compatibles con WinUSB.
Nota:
Las directivas descritas en la tabla solo son válidas para los puntos de conexión especificados. Establecer la directiva en otros puntos de conexión no tiene ningún efecto en el comportamiento de WinUSB para las solicitudes de lectura o escritura.
Número de póliza | Nombre de directiva | Descripción | Punto de conexión (dirección) | Valor predeterminado |
---|---|---|---|---|
0x01 | SHORT_PACKET_TERMINATE | Envía un paquete de longitud cero para una solicitud de escritura en la que el búfer es un múltiplo del tamaño máximo de paquete admitido por el punto de conexión. | Bulk (OUT) Interrupción (OUT) |
FALSO |
0x02 | AUTO_CLEAR_STALL | Borra automáticamente una canalización estancada sin detener el flujo de datos. | Bulk (IN) Interrupción (IN) |
FALSO |
0x03 | PIPE_TRANSFER_TIMEOUT | Espera un intervalo de tiempo de espera, en milisegundos, antes de cancelar la solicitud. | Bulk (IN) Bulk (OUT) Interrupción (IN) Interrupción (OUT) |
5 segundos (5000 milisegundos) para el control; 0 para otros |
0x04 | IGNORE_SHORT_PACKETS | Completa una solicitud de lectura cuando se recibe un paquete corto o se lee un número determinado de bytes. Si se desconoce el tamaño del archivo, la solicitud finaliza en un paquete corto. | Bulk (IN) Interrupción (IN) |
FALSO |
0x05 | ALLOW_PARTIAL_READS | Permite las solicitudes de lectura de un dispositivo que devuelve más datos de los solicitados por el autor de la llamada. | Bulk (IN) Interrupción (IN) |
VERDADERO |
0x06 | AUTO_FLUSH | Guarda los datos excesivos de la solicitud de lectura y los agrega a la siguiente solicitud de lectura o descarta el exceso de datos. | Bulk (IN) Interrupción (IN) |
FALSO |
0x07 | RAW_IO | Omite la puesta en cola y el control de errores para aumentar el rendimiento de varias solicitudes de lectura. | Bulk (IN) Interrupción (IN) |
FALSO |
0x08 | MAXIMUM_TRANSFER_SIZE | Obtiene el tamaño máximo de una transferencia USB compatible con WinUSB. Se trata de una directiva de solo lectura que se puede recuperar llamando a WinUsb_GetPipePolicy. | Bulk (IN) Bulk (OUT) Interrupción (IN) Interrupción (OUT) |
|
0x09 | RESET_PIPE_ON_RESUME | Restablece la canalización del punto de conexión después de reanudarse de la suspensión antes de aceptar nuevas solicitudes. | Bulk (IN) Bulk (OUT) Interrupción (IN) Interrupción (OUT) |
FALSO |
En la tabla siguiente se identifican los procedimientos recomendados para usar cada una de las directivas de canalización y se describe el comportamiento resultante cuando la directiva está habilitada.
Directiva | Habilitar si... | Comportamiento |
---|---|---|
SHORT_PACKET_TERMINATE(0x01) | El dispositivo requiere que las transferencias OUT finalicen con un paquete de longitud cero. La mayoría de los dispositivos no tienen este requisito. | Si está habilitado (el valor del parámetro de directiva es TRUE o distinto de cero), cada solicitud de escritura que sea un múltiplo del tamaño máximo de paquete admitido por el punto de conexión, va seguido de un paquete de longitud cero. Después de enviar datos al controlador host, WinUSB envía una solicitud de escritura con un paquete de longitud cero y, a continuación, completa la solicitud creada por WinUsb_WritePipe. |
AUTO_CLEAR_STALL | No quiere que las transferencias con errores deje el punto de conexión en un estado detenido. Esta directiva solo es útil cuando tiene varias solicitudes de lectura pendientes al punto de conexión cuando RAW_IO está deshabilitada. |
|
PIPE_TRANSFER_TIMEOUT | Espera que las transferencias a un punto de conexión se completen dentro de un tiempo específico. |
|
IGNORE_SHORT_PACKETS | RAW_IO está deshabilitado y no desea que los paquetes cortos completen las solicitudes de lectura. |
|
ALLOW_PARTIAL_READS | El dispositivo puede enviar más datos de los solicitados si el tamaño del búfer de solicitudes es un múltiplo del tamaño máximo del paquete de punto de conexión. Use si la aplicación quiere leer unos pocos bytes para determinar cuántos bytes totales se van a leer. |
|
AUTO_FLUSH | ALLOW_PARTIAL_READS directiva está habilitada. El dispositivo puede enviar más datos de los solicitados y la aplicación no requiere ningún otro dato. Esto es posible si el tamaño del búfer de solicitudes es un múltiplo del tamaño máximo del paquete de punto de conexión. |
AUTO_FLUSH define el comportamiento de WinUSB cuando ALLOW_PARTIAL_READS está habilitado. Si ALLOW_PARTIAL_READS está deshabilitado, WinUSB omite el valor de AUTO_FLUSH. WinUSB puede descartar los datos restantes o enviarlos con la siguiente solicitud de lectura del autor de la llamada.
|
RAW_IO | El rendimiento es una prioridad y la aplicación envía solicitudes de lectura simultáneas al mismo punto de conexión. RAW_IO impone ciertas restricciones en el búfer que pasa el autor de la llamada en WinUsb_ReadPipe:
|
Si está habilitada, transfiere la omisión de la puesta en cola y el control de errores para aumentar el rendimiento de varias solicitudes de lectura. WinUSB controla las solicitudes de lectura de la siguiente manera:
Habilitar esta configuración mejora significativamente el rendimiento de varias solicitudes de lectura al reducir el retraso entre el último paquete de una transferencia y el primer paquete de la siguiente transferencia. |
RESET_PIPE_ON_RESUME | El dispositivo no conserva su estado de alternancia de datos en la suspensión. | Al reanudar desde la suspensión, WinUSB restablece el punto de conexión antes de permitir que el autor de la llamada envíe nuevas solicitudes al punto de conexión. |
Temas relacionados
- Administración de energía de WinUSB
- Arquitectura y módulos de WinUSB
- Elección de un modelo de controlador para desarrollar un controlador de cliente USB
- Instalación de WinUSB (Winusb.sys)
- Cómo acceder a un dispositivo USB mediante funciones winUSB
- Funciones de WinUSB
- WinUsb_GetPipePolicy
- WinUsb_SetPipePolicy
- Introducción a WinUSB para desarrolladores