Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
25:57b2627fe756
Parent:
23:ccf39298f205
Child:
27:efc4d654b139
--- a/main.cpp	Tue Oct 23 20:58:29 2012 +0000
+++ b/main.cpp	Tue Oct 30 05:23:57 2012 +0000
@@ -3,6 +3,10 @@
 #include "Watchdog.h"
 Watchdog::SnKickStarter gKickStarter(WDFAILSAFE);
 
+#define ENABLE_AFAR_COMM
+//#define ENABLE_SBD_COMM
+//#define ENABLE_USB_COMM
+
 //#define USE_RTOS_TIMER
 //#define USE_ETH_INTERFACE
 //#define EVT_TIME_PROFILE
@@ -104,7 +108,7 @@
                                                     );
 static SERIAL_TYPE      gSBDport(p28, p27, "sbd");
 static SDFileSystem     sd(p5, p6, p7, p8, SnSDUtils::kSDdir+1); // no leading '/'
-static LocalFileSystem  local(kLocalDir+1); // no leading '/'
+static LocalFileSystem  local((SnCommWin::kLocalDir)+1); // no leading '/'
 
 //
 // fwd declare fcns
@@ -452,19 +456,25 @@
 #ifdef USE_RTOS_TIMER
     const float ftp = resetTicker(gForceTicker, gConf.GetForceTrigPeriod(),
                                   kAbsMaxTimer);
+    wait_ms(131); // make it less likely for multiple triggers to fire too close together
     const float hbp = resetTicker(gHeartbeatTicker, gConf.GetHeartbeatPeriod(),
                                   kAbsMaxTimer);
+    wait_ms(173); // make it less likely for multiple triggers to fire too close together
     const float cwp = resetTicker(gCommWinTicker, gConf.GetCommWinPeriod(),
                                   kCommWinLongPrdTk);
+    wait_ms(169); // make it less likely for multiple triggers to fire too close together
     const float pcp = resetTicker(gPowerCheckTicker, gConf.GetVoltCheckPeriod(),
                                   kAbsMaxTimer);
 #else
     const float ftp = resetTicker(gForceTicker, gConf.GetForceTrigPeriod(),
                                   kAbsMaxTimer, &procForceTrigger);
+    wait_ms(131); // make it less likely for multiple triggers to fire too close together
     const float hbp = resetTicker(gHeartbeatTicker, gConf.GetHeartbeatPeriod(),
                                   kAbsMaxTimer, &procHeartbeat);
+    wait_ms(173); // make it less likely for multiple triggers to fire too close together
     const float cwp = resetTicker(gCommWinTicker, gConf.GetCommWinPeriod(),
                                   kCommWinLongPrdTk, &procCommWin);
+    wait_ms(169); // make it less likely for multiple triggers to fire too close together
     const float pcp = resetTicker(gPowerCheckTicker, gConf.GetVoltCheckPeriod(),
                                   kAbsMaxTimer, &procPowerCheck);
 #endif
@@ -497,7 +507,7 @@
     Watchdog::kick(WDFAILSAFE);
     
     {
-        gCpu.baud(115200);
+        gCpu.baud(CPUBAUD_SN);
 #if defined(SSNOTIFY) || defined(DEBUG)
         printf("main: start\r\n");
 #endif
@@ -507,7 +517,7 @@
         led3=0; led4=1; wait(0.2);
         led4=0;
     }
-        
+
 #ifdef DEBUG
     printf("initializing SD card..\r\n");
 #endif
@@ -515,21 +525,26 @@
     // seq 0 being overwritten upon power up or the SD card first
     // being insterted
     sd.disk_initialize();
-    
+
 #ifdef DEBUG
     printf("making comm objects\r\n");
 #endif
-        
-    // RTOS stuff must be made inside main for some reason
-    /*
+
+    uint8_t comi(0);
+#ifdef ENABLE_AFAR_COMM
+    // RTOS stuff must be made inside main for some reason    
 #ifdef USE_ETH_INTERFACE
-    gComms[0] = new SnCommAfarTCP(gConf);
+    gComms[comi++] = new SnCommAfarTCP(gConf);
 #else
-    gComms[0] = new SnCommAfarNetIf(gConf);
+    gComms[comi++] = new SnCommAfarNetIf(gConf);
+#endif
 #endif
-    */
-    gComms[0] = new SnCommSBD(&gSBDport, &gCpu);
-    //gComms[0] = new SnCommUsb(&gCpu);
+#ifdef ENABLE_SBD_COMM
+    gComms[comi++] = new SnCommSBD(&gSBDport, &gCpu);
+#endif
+#ifdef ENABLE_USB_COMM
+    gComms[comi++] = new SnCommUsb(&gCpu);
+#endif
 
 #ifdef DEBUG
     printf("make comm objects\r\n");
@@ -1051,8 +1066,8 @@
     wait_ms(200);
     MakeOutputFile();
     
+    /*
     // TODO: change comm parameters
-    /*
     printf("set comm params\r\n");
     for (uint8_t cc=0; cc<kNcomms; cc++) {
         if (gComms[cc]!=0) {
@@ -1229,10 +1244,18 @@
         // and open it back up at the beginning (for reading)
 #ifdef DEBUG
         printf("close & open file. gEvtNum=%u, gPowNum=%u\r\n",gEvtNum,gPowNum);
+        printf("curfile=%p, filename=%s\r\n",SnSDUtils::GetCurFile(),
+            SnSDUtils::GetCurFileName());
 #endif
         PIN_lockRegisters = 0; // unlock so we can talk to SD card.
+#ifdef DEBUG
+        printf("closing output file\r\n");
+#endif
         SnSDUtils::CloseOutputFile(SnSDUtils::GetCurFile());
-        SnSDUtils::OpenExistingFile(SnSDUtils::GetCurFileName(), true);
+#ifdef DEBUG
+        printf("open existing file (%d)\r\n",strlen(SnSDUtils::GetCurFileName()));
+#endif
+        SnSDUtils::OpenExistingFile(SnSDUtils::GetCurFileName(), true, false);
         
 #ifdef DEBUG
         printf("setting power\r\n");
@@ -1240,6 +1263,9 @@
         // (probably) power down cards,amps and power up comms
         SetPower(true);
         
+        // time to recount files for the status update
+        SnStatusFrame::fgRecalcFiles = true;
+        
 #ifdef DEBUG
         printf("start loop over comms\r\n");
 #endif