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.