пытаюсь сделать 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 байт?