我正在使用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个字节。
答案 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