Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

‎package-lock.json‎

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/msgAggregatorWorker.ts‎

Lines changed: 20 additions & 14 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /