我正在开发一个供我自己使用的应用程序。 Android设备与其他设备通信。早些时候我正在通过Bluetooth
进行通信,但此刻我正在改为USB
通信。我使用ksksue FTDriver。我遇到了思考循环而无法摆脱它:)
基本上,我需要从设备接收固定的6字节数据。 2个数据字节和4个CRC字节。我将1个字节加1并将其添加到其他字节数组,当达到6个字节时,然后将它们重新复制到新的字节数组,并在CRC等于时处理它们。
这是来自蓝牙应用
public void run() {
byte[] buffer = new byte[1]; // buffer store for the stream
int bytesAvailable; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
bytesAvailable = mmInStream.read(buffer);
System.arraycopy(buffer, 0, input_bytes_from, last, buffer.length);
last++;
if (last == 6){
last = 0;
Log.d(TAG,"received "+bytesToHex(input_bytes_from));
byte[] data_bytes = new byte[2];
byte[] crc_to_compare = new byte[4];
for(byte i=0;i<data_bytes.length;i++)data_bytes[i] = input_bytes_from[i];
for(int i=0;i<4;i++){
crc_to_compare[i] = input_bytes_from[i+data_bytes.length];
}
crc_test(data_bytes,crc_to_compare);
}
}
catch (IOException e) {
break;
}
}
}
bytesAvailable = mmInStream.read(buffer);
时字节/ s会发生什么?是否从mmInStream.read
复制并删除了一个字节?答案 0 :(得分:0)
bytesAvailable = mmInStream.read(buffer);
时字节/ s会发生什么?是否从mmInStream.read
复制并删除了一个字节?是。从InputStream
中删除一个字节,并将该字节复制到buffer
。
您不需要逐个读取字节。请参阅以下代码。
public void run() {
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
byte[] data_bytes = new byte[2];
byte[] crc_to_compare = new byte[4];
mmInStream.read(data_bytes);
mmInStream.read(crc_to_compare);
crc_test(data_bytes, crc_to_compare);
} catch (IOException e) {
break;
}
}
}
有一个开源框架,用于与其他设备进行串行通信,称为NFCommunicator。
https://github.com/Neofect/NFCommunicator
它可以帮助您创建一个Android应用程序,通过蓝牙SPP等串行协议与其他设备通信,但目前不支持USB连接。