java合并串行端口的XBee api片段
我试图将Xbee(802.15.4)在API模式下通过RS-232串行端口接收到的数据包片段合并在一起。我使用readBytes方法从jssc java库中获取片段
这是我的接待代码
private static class PortReader implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() > 0) {
try {
byte[] receivedData = serialPort.readBytes(event.getEventValue());
if(Utils.isConfirmPacket(Utils.toHex(receivedData))){
System.out.println("XBee confim that msg is sent!");
}else{
System.out.println("Received response from port: " + Utils.toHex(receivedData));
int dataLength = Utils.toHex(receivedData).length();
receiveFile("testRx", receivedData, dataLength);
}
}
catch (SerialPortException ex) {
System.out.println("Error in receiving response from port: " + ex);
}
}
}
我的receiveFile()方法需要在一个片段中包含完整的数据包。以下是我在控制台中得到的信息:
Received response from port: 7e003c8100013200
Received response from port: 2000123200ff1200
Received response from port: 0001000500000000
Received response from port: 0000000020000000
Received response from port: 1251000012455222
Received response from port: 446174613a206365
Received response from port: 6369206573742075
Received response from port: 6e20746573743b90
由于我使用的是API模式,所以无法像在其他解决方案(Read Complete Line Java Serial Port)中看到的那样,向指定的数据包结尾发送结束分隔符
我本想使用下一个数据包的开始分隔符,但没有成功
# 1 楼答案
我用api数据包的长度计算出来了。由于长度位于第一个数组的[1]和[2]位置,因此在接收数据时,我可以使用该值继续构建数据包。当我的msgLengthLeft值为0时,我知道数据包已经全部收到,我可以返回完整的数据包。这是我的代码: