diff --git a/cores/esp32/StreamString.cpp b/cores/esp32/StreamString.cpp index d0117c399eb..6418044f8a4 100644 --- a/cores/esp32/StreamString.cpp +++ b/cores/esp32/StreamString.cpp @@ -53,6 +53,26 @@ int StreamString::read() { return -1; } +size_t StreamString::readBytes(char *buffer, size_t buffLen) { + if (!buffLen || !buffer) { + return 0; + } + const uint32_t start = millis(); + size_t count = 0; + do { + if (this->length()) { + const size_t available = min(buffLen - count, (size_t)this->length()); + memcpy(buffer + count, c_str(), available); + remove(0, available); + count += available; + } + if (count == buffLen || _timeout == 0) { + return count; + } + } while (millis() - start < _timeout); + return count; +} + int StreamString::peek() { if (length()) { char c = charAt(0); diff --git a/cores/esp32/StreamString.h b/cores/esp32/StreamString.h index b4f20147277..036878852f0 100644 --- a/cores/esp32/StreamString.h +++ b/cores/esp32/StreamString.h @@ -31,6 +31,7 @@ class StreamString : public Stream, public String { int available() override; int read() override; + size_t readBytes(char *buffer, size_t count) override; int peek() override; void flush() override; };