diff --git a/cores/esp32/StreamString.cpp b/cores/esp32/StreamString.cpp index d0117c399eb..cad3ea6e522 100644 --- a/cores/esp32/StreamString.cpp +++ b/cores/esp32/StreamString.cpp @@ -41,24 +41,15 @@ size_t StreamString::write(uint8_t data) { } int StreamString::available() { - return length(); + return length() - _start; } int StreamString::read() { - if (length()) { - char c = charAt(0); - remove(0, 1); - return c; - } - return -1; + return available() ? charAt(_start++) : -1; } int StreamString::peek() { - if (length()) { - char c = charAt(0); - return c; - } - return -1; + return available() ? charAt(_start) : -1; } void StreamString::flush() {} diff --git a/cores/esp32/StreamString.h b/cores/esp32/StreamString.h index b4f20147277..39df96afb2d 100644 --- a/cores/esp32/StreamString.h +++ b/cores/esp32/StreamString.h @@ -33,6 +33,10 @@ class StreamString : public Stream, public String { int read() override; int peek() override; void flush() override; + +private: + // read position + unsigned int _start = 0; }; #endif /* STREAMSTRING_H_ */