成功收到批量转移数据,但其长度不够

时间:2016-06-23 02:37:44

标签: java android usb transfer bulk

我正在使用bulk transfer Android。我成功地向USB发送数据和从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表示我读取了USB的36个扇区,因为1个扇区= 512个字节。我刚刚意识到,如果我读取超过32个扇区,我将总是得到16384个字节。

1 个答案:

答案 0 :(得分: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