Я разрабатываю драйвер для нескольких скоростей USB, и в соответствии с универсальной спецификацией мне разрешено потреблять больший ток от концентратора USB 3.0, чем в других версиях.
Есть ли способ в Windows определить разные скорости USB? Я в основном прошу место, чтобы начать. Заранее спасибо.
Поскольку вы используете Windows, вам следует изучить использование Windows Driver Frameworks
(WDF). Это эквивалент Windows на libusb
POSIX-совместимых компьютерах.
Просмотрите пример кода (там есть пример драйвера тостера/светлячка) о том, как настроить WDFIOTARGET
заданный идентификатор устройства. Используйте эту реализацию с вашим концентратором, перечислив ее при вставке устройства.
Затем вы захотите отправить IOCTL IOCTL_USB_GET_NODE_INFORMATION
в концентратор, представленный a, WDFIOTARGET
чтобы получить USB_NODE_INFORMATION
структуру.
(источник: sgi.com )
USB_NODE_INFORMATION Справочник
Затем выполните извлечение с помощью следующего шаблона доступа:
PUSB_NODE_INFORMATION UsbNodeInfo = NULL;
// retrieve UsbNodeInfo here with your USB_GET_NODE_INFORMATION signal
UCHAR DescriptorType;
DescriptorType = UsbNodeInfo->u.HubInformation.HubDescriptor.bDescriptorType
Это позволит получить тип дескриптора 0x2A
(3.0) или 0x29
(2.0 или ниже). Используя эту информацию, вы можете отправить нужное IOCTL
устройство на устройство, чтобы потребовать большее количество тока от концентратора, например:
if (DescriptorType == 0x2A) {
// handle USB 3.0 current specification here
} else {
// handle USB 2.0 current specification here
}
Надеюсь, этого вам достаточно для начала.
бордбит
Ясуко Дино
Дэниел Ли