Fix reads that do not use packets getting stuck in infinite loop.

This commit is contained in:
FrozenOne 2017-06-12 14:23:59 +02:00
parent 46790676e6
commit 5eb7ee925e
1 changed files with 14 additions and 11 deletions

View File

@ -989,18 +989,21 @@ public final class SerialPort
byte[] newBytes = new byte[numBytesAvailable];
newBytesIndex = 0;
bytesRemaining = readBytes(portHandle, newBytes, newBytes.length);
while (bytesRemaining >= (dataPacket.length - dataPacketIndex))
{
System.arraycopy(newBytes, newBytesIndex, dataPacket, dataPacketIndex, dataPacket.length - dataPacketIndex);
bytesRemaining -= (dataPacket.length - dataPacketIndex);
newBytesIndex += (dataPacket.length - dataPacketIndex);
dataPacketIndex = 0;
userDataListener.serialEvent(new SerialPortEvent(SerialPort.this, LISTENING_EVENT_DATA_RECEIVED, dataPacket.clone()));
if(dataPacket.length == 0) {
userDataListener.serialEvent(new SerialPortEvent(SerialPort.this, LISTENING_EVENT_DATA_RECEIVED, newBytes.clone()));
}
if (bytesRemaining > 0)
{
System.arraycopy(newBytes, newBytesIndex, dataPacket, dataPacketIndex, bytesRemaining);
dataPacketIndex += bytesRemaining;
else {
while (bytesRemaining >= (dataPacket.length - dataPacketIndex)) {
System.arraycopy(newBytes, newBytesIndex, dataPacket, dataPacketIndex, dataPacket.length - dataPacketIndex);
bytesRemaining -= (dataPacket.length - dataPacketIndex);
newBytesIndex += (dataPacket.length - dataPacketIndex);
dataPacketIndex = 0;
userDataListener.serialEvent(new SerialPortEvent(SerialPort.this, LISTENING_EVENT_DATA_RECEIVED, dataPacket.clone()));
}
if (bytesRemaining > 0) {
System.arraycopy(newBytes, newBytesIndex, dataPacket, dataPacketIndex, bytesRemaining);
dataPacketIndex += bytesRemaining;
}
}
}
}