From 615215d3137d6bd753cbd855928a4dbea105fd05 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 20 Aug 2017 15:27:52 +0200 Subject: stream --- car/pb_stream.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 car/pb_stream.cpp (limited to 'car/pb_stream.cpp') diff --git a/car/pb_stream.cpp b/car/pb_stream.cpp new file mode 100644 index 0000000..0eb7fc0 --- /dev/null +++ b/car/pb_stream.cpp @@ -0,0 +1,49 @@ +#include "pb_stream.h" + +#define MAXSZ (size_t)-1 + +bool +os_read(pb_istream_t *stream, uint8_t *buf, size_t count) +{ + Stream *s = static_cast(stream->state); + while (count > 0) { + if (s->available() > 0) { + size_t readCount = s->readBytes((char *)buf, count); + count -= readCount; + } + } + return true; +} + + +void +pb_istream_from_stream(Stream &stream, pb_istream_t &istream) +{ + istream.callback = &os_read; + istream.state = &stream; + istream.bytes_left = MAXSZ; +#ifndef PB_NO_ERRMSG + istream.errmsg = NULL; +#endif +} + +bool +os_write(pb_ostream_t *stream, const uint8_t *buf, size_t count) +{ + if (stream == NULL || buf == NULL) { + return false; + } + Print *s = static_cast(stream->state); + return (s->write(buf, count) == count); +} + +void +pb_ostream_from_stream(Print &stream, pb_ostream_t &ostream) { + ostream.callback = &os_write; + ostream.state = &stream; + ostream.max_size = MAXSZ; + ostream.bytes_written = 0; +#ifndef PB_NO_ERRMSG + ostream.errmsg = NULL; +#endif +} -- cgit v1.2.3