Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
56:0bba0ef15697
Parent:
54:ea1234a44fe8
Child:
59:21128cc24b04
--- a/SnConfigFrame.cpp	Fri Jan 03 13:03:01 2014 +0000
+++ b/SnConfigFrame.cpp	Thu Oct 30 06:42:17 2014 +0000
@@ -9,7 +9,11 @@
 extern "C" void mbed_mac_address(char *);
 
 bool              SnConfigFrame::fgApplySafetyNets     = true;
+#if CHIPBOARD==ATWD4CH
 const uint8_t     SnConfigFrame::kIOVers               = 8;
+#else // SST
+const uint8_t     SnConfigFrame::kIOVers               = 10;
+#endif
 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)
@@ -39,7 +43,9 @@
     fFirstSeq           = 0;
     fEvtsPerSeq         = 300;
     fRunMode            = 0;
+#if CHIPBOARD==ATWD4CH
     fStreamHiLoPlas     = 0;
+#endif
     fWvLoseLSB          = 0;
     fWvLoseMSB          = 4;
     fWvBaseline         = 0;
@@ -48,11 +54,13 @@
     for (uint16_t i=0; i<kTotDacs; i++, dc++) {
         *dc             = 3072u;
     }
+#if CHIPBOARD==ATWD4CH
     fNumPlas            = 1;
     uint16_t* pl = &(fPLA[0]);
     for (uint8_t j=0; j<kNplas; j++, pl++) {
         *pl             = 0x7FFFu;
     }
+#endif
     fNumCardsMajLog     = 2;
     fEnableThermTrig    = 0;
     fForceTrigPeriod    = 67u;
@@ -71,6 +79,7 @@
     fCommWinConnectTOMin = 3u;
     fCommWinListenTOMin = 3u;
     fWatchDogPeriod     = WDFAILSAFE;
+    fTempCheckPeriod    = 0;
     SetDefaultIPs();
     fIsLowPower         = false;
     memcpy(fNormLabel, fLabel, kConfLblLen);
@@ -147,13 +156,13 @@
     if (fCommWinConnectTOMin<kDefTimeoutMin) {
         fCommWinConnectTOMin=kDefTimeoutMin;
     }
-    if (fCommWinConnectTOMin>(fCommWinDuration/static_cast<float>(kNcomms))) {
+    if (fCommWinConnectTOMin>(fCommWinDuration/(60.*static_cast<float>(kNcomms)))) {
         fCommWinConnectTOMin=kDefTimeoutMin;
     }
     if (fCommWinListenTOMin<kDefTimeoutMin) {
         fCommWinListenTOMin=kDefTimeoutMin;
     }
-    if (fCommWinListenTOMin>(fCommWinDuration/static_cast<float>(kNcomms))) {
+    if (fCommWinListenTOMin>(fCommWinDuration/(60.*static_cast<float>(kNcomms)))) {
         fCommWinListenTOMin=kDefTimeoutMin;
     }
 }
@@ -162,9 +171,11 @@
     if (fFirstSeq>kMaxFirstSeq) {
         fFirstSeq=kMaxFirstSeq;
     }
+#if CHIPBOARD==ATWD4CH
     if (fNumPlas>kNplas) {
         fNumPlas=kNplas;
     }
+#endif
     if (fNumCardsMajLog>kNchans) {
         fNumCardsMajLog=kNchans;
     }
@@ -263,12 +274,16 @@
     DisablePowerFor(kAfarDatTak);
     DisablePowerFor(kAmpsComWin);
     DisablePowerFor(kCardComWin);
-    if ( (IsPoweredFor(kIridComWin)==false) &&
-         (IsPoweredFor(kAfarComWin)==false) ) {
+    if ( IsSBDonlyLowPwrMode() ) {
+        EnablePowerFor(kIridComWin);
+        DisablePowerFor(kAfarComWin);
+    } else if ( (IsPoweredFor(kIridComWin)==false) &&
+                (IsPoweredFor(kAfarComWin)==false) ) {
         // TODO: turn on only iridum maybe?
         EnablePowerFor(kIridComWin);
         EnablePowerFor(kAfarComWin);
-    }
+    } // else same as normal for Irid and Afar Com Win
+
     // set mode to low power
     fIsLowPower = true;
 }
@@ -378,23 +393,38 @@
         closedir(d);
     }
     */
+#ifdef DEBUG
+    printf("trying to read config [%s]\r\n",cfile);
+#endif
     bool ret = false;
     FILE* cf = fopen(cfile,"rb");
     if (cf!=0) {
+#ifdef DEBUG
+        printf("opened file\r\n");
+#endif
         // check the header and file size to be
         // protect a bit against corruption
         uint8_t hc; uint32_t hl;
         SnHeaderFrame::ReadFrom(cf, hc, hl);
+#ifdef DEBUG
+        printf("hc=%hhu, hl=%u\r\n",hc,hl);
+#endif
         if (hc==SnHeaderFrame::kConfigCode) {
             const int fpos = ftell(cf);
             // how many bytes?
             fseek(cf, 0, SEEK_END); // go to end
             const int fend = ftell(cf);
             fseek(cf, fpos, SEEK_SET); // go back
-            
+
+#ifdef DEBUG
+            printf("fend-fpos=%d-%d=%d\r\n",fend,fpos,fend-fpos);
+#endif            
             if (hl == fend-fpos) {
                 ReadFrom(cf);
                 ret = (ferror(cf)==0);
+#ifdef DEBUG
+                printf("ret = %d\r\n",(int)ret);
+#endif
             }
         }
         fclose(cf);