diff --git a/RingBuffer.h b/RingBuffer.h index ffd346e..7a066b9 100644 --- a/RingBuffer.h +++ b/RingBuffer.h @@ -56,7 +56,7 @@ public: bool put(const volatile TDATATYPE item) volatile; bool get(volatile TDATATYPE& item) volatile; - + TDATATYPE peek() const; bool hasOverflowed(); diff --git a/SerialRB.cpp b/SerialRB.cpp index f6b1578..ca3350d 100644 --- a/SerialRB.cpp +++ b/SerialRB.cpp @@ -21,80 +21,16 @@ Boston, MA 02110-1301, USA. #include "SerialRB.h" CSerialRB::CSerialRB(uint16_t length) : -m_length(length), -m_head(0U), -m_tail(0U), -m_full(false) +CRingBuffer(length) { - m_buffer = new uint8_t[length]; -} - -void CSerialRB::reset() -{ - m_head = 0U; - m_tail = 0U; - m_full = false; -} - -uint16_t CSerialRB::getSpace() const -{ - uint16_t n = 0U; - - if (m_tail == m_head) - n = m_full ? 0U : m_length; - else if (m_tail < m_head) - n = m_length - m_head + m_tail; - else - n = m_tail - m_head; - - if (n > m_length) - n = 0U; - - return n; -} - -uint16_t CSerialRB::getData() const -{ - if (m_tail == m_head) - return m_full ? m_length : 0U; - else if (m_tail < m_head) - return m_head - m_tail; - else - return m_length - m_tail + m_head; -} - -bool CSerialRB::put(uint8_t c) -{ - if (m_full) - return false; - - m_buffer[m_head] = c; - - m_head++; - if (m_head >= m_length) - m_head = 0U; - - if (m_head == m_tail) - m_full = true; - - return true; -} - -uint8_t CSerialRB::peek() const -{ - return m_buffer[m_tail]; } uint8_t CSerialRB::get() { - uint8_t value = m_buffer[m_tail]; - - m_full = false; - - m_tail++; - if (m_tail >= m_length) - m_tail = 0U; - - return value; + uint8_t value; + if(CRingBuffer::get(value)) + return value; + + return 0U; } diff --git a/SerialRB.h b/SerialRB.h index 7b6b7b9..1357732 100644 --- a/SerialRB.h +++ b/SerialRB.h @@ -21,41 +21,15 @@ Boston, MA 02110-1301, USA. #if !defined(SERIALRB_H) #define SERIALRB_H -#if defined(STM32F4XX) -#include "stm32f4xx.h" -#elif defined(STM32F7XX) -#include "stm32f7xx.h" -#elif defined(STM32F105xC) -#include "stm32f1xx.h" -#include -#else -#include -#endif +#include "RingBuffer.h" const uint16_t SERIAL_RINGBUFFER_SIZE = 370U; -class CSerialRB { +class CSerialRB : public CRingBuffer{ public: CSerialRB(uint16_t length = SERIAL_RINGBUFFER_SIZE); - uint16_t getSpace() const; - - uint16_t getData() const; - - void reset(); - - bool put(uint8_t c); - - uint8_t peek() const; - uint8_t get(); - -private: - uint16_t m_length; - volatile uint8_t* m_buffer; - volatile uint16_t m_head; - volatile uint16_t m_tail; - volatile bool m_full; }; #endif