.net アプリケーションから通信できるようにする必要がある USB デバイスがあります。デバイスは標準の 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);
これは、このデバイスの USB データ トラフィックをスニッフィングしている BusHound から受信したトレースです。
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 ビット マシンで開発しています。
ありがとう、リッチ