From e3c73478a757137ed5c01f3fd49eebee8f5bd65c Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Mon, 19 Mar 2018 17:32:14 +0100 Subject: [PATCH 1/9] Serial.print() have to be: comms->print() --- CmdMessenger.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CmdMessenger.cpp b/CmdMessenger.cpp index cbb4ee7..7603e5c 100644 --- a/CmdMessenger.cpp +++ b/CmdMessenger.cpp @@ -628,20 +628,20 @@ void CmdMessenger::printSci(double f, unsigned int digits) // handle sign if (f < 0.0) { - Serial.print('-'); + comms->print('-'); f = -f; } // handle infinite values if (isinf(f)) { - Serial.print("INF"); + comms->print("INF"); return; } // handle Not a Number if (isnan(f)) { - Serial.print("NaN"); + comms->print("NaN"); return; } @@ -675,4 +675,4 @@ void CmdMessenger::printSci(double f, unsigned int digits) char output[16]; sprintf(output, format, whole, part, exponent); comms->print(output); -} \ No newline at end of file +} From 74216f3b50ebd19af1efa19c3fbefbc1fdc6e12a Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Tue, 20 Mar 2018 15:52:04 +0100 Subject: [PATCH 2/9] make readBin() safe for less received bytes (see issue #38) --- CmdMessenger.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CmdMessenger.h b/CmdMessenger.h index 1072bd7..31772e2 100644 --- a/CmdMessenger.h +++ b/CmdMessenger.h @@ -66,6 +66,7 @@ class CmdMessenger uint8_t bufferIndex; // Index where to write data in buffer uint8_t bufferLength; // Is set to MESSENGERBUFFERSIZE uint8_t bufferLastIndex; // The last index of the buffer + uint8_t LastArgLength; //The length if the last received argument char ArglastChar; // Bookkeeping of argument escape char char CmdlastChar; // Bookkeeping of command escape char bool pauseProcessing; // pauses processing of new commands, during sending @@ -131,7 +132,9 @@ class CmdMessenger byte *bytePointer = (byte *)(const void *)&value; for (unsigned int i = 0; i < sizeof(value); i++) { - *bytePointer = str[i]; + *bytePointer = 0; + if( i < LastArgLength ) + *bytePointer = str[i]; bytePointer++; } return value; From 2c082c1efbec7149ed58f25a361efb7362fd2288 Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Tue, 20 Mar 2018 15:53:19 +0100 Subject: [PATCH 3/9] make readBin() safe for less received bytes (see issue #38) --- CmdMessenger.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CmdMessenger.cpp b/CmdMessenger.cpp index 7603e5c..e961364 100644 --- a/CmdMessenger.cpp +++ b/CmdMessenger.cpp @@ -572,7 +572,8 @@ char* CmdMessenger::split_r(char *str, const char delim, char **nextp) // Set start of return pointer to this position ret = str; // Find next delimiter - str += findNext(str, delim); + LastArgLength = findNext(str, delim); + str += LastArgLength; // and exchange this for a a \0 char. This will terminate the char if (*str) { *str++ = '\0'; From f284382e37642eed8179d909bc817151048a66de Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Tue, 20 Mar 2018 16:06:09 +0100 Subject: [PATCH 4/9] some unescape() are missing (issue #39) --- CmdMessenger.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CmdMessenger.cpp b/CmdMessenger.cpp index e961364..7c6a01d 100644 --- a/CmdMessenger.cpp +++ b/CmdMessenger.cpp @@ -486,6 +486,7 @@ char* CmdMessenger::readStringArg() if (next()) { dumped = true; ArgOk = true; + unescape(current); return current; } ArgOk = false; @@ -501,6 +502,7 @@ void CmdMessenger::copyStringArg(char *string, uint8_t size) if (next()) { dumped = true; ArgOk = true; + unescape(current); strlcpy(string, current, size); } else { @@ -515,6 +517,7 @@ void CmdMessenger::copyStringArg(char *string, uint8_t size) uint8_t CmdMessenger::compareStringArg(char *string) { if (next()) { + unescape(current); if (strcmp(string, current) == 0) { dumped = true; ArgOk = true; From 9d278dd6c2e2d9d907888ea657b58402975f46e1 Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Tue, 20 Mar 2018 16:12:13 +0100 Subject: [PATCH 5/9] Update ArgOk in readBin() (issue #38) --- CmdMessenger.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CmdMessenger.h b/CmdMessenger.h index 31772e2..51610b6 100644 --- a/CmdMessenger.h +++ b/CmdMessenger.h @@ -137,6 +137,10 @@ class CmdMessenger *bytePointer = str[i]; bytePointer++; } + if( LastArgLength > 0 ) + ArgOk = true; + else + ArgOk = false; return value; } From 36ae5784b26ddec3b62b89c10e6d447b7718cde0 Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Tue, 20 Mar 2018 16:30:34 +0100 Subject: [PATCH 6/9] fix ArgOk --- CmdMessenger.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CmdMessenger.h b/CmdMessenger.h index 51610b6..b4fd5c7 100644 --- a/CmdMessenger.h +++ b/CmdMessenger.h @@ -137,10 +137,6 @@ class CmdMessenger *bytePointer = str[i]; bytePointer++; } - if( LastArgLength > 0 ) - ArgOk = true; - else - ArgOk = false; return value; } @@ -291,9 +287,11 @@ class CmdMessenger { if (next()) { dumped = true; + ArgOk = true; return readBin < T >(current); } else { + ArgOk = false; return empty < T >(); } } From eb8e413f1313dbf5012ae6b751a6246b41a4e5ad Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Tue, 20 Mar 2018 17:00:54 +0100 Subject: [PATCH 7/9] startCommand was not initialized (not a problem on arduino, but with C++-Builder on Windows) --- CmdMessenger.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/CmdMessenger.cpp b/CmdMessenger.cpp index 7c6a01d..daef6d9 100644 --- a/CmdMessenger.cpp +++ b/CmdMessenger.cpp @@ -65,6 +65,7 @@ CmdMessenger::CmdMessenger(Stream &ccomms, const char fld_separator, const char */ void CmdMessenger::init(Stream &ccomms, const char fld_separator, const char cmd_separator, const char esc_character) { + startCommand = false; default_callback = NULL; comms = &ccomms; print_newlines = false; From 8b0def1c53adb792ca02e58ea6e96bb59493019d Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:22:49 +0200 Subject: [PATCH 8/9] Update CmdMessenger.cpp Two small changes because of grumbling from the compiler Arduino 1.8.19. --- CmdMessenger.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CmdMessenger.cpp b/CmdMessenger.cpp index daef6d9..9c08795 100644 --- a/CmdMessenger.cpp +++ b/CmdMessenger.cpp @@ -482,7 +482,7 @@ double CmdMessenger::readDoubleArg() * Read next argument as string. * Note that the String is valid until the current command is replaced */ -char* CmdMessenger::readStringArg() +const char* CmdMessenger::readStringArg() { if (next()) { dumped = true; @@ -491,7 +491,7 @@ char* CmdMessenger::readStringArg() return current; } ArgOk = false; - return '\0'; + return "\0"; } /** From 4ef21e3dd3e7ff734a38007137e3acb773f74431 Mon Sep 17 00:00:00 2001 From: sigmaeo <36727521+sigmaeo@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:23:57 +0200 Subject: [PATCH 9/9] Update CmdMessenger.h A small change because of grumbling from the compiler Arduino 1.8.19. --- CmdMessenger.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CmdMessenger.h b/CmdMessenger.h index b4fd5c7..2637420 100644 --- a/CmdMessenger.h +++ b/CmdMessenger.h @@ -276,7 +276,7 @@ class CmdMessenger char readCharArg(); float readFloatArg(); double readDoubleArg(); - char *readStringArg(); + const char *readStringArg(); void copyStringArg(char *string, uint8_t size); uint8_t compareStringArg(char *string);