Я пытаюсь объединить фрагменты пакета, который я получаю своим Xbee (802.15.4) в режиме API, через мой последовательный порт RS-232. Я получаю свой фрагмент с помощью метода readBytes из библиотеки jssc для java.Объединить фрагменты api XBee из последовательного порта
Вот мой прием кода
метод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: 200ff1200
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).
Я думал использовать начальный разделитель следующего пакета, но он не сработал.
Рассмотрите возможность использования этой библиотеки вместо того, чтобы изобретать колесо. Это должно облегчить обработку данных в виде фреймов вместо потока. https://docs.digi.com/display/XBJLIB/XBee+Java+Library – tomlogic