diff --git a/container/SharedRingBuffer.cpp b/container/SharedRingBuffer.cpp index 86277a80..2fde2851 100644 --- a/container/SharedRingBuffer.cpp +++ b/container/SharedRingBuffer.cpp @@ -43,6 +43,16 @@ ReturnValue_t SharedRingBuffer::deleteDataProtected(size_t amount, return SimpleRingBuffer::deleteData(amount, deleteRemaining, trueAmount); } +size_t SharedRingBuffer::getExcessBytes() const { + MutexHelper(mutex, mutexTimeout); + return SimpleRingBuffer::getExcessBytes(); +} + +void SharedRingBuffer::moveExcessBytesToStart() { + MutexHelper(mutex, mutexTimeout); + return SimpleRingBuffer::moveExcessBytesToStart(); +} + size_t SharedRingBuffer::getAvailableReadDataProtected(uint8_t n) const { MutexHelper(mutex, mutexTimeout); return ((write + size) - read[n]) % size; diff --git a/container/SharedRingBuffer.h b/container/SharedRingBuffer.h index 7fed7b22..8d68b967 100644 --- a/container/SharedRingBuffer.h +++ b/container/SharedRingBuffer.h @@ -34,6 +34,14 @@ public: void setMutexTimeout(dur_millis_t newTimeout); + virtual size_t getExcessBytes() const override; + /** + * Helper functions which moves any excess bytes to the start + * of the ring buffer. + * @return + */ + virtual void moveExcessBytesToStart() override; + /** Performs mutex protected SimpleRingBuffer::getFreeElement call */ ReturnValue_t getFreeElementProtected(uint8_t** writePtr, size_t amount); diff --git a/container/SimpleRingBuffer.cpp b/container/SimpleRingBuffer.cpp index cad1a48e..36880813 100644 --- a/container/SimpleRingBuffer.cpp +++ b/container/SimpleRingBuffer.cpp @@ -39,7 +39,7 @@ ReturnValue_t SimpleRingBuffer::getFreeElement(uint8_t **writePointer, if((amount - amountTillWrap + excessBytes) > maxExcessBytes) { return HasReturnvaluesIF::RETURN_FAILED; } - excessBytes += amount - amountTillWrap; + excessBytes = amount - amountTillWrap; } *writePointer = &buffer[write]; incrementWrite(amount); diff --git a/container/SimpleRingBuffer.h b/container/SimpleRingBuffer.h index 2627541f..0784e415 100644 --- a/container/SimpleRingBuffer.h +++ b/container/SimpleRingBuffer.h @@ -64,13 +64,13 @@ public: */ ReturnValue_t getFreeElement(uint8_t** writePointer, size_t amount); - size_t getExcessBytes() const; + virtual size_t getExcessBytes() const; /** * Helper functions which moves any excess bytes to the start * of the ring buffer. * @return */ - void moveExcessBytesToStart(); + virtual void moveExcessBytesToStart(); /** * Read from circular buffer at read pointer.