31 typedef void (*writeCallback)(uint8_t);
34 _buffer =
new char[buflen];
43 virtual uint16_t inject(
char ch) {
44 _buffer[_buffer_write] = ch;
45 _buffer_write = (_buffer_write + 1) % _buffer_size;
49 virtual uint16_t inject(
char *data,
size_t len) {
50 for (uint16_t i=0; i<len; i++) {
56 virtual void callback(writeCallback c) {
62 virtual size_t write(uint8_t ch) {
63 if (_callback) _callback(ch);
69 if (_buffer_read != _buffer_write) {
70 ch = _buffer[_buffer_read];
71 _buffer_read = (_buffer_read + 1) % _buffer_size;
76 virtual int available() {
78 if (_buffer_read > _buffer_write) {
79 bytes += (_buffer_write - _buffer_read + _buffer_size);
80 }
else if (_buffer_read < _buffer_write) {
81 bytes += (_buffer_write - _buffer_read);
88 if (_buffer_read != _buffer_write) {
89 ch = _buffer[_buffer_read];
94 virtual void flush() {
95 _buffer_read = _buffer_write;
102 uint16_t _buffer_write = 0;
103 uint16_t _buffer_read = 0;
104 writeCallback _callback = NULL;