Mirror of espurna firmware for wireless switches and more
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
1.3 KiB

/*
Arduino Stream from a generic generic byte range
Implementation of the Print is taken by reference and will be proxied
Copyright (C) 2020 by Maxim Prokhorov <prokhorov dot max at outlook dot com>
*/
#include <Arduino.h>
#include <core_version.h>
#include <memory>
#pragma once
template <typename T>
struct StreamAdapter final : public Stream {
StreamAdapter(Print& writer, T&& begin, T&& end) :
_writer(writer),
_current(std::forward<T>(begin)),
_begin(std::forward<T>(begin)),
_end(std::forward<T>(end))
{}
int available() override {
return (_end - _current);
}
int peek() override {
if (available() && (_end != (1 + _current))) {
return *(1 + _current);
}
return -1;
}
int read() override {
if (_end != _current) {
return *(_current++);
}
return -1;
}
void flush() override {
// 2.3.0 - Stream::flush()
// latest - Print::flush()
#if not defined(ARDUINO_ESP8266_RELEASE_2_3_0)
_writer.flush();
#endif
}
size_t write(const uint8_t* buffer, size_t size) override {
return _writer.write(buffer, size);
}
size_t write(uint8_t ch) override {
return _writer.write(ch);
}
private:
Print& _writer;
T _current;
T const _begin;
T const _end;
};