aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris--A <chris@genx.biz>2015-06-19 13:05:06 +1000
committerSandeep Mistry <s.mistry@arduino.cc>2015-11-23 15:46:23 -0500
commit29e1dbb8be6beb75604094df5c5e736f7af67f79 (patch)
treeed4c4caad099b3123ebb29311f4ba9960496f82a
parentb15e001b0d1b78caf3475c004d993fda58fcebef (diff)
This commit improves the parsing capability by allowing decimals only
prefixed by an '.' character. Previously the preceeding zero must be present: '0.'
-rw-r--r--cores/arduino/Stream.cpp15
-rw-r--r--cores/arduino/Stream.h2
2 files changed, 10 insertions, 7 deletions
diff --git a/cores/arduino/Stream.cpp b/cores/arduino/Stream.cpp
index b31942f..1f2f074 100644
--- a/cores/arduino/Stream.cpp
+++ b/cores/arduino/Stream.cpp
@@ -54,14 +54,17 @@ int Stream::timedPeek()
// returns peek of the next digit in the stream or -1 if timeout
// discards non-numeric characters
-int Stream::peekNextDigit()
+int Stream::peekNextDigit( bool detectDecimal )
{
int c;
while (1) {
c = timedPeek();
- if (c < 0) return c; // timeout
- if (c == '-') return c;
- if (c >= '0' && c <= '9') return c;
+
+ if( c < 0 ||
+ c == '-' ||
+ c >= '0' && c <= '9' ||
+ detectDecimal && c == '.') return c;
+
read(); // discard non-numeric
}
}
@@ -124,7 +127,7 @@ long Stream::parseInt(char skipChar)
long value = 0;
int c;
- c = peekNextDigit();
+ c = peekNextDigit(false);
// ignore non numeric leading characters
if(c < 0)
return 0; // zero returned if timeout
@@ -162,7 +165,7 @@ float Stream::parseFloat(char skipChar){
char c;
float fraction = 1.0;
- c = peekNextDigit();
+ c = peekNextDigit(true);
// ignore non numeric leading characters
if(c < 0)
return 0; // zero returned if timeout
diff --git a/cores/arduino/Stream.h b/cores/arduino/Stream.h
index 15f6761..4bc0036 100644
--- a/cores/arduino/Stream.h
+++ b/cores/arduino/Stream.h
@@ -42,7 +42,7 @@ class Stream : public Print
unsigned long _startMillis; // used for timeout measurement
int timedRead(); // private method to read stream with timeout
int timedPeek(); // private method to peek stream with timeout
- int peekNextDigit(); // returns the next numeric digit in the stream or -1 if timeout
+ int peekNextDigit( bool detectDecimal ); // returns the next numeric digit in the stream or -1 if timeout
public:
virtual int available() = 0;