Process leftover data first in read

I there was a partial packet left over and it was greater than min_data then the serial port was not read so the packet could never finish.
This commit is contained in:
Paul Kendall 2022-07-14 19:43:17 +12:00
parent a9b0a713c3
commit 163fd5044a

View File

@ -108,29 +108,36 @@ class Transport {
let t;
let packet = this.left_over;
this.left_over = new Uint8Array(0);
if (packet.length < min_data) {
const reader = this.device.readable.getReader();
try {
if (timeout > 0) {
t = setTimeout(function() {
reader.cancel();
}, timeout);
}
do {
const {value, done} = await reader.read();
if (done) {
this.left_over = packet;
throw new TimeoutError("Timeout");
}
var p = new Uint8Array(this._appendBuffer(packet.buffer, value.buffer));
packet = p;
} while (packet.length < min_data);
} finally {
if (timeout > 0) {
clearTimeout(t);
}
reader.releaseLock();
if (this.slip_reader_enabled) {
const val_final = this.slip_reader(packet);
if (val_final.length > 0) {
return val_final;
}
packet = this.left_over;
this.left_over = new Uint8Array(0);
}
const reader = this.device.readable.getReader();
try {
if (timeout > 0) {
t = setTimeout(function() {
reader.cancel();
}, timeout);
}
do {
const {value, done} = await reader.read();
if (done) {
this.left_over = packet;
throw new TimeoutError("Timeout");
}
var p = new Uint8Array(this._appendBuffer(packet.buffer, value.buffer));
packet = p;
} while (packet.length < min_data);
} finally {
if (timeout > 0) {
clearTimeout(t);
}
reader.releaseLock();
}
if (this.slip_reader_enabled) {
return this.slip_reader(packet);