1

Android USB ホスト モードで作業しており、非同期バルク転送を実行したいと考えています。これまでのところ、同期一括転送をうまく使用してきましたが、非同期転送のために断片がどのように組み合わされるかを把握するのに少し苦労しています。UsbRequestのドキュメントから(太字の鉱山):

バルク エンドポイントのリクエストは、bulkTransfer(UsbEndpoint, byte[], int, int) を介して同期的に送信するか、queue(ByteBuffer, int)およびrequestWait() [UsbDeviceConnection メソッド]を介して非同期的に送信できます。

わかりました、これは既存の実行スレッドから queue() を呼び出してから、別のスレッドの別の場所で requestWait() を呼び出すということですか? requestWait() は、リクエストの完了時に実行するロジックをどこから取得しますか? 私が行った非同期作業のほとんどは、Javascript や Python などの言語で行われ、通常はコールバック関数を引数として渡します。Java では、おそらく特定のメソッドを実装するオブジェクトをコールバックとして渡すことが期待されていましたが、それがどこでも起こっていることはわかりません。おそらく、全体に対する私のメンタルモデルは間違っています。

誰かが非同期一括転送を送信する孤立した例を提供できますか?

4

1 に答える 1

0

基本的に、キューに入れられたものが完了すると、requestWait()メソッドは戻ります。UsbRequestこれは、同じスレッドまたは別のスレッドで実行できます。setClientData()ANDメソッドを使用して、getClientData()未処理のリクエストが複数あると仮定して、どのリクエストが完了したかを判断します。

複数の EndPoint で複数の UsbRequest をキューに入れ、requestWait()未処理のリクエストがなくなるまで繰り返し呼び出すことで、それらの完了ステータスを消費できます。

于 2012-09-12T16:27:15.447 に答える