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); }
59 typedef RingBufferN<SERIAL_BUFFER_SIZE> RingBuffer;
63 RingBufferN<N>::RingBufferN(
void )
65 memset( _aucBuffer, 0, N ) ;
70 void RingBufferN<N>::store_char( uint8_t c )
78 _aucBuffer[_iHead] = c ;
79 _iHead = nextIndex(_iHead);
85 void RingBufferN<N>::clear()
93 int RingBufferN<N>::read_char()
98 uint8_t value = _aucBuffer[_iTail];
99 _iTail = nextIndex(_iTail);
106 int RingBufferN<N>::available()
112 int RingBufferN<N>::availableForStore()
114 return (N - _numElems);
118 int RingBufferN<N>::peek()
123 return _aucBuffer[_iTail];
127 int RingBufferN<N>::nextIndex(
int index)
129 return (uint32_t)(index + 1) % N;
133 bool RingBufferN<N>::isFull()
135 return (_numElems == N);