diff --git a/libraries/AP_HAL/utility/RingBuffer.cpp b/libraries/AP_HAL/utility/RingBuffer.cpp index 8fdb9b24ab..5d232db066 100644 --- a/libraries/AP_HAL/utility/RingBuffer.cpp +++ b/libraries/AP_HAL/utility/RingBuffer.cpp @@ -18,6 +18,18 @@ ByteBuffer::~ByteBuffer(void) delete [] buf; } +/* + caller is responsible for locking in set_size() + */ +void ByteBuffer::set_size(uint32_t _size) +{ + uint8_t *oldbuf = buf; + head = tail = 0; + size = _size; + buf = new uint8_t[size]; + delete [] oldbuf; +} + uint32_t ByteBuffer::available(void) const { uint32_t _tail; diff --git a/libraries/AP_HAL/utility/RingBuffer.h b/libraries/AP_HAL/utility/RingBuffer.h index 423a661357..68c53bbefa 100644 --- a/libraries/AP_HAL/utility/RingBuffer.h +++ b/libraries/AP_HAL/utility/RingBuffer.h @@ -55,6 +55,9 @@ public: // return size of ringbuffer uint32_t get_size(void) const { return size; } + // set size of ringbuffer, caller responsible for locking + void set_size(uint32_t size); + // advance the read pointer (discarding bytes) bool advance(uint32_t n);