diff --git a/.gitignore b/.gitignore index c327116cf1..8a55b03e66 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ tests/hosts/lcov/ *.gch boards.local.txt +platform.local.txt *.gcov *.gcno diff --git a/cores/esp8266/StreamString.cpp b/cores/esp8266/StreamString.cpp index 7ebf11d0e2..863c650cb1 100644 --- a/cores/esp8266/StreamString.cpp +++ b/cores/esp8266/StreamString.cpp @@ -39,23 +39,28 @@ size_t StreamString::write(uint8_t data) { return concat((char) data); } +size_t StreamString::readBytes(char *buffer, size_t length) { + size_t cpylen = min(length, (size_t)available()); + memcpy(buffer, begin()+_offset, cpylen); + _offset += cpylen; + return cpylen; +} + int StreamString::available() { - return length(); + return length() - _offset; } int StreamString::read() { - if(length()) { - char c = charAt(0); - remove(0, 1); + if(available()) { + char c = charAt(_offset++); return c; - } return -1; } int StreamString::peek() { - if(length()) { - char c = charAt(0); + if(available()) { + char c = charAt(_offset); return c; } return -1; diff --git a/cores/esp8266/StreamString.h b/cores/esp8266/StreamString.h index 1fedc18de0..768f4351dc 100644 --- a/cores/esp8266/StreamString.h +++ b/cores/esp8266/StreamString.h @@ -25,14 +25,20 @@ class StreamString: public Stream, public String { +protected: + size_t _offset = 0; public: size_t write(const uint8_t *buffer, size_t size) override; size_t write(uint8_t data) override; + size_t readBytes(char *buffer, size_t length) override; + int available() override; int read() override; int peek() override; void flush() override; + + void reset() { _offset = 0; } };