2016-06-23 9 views
2

私はbulk transfer Androidで作業しています。私はUSBとの間でデータを送受信しています。私が送るデータはcbwBufferです。これはUSBにセクタとセクタ数のUSBスタートを読み込ませるように指示するコマンドです。以下は私のコードです。バルク転送データは正常に受信されましたが、長さが足りません

byte cswBuffer[] = new byte[18432]; 
iRes = conn.bulkTransfer(epOUT, cbwBuffer, 31, 500);//send data 
iRes2 = conn.bulkTransfer(epIN, cswBuffer, 18432, 500);//receive data 

受信したデータが正確18432.ただし、IRES2が16384に等しくなければなりません、私が受け取ったデータのみが16384バイトではなく、18432バイトであることを意味しています。 cswBuffer(受信したデータ)を調べ、自分のデータが0インデックスから16384インデックスまでしか正しいことを確認しますが、残りはどこにありますか?データが十分でないことを意味します。 18432-16384 = 2048バイト以上必要です。

18432は、1セクタ= 512バイトのため、私のUSBの36セクタを読み取ることを意味します。 32個以上のセクタを読み込んだ場合、常に16384バイトが得られることに気付きました。

+0

質問を理解しやすくするために、多少の情報とコードを提供する必要があります。現実には、誰もがこれに答える方法は本質的にありません。 bulkTransferメソッドとは何ですか? connとは何ですか?実際のデータは16384バイト以上ですか? –

+0

@NicRobertson読者が理解できるようになった –

答えて

0

私が発見した結論は、最大データ長は16384バイトです。それ以上のものが必要な場合は、別のものをiRes = conn.bulkTransfer(epIN, cswBuffer, remaining, 500)に入れ、残りのデータを受信します。

したがって、各データが最大で16384バイトのデータをチャンクする必要があります。

if (noOfSector > 32) { 
       //CHUNK DATA 
       int maxLength = 16384; 
       int lengthReceivedData = 0; 
       int remaining; 
       int chunkSize = (noOfSector + 32 - 1)/32;int first= chuckSize; 
       byte[] receivedData = new byte[maxLength]; 
       while (chunkSize > 1) { 
        cswBuffer = new byte[maxLength]; 
        iRes = conn.bulkTransfer(epIN, cswBuffer, maxLength, 500); 

        if (chunkSize == first) {//if first time do this 
         receivedData = cswBuffer; 
        } else { 

         receivedData = concatenateByteArrays(receivedData, cswBuffer); 
        } 

        chunkSize--; 
        lengthReceivedData += maxLength; 
       } 
       remaining = sectorLength - lengthReceivedData; 
       if (chunkSize == 1) {//last one sector 
        cswBuffer = new byte[remaining]; 
        iRes = conn.bulkTransfer(epIN, cswBuffer, remaining, 500); 
        receivedData = concatenateByteArrays(receivedData, cswBuffer); 
        finalBuffer = receivedData; 
       } 
       //END CHUNK DATA 
関連する問題