Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
40:1324da35afd4
Parent:
39:2f17131d22a5
Child:
53:9cc158391bea
--- a/SnConfigFrame.cpp	Tue Jul 30 02:03:21 2013 +0000
+++ b/SnConfigFrame.cpp	Sat Oct 05 04:45:22 2013 +0000
@@ -9,7 +9,7 @@
 extern "C" void mbed_mac_address(char *);
 
 bool              SnConfigFrame::fgApplySafetyNets     = true;
-const uint8_t     SnConfigFrame::kIOVers               = 6;
+const uint8_t     SnConfigFrame::kIOVers               = 8;
 const char* const SnConfigFrame::kDefConfFile          = "/local/DEFCONF.DAT";
 const char* const SnConfigFrame::kDefIPflag            = "DEF";
 const uint32_t    SnConfigFrame::kMinCommWinPrdLowPwr  = 14400;    // exclusive min low power comm win period (s)
@@ -36,7 +36,7 @@
     sprintf(fLabel,"HardDefaults");
     fConfTime           = 1338854400u; // Tue, 05 Jun 2012 00:00:00 GMT
     fRun                = 0;
-    fFirstEvt           = 0;
+    fFirstSeq           = 0;
     fEvtsPerSeq         = 1000;
     fRunMode            = 0;
     fStreamHiLoPlas     = 0;
@@ -68,6 +68,8 @@
     fCommSendData       = static_cast<int16_t>(kUseBits);
     fCommWinPrdLowPwr   = 86100u;
     fCommWinDurLowPwr   = 300u;
+    fCommWinConnectTOMin = 3u;
+    fCommWinListenTOMin = 3u;
     fWatchDogPeriod     = WDFAILSAFE;
     SetDefaultIPs();
     fIsLowPower         = false;
@@ -128,7 +130,25 @@
     SetDefaultGateIP();
 }
 
+void SnConfigFrame::ApplyConnectListenSafetyNets() {
+    if (fCommWinConnectTOMin<kDefTimeoutMin) {
+        fCommWinConnectTOMin=kDefTimeoutMin;
+    }
+    if (fCommWinConnectTOMin>(fCommWinDuration/static_cast<float>(kNcomms))) {
+        fCommWinConnectTOMin=kDefTimeoutMin;
+    }
+    if (fCommWinListenTOMin<kDefTimeoutMin) {
+        fCommWinListenTOMin=kDefTimeoutMin;
+    }
+    if (fCommWinListenTOMin>(fCommWinDuration/static_cast<float>(kNcomms))) {
+        fCommWinListenTOMin=kDefTimeoutMin;
+    }
+}
+
 void SnConfigFrame::ApplySafetyNets() {
+    if (fFirstSeq>kMaxFirstSeq) {
+        fFirstSeq=kMaxFirstSeq;
+    }
     if (fNumPlas>kNplas) {
         fNumPlas=kNplas;
     }
@@ -162,6 +182,9 @@
     if (fCommWinPeriod>kMaxCommWinPeriod) {
         fCommWinPeriod=kMaxCommWinPeriod;
     }
+    if (fCommWinPeriod<kMinCommWinPeriod) {
+        fCommWinPeriod=kMinCommWinPeriod;
+    }
     if (fCommWinDuration<kMinCommWinDur) {
         fCommWinDuration=kMinCommWinDur;
     }
@@ -171,6 +194,7 @@
     if (fCommWinDurLowPwr<kMinCommWinDur) {
         fCommWinDurLowPwr=kMinCommWinDur;
     }
+    ApplyConnectListenSafetyNets();
     if (fWatchDogPeriod>kMaxWatchDogPer) {
         fWatchDogPeriod=kMaxWatchDogPer;
     }
@@ -181,12 +205,19 @@
 
 uint32_t SnConfigFrame::GetTimeoutTime(const uint32_t startTime,
                                        const uint32_t delta) const {
+    //  --.-----lst------.--delta--.--
+    //    .              .         .
+    //   start        current    returnVal
+    //
+    //   lio=lst+delta bound by comm wind dur
+    //   returns start + lio
+    
     const uint32_t ct = time(0);
-    uint32_t lst = time(0)-startTime;
+    uint32_t lst = ct-startTime;
     if ( (ct<startTime) || (ct==0) ||
          (lst>kSecsPerDay) ) {
         // possible clock problems
-        lst = kDefTimeout;
+        lst = static_cast<uint32_t>(kDefTimeoutMin)*60u;
     }
     const uint32_t lio = 
         ((lst+delta) < GetCommWinDuration()) ?