Skip to content

Commit 42382c4

Browse files
nmzaheerper1234
authored andcommitted
Support for Part separator symbols added
1 parent 1cbcc8b commit 42382c4

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

Diff for: package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/msgAggregatorWorker.ts

+20-14
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ ctx.addEventListener("message", (event) => {
1818

1919
let buffer = "";
2020
let discardFirstLine = true;
21-
const separator = "\n";
22-
var re = new RegExp(`(${separator})`, "g");
21+
const separator = "\r?\n";
22+
const delimiter = "[, \t]+"; // Serial Plotter protocol supports Comma, Space & Tab characters as delimiters
23+
var separatorRegex = new RegExp(`(${separator})`, "g");
24+
var delimiterRegex = new RegExp(delimiter, "g");
2325

2426
export const parseSerialMessages = (
2527
messages: string[]
@@ -31,10 +33,11 @@ export const parseSerialMessages = (
3133
// so we need to discard it and start aggregating from the first encountered separator
3234
let joinMessages = messages.join("");
3335
if (discardFirstLine) {
34-
const firstSeparatorIndex = joinMessages.indexOf(separator);
35-
if (firstSeparatorIndex > -1) {
36+
separatorRegex.lastIndex = 0; // Reset lastIndex to ensure match happens from beginning of string
37+
const separatorMatch = separatorRegex.exec(joinMessages);
38+
if (separatorMatch && separatorMatch.index > -1) {
3639
joinMessages = joinMessages.substring(
37-
firstSeparatorIndex + separator.length
40+
separatorMatch.index + separatorMatch[0].length
3841
);
3942
discardFirstLine = false;
4043
} else {
@@ -47,13 +50,14 @@ export const parseSerialMessages = (
4750

4851
//add any leftover from the buffer to the first line
4952
const messagesAndBuffer = ((buffer || "") + joinMessages)
50-
.split(re)
53+
.split(separatorRegex)
5154
.filter((message) => message.length > 0);
5255

5356
// remove the previous buffer
5457
buffer = "";
58+
separatorRegex.lastIndex = 0;
5559
// check if the last message contains the delimiter, if not, it's an incomplete string that needs to be added to the buffer
56-
if (messagesAndBuffer[messagesAndBuffer.length - 1] !== separator) {
60+
if (!separatorRegex.test(messagesAndBuffer[messagesAndBuffer.length - 1])) {
5761
buffer = messagesAndBuffer[messagesAndBuffer.length - 1];
5862
messagesAndBuffer.splice(-1);
5963
}
@@ -62,19 +66,21 @@ export const parseSerialMessages = (
6266
const parsedLines: { [key: string]: number }[] = [];
6367

6468
// for each line, explode variables
69+
separatorRegex.lastIndex = 0;
6570
messagesAndBuffer
66-
.filter((message) => message !== separator)
71+
.filter((message) => !separatorRegex.test(message))
6772
.forEach((message) => {
6873
const parsedLine: { [key: string]: number } = {};
6974

70-
//there are two supported formats:
71-
// format1: <value1> <value2> <value3>
72-
// format2: name1:<value1>,name2:<value2>,name3:<value3>
75+
// Part Separator symbols i.e. Space, Tab & Comma are fully supported
76+
// SerialPlotter protocol specifies 3 message formats. The following 2 formats are supported
77+
// Value only format: <value1> <value2> <value3>
78+
// Label-Value format: name1:<value1>,name2:<value2>,name3:<value3>
7379

7480
// if we find a colon, we assume the latter is being used
7581
let tokens: string[] = [];
7682
if (message.indexOf(":") > 0) {
77-
message.split(",").forEach((keyValue: string) => {
83+
message.split(delimiterRegex).forEach((keyValue: string) => {
7884
let [key, value] = keyValue.split(":");
7985
key = key && key.trim();
8086
value = value && value.trim();
@@ -83,8 +89,8 @@ export const parseSerialMessages = (
8389
}
8490
});
8591
} else {
86-
// otherwise they are spaces
87-
const values = message.split(/\s/);
92+
// otherwise they are unlabelled
93+
const values = message.split(delimiterRegex);
8894
values.forEach((value, i) => {
8995
if (value.length) {
9096
tokens.push(...[`value ${i + 1}`, value]);

0 commit comments

Comments
 (0)