Skip to content

Commit b144664

Browse files
committed
discard incomplete first lines
1 parent 37d4fd8 commit b144664

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/ChartPlotter.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ function _Chart(
146146
(chartRef.current as any).options.scales.x.realtime.pause = pause;
147147
}
148148
setPause(newState);
149+
worker.postMessage({ command: "cleanup" });
150+
enableTooltips(newState);
149151
(opts.plugins as any).tooltip.enabled = newState;
150152
opts.datasets!.line!.pointHoverRadius = newState ? 3 : 0;
151153
setOpts(opts);

src/msgAggregatorWorker.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ ctx.addEventListener("message", (event) => {
88

99
if (command === "cleanup") {
1010
buffer = "";
11+
discardFirstLine = true;
1112
}
1213

1314
if (data) {
@@ -16,6 +17,7 @@ ctx.addEventListener("message", (event) => {
1617
});
1718

1819
let buffer = "";
20+
let discardFirstLine = true;
1921
const separator = "\r\n";
2022
var re = new RegExp(`(${separator})`, "g");
2123

@@ -25,8 +27,26 @@ export const parseSerialMessages = (
2527
datasetNames: string[];
2628
parsedLines: { [key: string]: number }[];
2729
} => {
30+
// when the serial is real fast, the first line can be incomplete and contain incomplete messages
31+
// so we need to discard it and start aggregating from the first encountered separator
32+
let joinMessages = messages.join("");
33+
if (discardFirstLine) {
34+
const firstSeparatorIndex = joinMessages.indexOf(separator);
35+
if (firstSeparatorIndex > -1) {
36+
joinMessages = joinMessages.substring(
37+
firstSeparatorIndex + separator.length
38+
);
39+
discardFirstLine = false;
40+
} else {
41+
return {
42+
datasetNames: [],
43+
parsedLines: [],
44+
};
45+
}
46+
}
47+
2848
//add any leftover from the buffer to the first line
29-
const messagesAndBuffer = (buffer + messages.join(""))
49+
const messagesAndBuffer = ((buffer || "") + joinMessages)
3050
.split(re)
3151
.filter((message) => message.length > 0);
3252

0 commit comments

Comments
 (0)