пытаюсь сделать USB устройства класса CDC. Примеров на эту тему вроде бы много. Пытаюсь повторить один из примеров и вот какая штука. В Windows XP SP2 работает хорошо.
В Windows 7 32bit не устанавливаются драйвера - ошибка 10. Перепробовал на 3х компьютерах.
Смотрю USB трекером, какие пакеты ходят в шине. Ошибок нет - все транзакции выполняются без ошибок. GetDescriptor(addr0) SetAddress(addr1) GetDescriptor(addr1) GetConfiguration(67bytes) ... GetDescriptor(addr1) GetConfiguration(67bytes) SetConfiguration()
Все - дальше не работает. Драйвер не устанавливается, в DeviceManager желтая иконка.
Единственная странность которую заметил - при первом чтении configuration хост запрашивает 255 байт и устройство отдает 67 - сколько есть. При втором чтении configuration хост почему-то спрашивает 265 байт - это 0х109! Конечно устройство и в этом случае отдает все 67 байт дескриптора, которые есть. Странность в том, что всякие другие устройства какие я пробою подключать у них хост спрашивает только 9 байт при втором чтении конфиг дескриптора и никогда не спрашивает 0х109.
Вот те дескрипторы, что у меня есть:
////////////////////////////////////////////////////////////////////////// UCHAR usb_device_descriptor_a[]= { 0x12,0x01,0x00,0x02,0x02,0x00,0x00,0x08, 0x10,0xff,0x10,0xff,0x01,0x00,0x00,0x00, 0x00,0x01 };
UCHAR usb_configuration_descriptor_a[]= { 0x09,0x02,0x43,0x00,0x02,0x01,0x00,0x80, 0x32,0x09,0x04,0x00,0x00,0x01,0x02,0x02, 0x01,0x00,0x05,0x24,0x00,0x10,0x01,0x04, 0x24,0x02,0x02,0x05,0x24,0x06,0x00,0x01, 0x05,0x24,0x01,0x00,0x01,0x07,0x05,0x82, 0x03,0x08,0x00,0x02,0x09,0x04,0x01,0x00, 0x02,0x0a,0x00,0x00,0x00,0x07,0x05,0x03, 0x02,0x08,0x00,0x00,0x07,0x05,0x83,0x02, 0x08,0x00,0x00 }; //////////////////////////////////////////////////////////////////////////
Я уже и всякие другие пробовал из других примеров - результат тот же
Может кто сталкивался почему виндовс 7 хочет прочитать 265 байт?
|