33 #define SERIAL_BUFFER_SIZE 64
39 uint8_t _aucBuffer[N] ;
42 volatile int _numElems;
46 void store_char( uint8_t c ) ;
50 int availableForStore();
55 int nextIndex(
int index);
56 inline bool isEmpty()
const {
return (_numElems == 0); }
60 #ifndef RINGBUFFER_TYPEDEF_OFF
61 typedef RingBufferN<SERIAL_BUFFER_SIZE> RingBuffer;
65 RingBufferN<N>::RingBufferN(
void )
67 memset( _aucBuffer, 0, N ) ;
72 void RingBufferN<N>::store_char( uint8_t c )
80 _aucBuffer[_iHead] = c ;
81 _iHead = nextIndex(_iHead);
87 void RingBufferN<N>::clear()
95 int RingBufferN<N>::read_char()
100 uint8_t value = _aucBuffer[_iTail];
101 _iTail = nextIndex(_iTail);
108 int RingBufferN<N>::available()
114 int RingBufferN<N>::availableForStore()
116 return (N - _numElems);
120 int RingBufferN<N>::peek()
125 return _aucBuffer[_iTail];
129 int RingBufferN<N>::nextIndex(
int index)
131 return (uint32_t)(index + 1) % N;
135 bool RingBufferN<N>::isFull()
137 return (_numElems == N);