IN と OUT の両方の割り込みエンドポイントがそれぞれ 64 バイト長のカスタム USB HID デバイスを開発しています。それぞれ 63 バイトのレポート カウントを持つ 2 つのレポート (レポート ID 1 のレポートとレポート ID 2 のレポート) があります。VC++ で開発された PC アプリが WriteFile() を使用して 64 バイトのバッファーを送信すると、OUT 割り込みエンドポイントのデバイスでバッファー全体を適切に受信します。しかし、IN エンドポイントでデバイスから PC に 64 バイトのバッファーを送信すると、ReadFile() は値 4 (タイムアウト) を返します。これは、デバイスが接続されているときに 2 回だけ発生します。その後、すべて正常に動作し、PC はデバイスから送信された 64 バイトを正しく読み取ります。
USBlyzer ツールを使用して、USB バス トラフィックを盗聴しています。そのソフトウェアは、最初の 2 回、デバイスが割り込み IN エンドポイントで 64 バイトのバッファーを送信することを示していますが、その中のデータを表示することもできません。そして 3 回目以降、すべてが魔法のように機能し、PC アプリケーションと USBlyzer の両方が 64 バイトのバッファの内容を受信して画面に表示します。
問題がどこにあるのか正確にはわかりません。PC 側のコードにあるのでしょうか、それともデバイスのファームウェアにあるのでしょうか? あなたの考えを共有してください。