У меня есть USB-устройство, соответствующий дескриптор конечной точки которого объявляет bInterval
, что слишком высоко для моего использования этого периферийного устройства.У меня есть основания полагать, что он может обрабатывать более высокую частоту, в отличие от того, что он объявляет.
Он имеет bDeviceClass
0 и bInterfaceClass
3 на своем единственном интерфейсе, что означает, что он HID.
Я бы хотел иметь возможность запросить это устройство с помощью libusb.Для этого сейчас привязываю к этому устройству драйвер WinUSB.Но вызов передачи прерывания с помощью libusb задерживает отправку (к устройству) запроса на предыдущее время отправления запроса, плюс минимальный период опроса, указанный устройством.
Например, если устройство было FullSpeedи мой bInterval
был 10, а запрос остался на X=0,073s
;мой следующий запрос оставлял бы в X+10*1ms=0,083s
несмотря на вызов функции libusb, скажем, в 0,076s
.Задержка вызвана драйвером и происходит, когда запрос уходит.
Как не учитывать интервал опроса?
Я совершенно новичок в периферийных USB-устройствах, и все, что я нахожу в Интернете, кажется конкретнымМыши / клавиатуры или Linux.Нужно ли мне писать свой собственный драйвер?Целиком?Могу ли я изменить часть обработки интервалов ранее существовавшего драйвера WinUSB - без понимания всей глубины спецификации USB?Есть ли альтернативы написанию драйвера?
Неуниверсальная информация: в данном конкретном случае у меня Windows 10, устройство FullSpeed, bInterval
равно 8, я запрашиваю вход (устройство> host) - конечная точка прерывания, и я использую WinUSB v6.1.7600.16385.
Это следует из моего предыдущего вопроса, Как применяется bIntervals периферийных устройств USB? , но разные вопросы должны храниться отдельно.