ホストのデータの準備が整うとすぐに(WriteFileを使用してHIDにコマンドを送信し、HIDにポート値などのデータを返すように指示する場合など)、パケット内の準備完了ビットは次のようになります。設定すると、ReadFileが呼び出される前に、ホストはそれを読み取ります(別のUSB割り込みによって確認されます)。ReadFileは、後でこのデータをホストのバッファーに入れるために使用されます。これはそれが起こるべき方法ですか?ReadFile呼び出しがin割り込みを引き起こすことを期待していました。
だからここに私の問題があります:私は一緒にうまく機能するGUIとHIDを持っています。HIDは別のICに対してI2Cを実行でき、GUIはHIDにI2Cを正常に実行するように指示できます。起動時に、GUIはHIDからデータを読み取り、正しい値(たとえば、0x49)を取得します。同じHIDに対して2番目のGUIを開くと、HIDから読み取られた同じ初期データが実行され、正しい値が取得されます(たとえば、0x49。最初のGUIの読み取りと同じである必要があります)。ここで、最初のGUIに移動してI2C読み取りを行うと、リードバック値は0x49になります。これは、2番目のGUIがHIDから要求した値です。HIDは、接続されているすべてのデバイスのエンドポイントにこの値を設定しているようです。したがって、1番目のGUIは、これが正しい値であると誤って判断します。
JanAxelsonのHIDFAQによると、「HIDへの開いているハンドルにはすべて独自のレポートキューがあります。デバイスが送信するすべてのレポートはすべてのキューに入れられるため、複数のアプリケーションが同じレポートを読み取ることができます。」これが私の問題だと思います。正しい値(HIDがデバッガーごとに送信する)が通過するように、最初のGUIが要求を行う前に、これをパージしてエンドポイントをクリアするにはどうすればよいですか?HidD_FlushQueueを試しましたが、Falseが返され続けます(機能しません。同じハンドルでWriteFile / ReadFileが成功するたびにハンドルは有効ですが、「ハンドルが無効です」というエラーが発生し続けます)。何か案は?
ありがとう!