A library to send and receive packets over serial, uses MODSERIAL
Dependents: SimpleSerialProtocolExample SerialFileReceiver
Ringbuffer.h
- Committer:
- p3p
- Date:
- 2014-09-19
- Revision:
- 3:5caff50e14a7
- Parent:
- 0:1639507580d5
File content as of revision 3:5caff50e14a7:
#ifndef RINGBUFFER #define RINGBUFFER namespace SimpleSerialProtocol { class RingBuffer { public: RingBuffer() { _read_index = 0; _write_index = 0; _size = 256; _buffer = new uint8_t[_size]; _dropped_bytes = 0; } RingBuffer(uint16_t capacity) { _read_index = 0; _write_index = 0; _size = capacity; _buffer = new uint8_t[_size]; _dropped_bytes = 0; } ~RingBuffer() { delete[] _buffer; } uint16_t size() { return _size; } uint16_t available() { if (_write_index < _read_index) { return (_write_index + size()) - _read_index; } else { return _write_index - _read_index; } } bool write(uint8_t byte) { if(available() < (size() -1) ){ _buffer[_write_index++] = byte; _write_index %= size(); return true; } else { _buffer[_write_index++] = byte; _write_index %= size(); ++_read_index; _read_index %= size(); _dropped_bytes++; return true; } } uint8_t read() { if(available()){ uint8_t value = _buffer[_read_index++]; _read_index %= size(); return value; } return 0; } uint32_t droppedBytes() { return _dropped_bytes; } private: uint16_t _read_index; uint16_t _write_index; uint8_t* _buffer; uint16_t _size; uint32_t _dropped_bytes; }; } #endif