Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
8:95a325df1f6b
Parent:
6:6f002d202f59
Child:
10:3c93db1cfb12
--- a/SnSDUtils.h	Sat Aug 04 01:48:55 2012 +0000
+++ b/SnSDUtils.h	Wed Aug 08 23:27:37 2012 +0000
@@ -7,6 +7,7 @@
 #include "SnCommWin.h"
 #include "SnBitUtils.h"
 #include "SnPowerFrame.h"
+#include "SnHeaderFrame.h"
 
 class SnEventFrame;
 class SnConfigFrame;
@@ -50,8 +51,7 @@
     
     static
     FILE* OpenNewOutputFile(const uint64_t macadr,
-                            const uint32_t run,
-                            const uint16_t v1, const uint16_t v2);
+                            const uint32_t run);
     
     static
     FILE* OpenExistingFile(const char* name, const bool setcurrent);
@@ -63,7 +63,8 @@
                                            char* const buf,
                                            const uint32_t bsize,
                                            const SnConfigFrame& curConf,
-                                                 SnEventFrame& evt);
+                                                 SnEventFrame& evt,
+                                                 SnPowerFrame& pow);
     
     static
     const char* GetCurFileName() { return fgCurFileName; }
@@ -79,28 +80,37 @@
     static
     bool  WriteConfig(FILE* efile,
                       const SnConfigFrame& conf);
-    /*
-    static
-    bool  WriteFileHeader(FILE* f, const uint64_t macadr,
-                          const uint32_t run, const uint16_t seq,
-                          const uint16_t v1, const uint16_t v2);
     
+    template<class T>
     static
-    bool  ReadFileHeader(FILE* f, uint64_t& macadr,
-                         uint32_t& run, uint16_t& seq,
-                         uint16_t& v1, uint16_t& v2);
-    */
+    SnCommWin::ECommWinResult WritePowerTo(T& f,
+                                           const SnPowerFrame& pow,
+                                           uint32_t& pnum) {
+        const SnCommWin::ECommWinResult rs = 
+            SnHeaderFrame::WriteTo(f, SnHeaderFrame::kPowerCode, 
+                                   SnPowerFrame::SizeOf(SnPowerFrame::kIOvers));
+        const SnCommWin::ECommWinResult re = pow.WriteTo(f);
+        ++pnum;
+        return (rs<re) ? rs : re;
+    }
+    
+    template<class T>
+    static
+    SnCommWin::ECommWinResult ReadBlockHeader(T& f,
+                                              uint8_t& mcode,
+                                              uint32_t& mlen) {
+        return SnHeaderFrame::ReadFrom(f, mcode, mlen);
+    }
+    
     template<class T>
     static
     SnCommWin::ECommWinResult WriteFileHeader(T& f, const uint64_t macadr,
-                      const uint32_t run, const uint16_t seq,
-                      const uint16_t v1, const uint16_t v2) {
+                      const uint32_t run, const uint16_t seq) {
         // MUST INCREMENT kIOvers if these writes are altered
         f = SnBitUtils::WriteTo(f, kIOvers);
         f = SnBitUtils::WriteTo(f, macadr);
         f = SnBitUtils::WriteTo(f, run);
         f = SnBitUtils::WriteTo(f, seq);
-        SnPowerFrame::WriteTo(f, v1, v2);
         return SnCommWin::kOkMsgSent;
     }
     
@@ -108,20 +118,32 @@
     static
     SnCommWin::ECommWinResult ReadFileHeader(T& f, uint64_t& macadr,
                      uint32_t& run, uint16_t& seq,
-                     uint16_t& v1, uint16_t& v2) {
+                     SnPowerFrame* pow=0) {
+        SnCommWin::ECommWinResult res = SnCommWin::kOkWithMsg;
         uint8_t Rv=0;
         f = SnBitUtils::ReadFrom(f, Rv);
         f = SnBitUtils::ReadFrom(f, macadr);
         f = SnBitUtils::ReadFrom(f, run);
         f = SnBitUtils::ReadFrom(f, seq);
-        if (Rv>1) {
-            SnPowerFrame::ReadFrom(f, v1, v2);
+        if (Rv==2) {
+            uint16_t v1, v2;
+            f = SnBitUtils::ReadFrom(f, v1);
+            f = SnBitUtils::ReadFrom(f, v2);
+            if (pow!=0) {
+                pow->Set(v1, v2, 0, 0, 0);
+            }
         }
-        return SnCommWin::kOkWithMsg;
+        return res;
     }
     
     static
-    uint32_t SizeOfFileHeader() { return kMaxSizeOfFileHdr; }
+    uint32_t SizeOfFileHeader(const uint8_t rv) {
+        if (rv==2) {
+            return kMaxSizeOfFileHdr;
+        } else {
+            return sizeof(uint8_t)+sizeof(uint64_t)+sizeof(uint32_t)+sizeof(uint16_t);
+        }
+    }
     
     friend class SnSDUtilsWhisperer; // to restrict access to specific functions
 };