2014-12-10 5:41 1 second pulse (serial)

Dependencies:   MODSERIALhacked Convert SLCD mbed-src

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;