我有一个 USB 设备,我需要能够通过 .net 应用程序与之通信。该设备不是标准的 HID 设备,为了初始化它,我已经从 USB 协议分析器/嗅探器中获得了数据包的跟踪信息,用于在另一种类型的机器上初始化它时使用的数据包。我需要从我的 .net 应用程序中复制这个数据包序列来初始化设备。
在我收到特定的控制传输数据包/类类型请求之前,一切都运行良好。
我得到的跟踪表明我应该发出:
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 比较陌生,我不太确定自己做错了什么。我想知道是否有人可以建议我尝试什么?
请注意,我正在使用 Visual Studio 2008 在 Windows 7 64 位机器上进行开发。
谢谢,丰富