Arianna autonomous DAQ firmware
Dependencies: mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW
Diff: main.cpp
- 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