2016-12-22 8 views
2

UsbRequest.queue(ByteBuffer、int)を使用しているときに現在問題が発生しています。Android UsbRequest.queue(ByteBuffer)は位置、制限などを無視しますか?

ByteBufferの位置を無視し、常にバッファ内の位置0に書き込みを開始します。次に、バッファの位置を読み取られたバイト数に設定します。

https://android.googlesource.com/platform/frameworks/base.git/+/a3665ba95d806fcb6780d29d49bd0f1032e8bc86%5E%21/#F0

どのようにそれが、これは単に無視されていることを、することができますか? ByteBufferの開始位置を指定する方法に関するアイデアはありますか?

おかげで、 マグナス

答えて

0

EDIT2:だから私は基本的には今一時バッファを使用して、最終的にバッファに応じてデータをコピーされてやっています。

編集:これは解決策ではありません。 wrapは、オフセットするByteBufferの位置を設定します。私はByteBufferの位ラップ使用の回避策が見出さ

さて

int length = dest.remaining(); 

    // workaround: UsbRequest.queue always writes at position 0 :/ 
    ByteBuffer tmp = ByteBuffer.wrap(dest.array(), dest.position(), length); 
    if(!inRequest.queue(tmp, length)) { 
     throw new IOException("Error queueing request."); 
    } 

    UsbRequest request = deviceConnection.requestWait(); 
    if (request == inRequest) { 
     dest.position(dest.position() + tmp.position()); 
     return tmp.position(); 
    } 

    throw new IOException("requestWait failed! Request: " + request); 
(バイト[]配列は、int型の長さ、オフセットINT)
関連する問題