У меня есть USB-устройство, с которым мне нужно общаться из приложения .net.Устройство не является стандартным устройством HID, и для его инициализации я получил трассировку пакетов от анализатора / анализатора протоколов USB для пакетов, используемых при инициализации его на компьютере другого типа.Мне нужно реплицировать эту последовательность пакетов из моего приложения .net для инициализации устройства.
Все работает хорошо, пока я не получаю конкретный запрос на передачу пакета управления / тип класса.
Трассировка IМне выданы состояния, которые я должен выдать:
Control Transfer Class Type Request
21 0A 00 00 00 00 00 00
Result stall (intentional)
Control Transfer Class Tyoe Request
A1 01 01 03 00 00 40 00
Result will initiate a 64 byte transfer of data from the device to the host.
Это код, который я использую для этого:
// Transcation 6
UsbSetupPacket setup = new UsbSetupPacket(0x21, 0x0A, 0, 0, 0);
bool result = MyUsbDevice.ControlTransfer(ref setup, buffer, 0, out transferred);
Console.WriteLine("Result = {0}", result);
// Transcation 7
setup = new UsbSetupPacket(0xA1, 0x01, 0x0301, 0x0000, 0x0040);
result = MyUsbDevice.ControlTransfer(ref setup, buffer, 64, out transferred);
Console.WriteLine("Result = {0}, {1}", result, transferred);
И это трассировка, которую я получаю от BusHoundкоторый анализирует трафик данных USB для этого устройства:
Device Phase Data Description Cmd.Phase.Ofs(rep)
------ ----- ------------------------ ---------------- ------------------
46.0 CTL 21 0a 00 00 00 00 00 00 SET IDLE 20.1.0
46.0 USTS c0000004 stall pid 20.2.0
46.0 CTL a1 01 01 03 00 00 00 00 GET REPORT 21.1.0
46.1 USTS c0000004 stall pid 22.1.0
Как вы можете видеть, значение параметра 0x0040 в пакете установки не показывает его, хотя я его устанавливаю.Я относительно новичок в USB и .net / LibUsbDotNet, и я не совсем уверен, что я делаю не так.Интересно, кто-нибудь может мне что-нибудь предложить попробовать?
Заметьте, я занимаюсь разработкой на 64-битной машине Windows 7 с использованием Visual Studio 2008.
Спасибо, Рич