Skytraq S1315F-RAW-EVK Logger

Dependencies:   TextLCD mbed

Committer:
tosihisa
Date:
Sun Dec 19 09:11:48 2010 +0000
Revision:
2:7eb11afe02bd
Parent:
0:e0ec137da369
Add \"SYSTEM RESTART\" at boot time.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tosihisa 0:e0ec137da369 1
tosihisa 0:e0ec137da369 2 #ifndef __TRINGBUFFER_H
tosihisa 0:e0ec137da369 3 #define __TRINGBUFFER_H
tosihisa 0:e0ec137da369 4
tosihisa 0:e0ec137da369 5 #include "tversion.h"
tosihisa 0:e0ec137da369 6
tosihisa 0:e0ec137da369 7 namespace libT {
tosihisa 0:e0ec137da369 8
tosihisa 0:e0ec137da369 9 template <class T>
tosihisa 0:e0ec137da369 10 class tRingBuffer : public tVersion
tosihisa 0:e0ec137da369 11 {
tosihisa 0:e0ec137da369 12 public:
tosihisa 0:e0ec137da369 13
tosihisa 0:e0ec137da369 14 tRingBuffer(void) : tVersion(0x20100721/* 2010-07-21 */,0x00000001UL),wp(0),rp(0) {}
tosihisa 0:e0ec137da369 15
tosihisa 0:e0ec137da369 16 inline void reset(void){wp = rp = 0;}
tosihisa 0:e0ec137da369 17
tosihisa 0:e0ec137da369 18 inline int writable(void) const
tosihisa 0:e0ec137da369 19 {
tosihisa 0:e0ec137da369 20 return (inc(wp) != rp) ? 1 : 0;
tosihisa 0:e0ec137da369 21 }
tosihisa 0:e0ec137da369 22
tosihisa 0:e0ec137da369 23 inline int write(T _c)
tosihisa 0:e0ec137da369 24 {
tosihisa 0:e0ec137da369 25 int retval = -1; /* Ringbuffer FULL */
tosihisa 0:e0ec137da369 26 if(writable()){
tosihisa 0:e0ec137da369 27 array[wp] = _c;
tosihisa 0:e0ec137da369 28 wp = inc(wp);
tosihisa 0:e0ec137da369 29 retval = 0; /* OK */
tosihisa 0:e0ec137da369 30 }
tosihisa 0:e0ec137da369 31 return retval;
tosihisa 0:e0ec137da369 32 }
tosihisa 0:e0ec137da369 33
tosihisa 0:e0ec137da369 34 inline int readable(void) const
tosihisa 0:e0ec137da369 35 {
tosihisa 0:e0ec137da369 36 return (rp != wp) ? 1 : 0;
tosihisa 0:e0ec137da369 37 }
tosihisa 0:e0ec137da369 38
tosihisa 0:e0ec137da369 39 inline int read(T *_c)
tosihisa 0:e0ec137da369 40 {
tosihisa 0:e0ec137da369 41 int retval = -1; /* Ringbuffer empty or _c is invalid*/
tosihisa 0:e0ec137da369 42 if((readable()) && (_c != 0)){
tosihisa 0:e0ec137da369 43 *_c = array[rp];
tosihisa 0:e0ec137da369 44 rp = inc(rp);
tosihisa 0:e0ec137da369 45 retval = 0; /* OK */
tosihisa 0:e0ec137da369 46 }
tosihisa 0:e0ec137da369 47 return retval;
tosihisa 0:e0ec137da369 48 }
tosihisa 0:e0ec137da369 49
tosihisa 0:e0ec137da369 50 private:
tosihisa 0:e0ec137da369 51 enum {TRINGBUFFER_SIZE=0x200};
tosihisa 0:e0ec137da369 52 inline unsigned short inc(unsigned short _p) const
tosihisa 0:e0ec137da369 53 {
tosihisa 0:e0ec137da369 54 return static_cast<unsigned short>(static_cast<unsigned short>(_p + 1) & (sizeof(array)-1));
tosihisa 0:e0ec137da369 55 }
tosihisa 0:e0ec137da369 56 volatile unsigned short wp;
tosihisa 0:e0ec137da369 57 volatile unsigned short rp;
tosihisa 0:e0ec137da369 58 volatile T array[TRINGBUFFER_SIZE];
tosihisa 0:e0ec137da369 59 };
tosihisa 0:e0ec137da369 60
tosihisa 0:e0ec137da369 61 };
tosihisa 0:e0ec137da369 62
tosihisa 0:e0ec137da369 63 #endif /* __TRINGBUFFER_H */
tosihisa 0:e0ec137da369 64