Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
40:1324da35afd4
Child:
84:80b15993944e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SnClockSetFrame.h	Sat Oct 05 04:45:22 2013 +0000
@@ -0,0 +1,71 @@
+#ifndef SNS_SnClockSetFrame
+#define SNS_SnClockSetFrame
+
+#include "mbed.h"
+#include <stdint.h>
+
+#include "SnCommWin.h"
+
+class SnClockSetFrame {
+ public:
+    static const uint8_t    kIOVers;   // MUST BE INCREASED if any member var changes
+    static const uint32_t   kMaxSizeOf  = sizeof(uint8_t) + (3u*sizeof(uint32_t))
+                                          + sizeof(int);
+
+
+ private:
+    uint32_t  fPrevTime;
+    uint32_t  fSetTime;
+    Timer     fSinceSet;
+ 
+    void ResetCCtimer() {  fSinceSet.reset(); fSinceSet.start(); }
+
+ public:
+    SnClockSetFrame() :
+        fPrevTime(0), fSetTime(0) {}
+    virtual ~SnClockSetFrame() {}
+    
+    void SetClocks(const uint32_t prev, const uint32_t stim) {
+        ResetCCtimer();
+        fPrevTime = prev;
+        fSetTime  = stim;
+    }
+    
+    static
+    uint32_t SizeOf(const uint8_t rv=SnClockSetFrame::kIOVers)
+       { return kMaxSizeOf; }
+    
+    template<class T>
+    SnCommWin::ECommWinResult WriteTo(T& x) {
+        // expect 'x' to be a MODSERIAL or a char const* or a FILE*
+        x = SnBitUtils::WriteTo(x, kIOVers);
+        x = SnBitUtils::WriteTo(x, fPrevTime);
+        x = SnBitUtils::WriteTo(x, fSetTime);
+        x = SnBitUtils::WriteTo(x, static_cast<uint32_t>(time(0)));
+        x = SnBitUtils::WriteTo(x, static_cast<int32_t>(fSinceSet.read_us()));
+        // read_us returns a signed int for some reason. so we keep that
+        // convention and merely make the number of bits explicit via the
+        // cast. changing to an unsigned int is left for later.
+        return SnCommWin::kOkMsgSent;
+    }
+    
+    template<class T>
+    static
+    SnCommWin::ECommWinResult ReadFrom(T& b,
+                                       uint32_t& prev,
+                                       uint32_t& stim,
+                                       uint32_t& ctim,
+                                       int32_t& ss) {
+        uint8_t Rv=0;
+        b           = SnBitUtils::ReadFrom(b, Rv);
+        b           = SnBitUtils::ReadFrom(b, prev);
+        b           = SnBitUtils::ReadFrom(b, stim);
+        b           = SnBitUtils::ReadFrom(b, ctim);
+        b           = SnBitUtils::ReadFrom(b, ss);
+        return SnCommWin::kOkWithMsg;
+    }
+    
+    
+};
+
+#endif // SNS_SnClockSetFrame