11

開発ボード (ODROID-X) と通信するために USB デバイス (自分でビルド) を接続しようとしています。残念ながら、非同期通信に関する限り、例はほとんどありません。割り込み駆動のデータ交換に問題がありました - 非同期割り込みモードを使用して接続を構築する方法は? 一方向では送信が可能でしたが、両方では機能しません。次のような例はありますか。

  • endpoint_OUT で ByteBuffer を送信する
  • endpoint_IN のデバイスからメッセージを取得する

どちらも割り込みモードです。

あなたのサポートに感謝します。

ハーディ

4

1 に答える 1

20

おそらく私はここで質問を誤解しています。レベル 12 以降の API パッケージの一部であるサンプル ミサイルランチャー アプリは、 メソッドqueue()requestWait()メソッドを使用して、割り込みタイプのエンドポイントを処理します。リクエストは In または Out のいずれかであり、EndPoint の方向によって異なります。

かなりノリノリな request->reply のコードは次のようになります。実際のコードを別の方法で構造化したいと思うでしょうが、これにより、何が起こる必要があるのか​​ の要点が得られます(願っています)

public void run() {
    int bufferMaxLength=mEndpointOut.getMaxPacketSize();
    ByteBuffer buffer = ByteBuffer.allocate(bufferMaxLength);
    UsbRequest request = new UsbRequest(); // create an URB
    request.initialize(mConnection, mEndpointOut);
    buffer.put(/* your payload here */;

    // queue the outbound request
    boolean retval = request.queue(buffer, 1); 
        if (mConnection.requestWait() == request) { 
             // wait for confirmation (request was sent)
             UsbRequest inRequest = new UsbRequest(); 
             // URB for the incoming data
             inRequest.initialize(mConnection, mEndpointIn); 
             // the direction is dictated by this initialisation to the incoming endpoint.
             if(inRequest.queue(buffer, bufferMaxLength) == true){
                  mConnection.requestWait(); 
                  // wait for this request to be completed
                  // at this point buffer contains the data received
             }
        }
}

スレッドをバインドせずに、この IO を非同期で実行する方法を実際に探している場合は、DeviceConnection.getFilehandle()メソッドを使用して、理論的には標準のファイル ハンドルを返すことを検討する必要があると思います。その他のファイル タイプのリソース。ただし、これを試していないことに注意してください。

これらのいずれも問題に対処しない場合は、質問を修正して、例を見つけるのに苦労していることを明確にしてください。これが役立つことを願っています。

于 2012-09-12T08:41:20.847 に答える