Skip to content
Snippets Groups Projects
Commit 353bf623 authored by Jonathan BAUDIN's avatar Jonathan BAUDIN
Browse files

Reworking RingBuffer class

parent 55366f65
No related branches found
No related tags found
No related merge requests found
......@@ -22,13 +22,12 @@
RingBuffer::RingBuffer( void )
{
memset( _aucBuffer, 0, SERIAL_BUFFER_SIZE ) ;
_iHead=0 ;
_iTail=0 ;
clear();
}
void RingBuffer::store_char( uint8_t c )
{
int i = (uint32_t)(_iHead + 1) % SERIAL_BUFFER_SIZE ;
int i = nextIndex(_iHead);
// if we should be storing the received character into the location
// just before the tail (meaning that the head would advance to the
......@@ -41,3 +40,42 @@ void RingBuffer::store_char( uint8_t c )
}
}
void RingBuffer::clear()
{
_iHead = 0;
_iTail = 0;
}
int RingBuffer::read_char()
{
if(_iTail == _iHead)
return -1;
int value = _aucBuffer[_iTail];
_iTail = nextIndex(_iTail);
return value;
}
int RingBuffer::available()
{
int delta = _iHead - _iTail;
if(delta < 0)
return SERIAL_BUFFER_SIZE + delta;
else
return delta;
}
int RingBuffer::peek()
{
if(_iTail == _iHead)
return -1;
return _aucBuffer[_iTail];
}
int RingBuffer::nextIndex(int index)
{
return (uint32_t)(index + 1) % SERIAL_BUFFER_SIZE;
}
\ No newline at end of file
......@@ -37,6 +37,13 @@ class RingBuffer
public:
RingBuffer( void ) ;
void store_char( uint8_t c ) ;
void clear();
int read_char();
int available();
int peek();
private:
int nextIndex(int index);
} ;
#endif /* _RING_BUFFER_ */
......@@ -20,7 +20,8 @@ void SERCOMUart::begin(uint16_t baudrate, uint8_t config)
sercom->enableUART();
}
void SERCOMUart::end(){
void SERCOMUart::end()
{
sercom->resetUART();
rxBuffer.clear();
}
......@@ -47,7 +48,7 @@ void SERCOMUart::IrqHandler()
bool SERCOMUart::available()
{
return rxBuffer.available_char();
return rxBuffer.available();
}
int SERCOMUart::peek()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment