¿Cómo se determina el tipo de velocidad del concentrador USB?

3

Estoy desarrollando un controlador para varias velocidades USB y, de acuerdo con la especificación universal, se me permite extraer una mayor cantidad de corriente de un concentrador USB 3.0 que las otras versiones.

¿Hay una manera en Windows para determinar las diferentes velocidades de USB? Básicamente estoy pidiendo un lugar para empezar. Gracias de antemano.

    
pregunta Yasuko Dino

1 respuesta

7

Ya que estás usando Windows, deberías considerar el uso de Windows Driver Frameworks (WDF). Este es el equivalente de Windows a libusb en computadoras compatibles con POSIX.

Referencia de WDF

Mire a través del código de ejemplo (hay un ejemplo de controlador de tostadora / luciérnaga) sobre cómo configurar un WDFIOTARGET dado un ID de dispositivo. Utilice esta implementación con su hub, enumerándola en la inserción del dispositivo.

Luego, querrás enviar el IOCTL, IOCTL_USB_GET_NODE_INFORMATION , al concentrador representado por un WDFIOTARGET para recuperar una estructura USB_NODE_INFORMATION .

enlace

Referencia IOCTL

USB_NODE_INFORMATION Reference

Luego, recupere con el siguiente patrón de acceso:

PUSB_NODE_INFORMATION UsbNodeInfo = NULL;
// retrieve UsbNodeInfo here with your USB_GET_NODE_INFORMATION signal
UCHAR DescriptorType;
DescriptorType = UsbNodeInfo->u.HubInformation.HubDescriptor.bDescriptorType

Referencia de la información del concentrador

Referencia de HubDescriptor

Esto recuperará un tipo de descriptor de 0x2A (3.0) o 0x29 (2.0 o inferior). Usando esta información, puede enviar el IOCTL que desea al dispositivo para solicitar una mayor cantidad de corriente desde el concentrador, de este modo:

if (DescriptorType == 0x2A) {
    // handle USB 3.0 current specification here
} else {
    // handle USB 2.0 current specification here
}

Espero que esto sea suficiente para que comiences.

    
respondido por el Daniel Li

Lea otras preguntas en las etiquetas