2014-12-10 5:41 1 second pulse (serial)
Dependencies: MODSERIALhacked Convert SLCD mbed-src
Diff: double_buffer.h
- Revision:
- 12:c97d6cd17314
- Parent:
- 8:a44d03ecc942
--- a/double_buffer.h Thu Dec 18 06:31:26 2014 +0000 +++ b/double_buffer.h Thu Dec 18 10:56:52 2014 +0000 @@ -1,19 +1,28 @@ #ifndef DOUBLE_BUFFER_H #define DOUBLE_BUFFER_H +#include "Timer.h" + template <class T, unsigned int S> class DoubleBuffer { public: DoubleBuffer(); - void write(T val); + void write(T val, long long timestamp); T* getReadBuffer(); int getReadBufferSize(); + long long* getTimestampReadBuffer(); void swapBuff(); + void init(long long* off, Timer* tim); + long long db_timestamps[2][S]; private: T buffer[2][S]; + int fill_buffer; int buffer0_size; int buffer1_size; + long long* off; + Timer* time; + bool active; }; template <class T, unsigned int S> @@ -21,11 +30,25 @@ fill_buffer = 0; buffer0_size = 0; buffer1_size = 0; + active = false; } template <class T, unsigned int S> -void DoubleBuffer<T, S>::write(T val) { +void DoubleBuffer<T, S>::init(long long* o, Timer* tim) { + time = tim; + off = o; + active = true; +} + +template <class T, unsigned int S> +void DoubleBuffer<T, S>::write(T val, long long timestamp) { + //long long timestamp = time->read_us() - (*off); int buffer_size; + + if (!active) { + return; + } + if (fill_buffer == 0) { if(buffer0_size >= S) { return; @@ -41,6 +64,7 @@ buffer1_size++; } buffer[fill_buffer][buffer_size] = val; + db_timestamps[fill_buffer][buffer_size] = timestamp; } template <class T, unsigned int S> @@ -54,6 +78,16 @@ } template <class T, unsigned int S> +long long* DoubleBuffer<T, S>::getTimestampReadBuffer() { + if (fill_buffer == 0) { + return db_timestamps[1]; + } + else { + return db_timestamps[0]; + } +} + +template <class T, unsigned int S> int DoubleBuffer<T, S>::getReadBufferSize() { if (fill_buffer == 0) { return buffer1_size;