Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
30:f869ed4bcc08
Parent:
28:484943132bb0
Child:
31:b5bd3b189150
--- a/main.cpp	Sat Nov 24 20:23:19 2012 +0000
+++ b/main.cpp	Wed Nov 28 01:24:23 2012 +0000
@@ -871,81 +871,61 @@
 //
 void SetPower(const bool isCommWin) {
 #ifdef DEBUG
+    printf("set power. isCommWin=%s\r\n",(isCommWin)?"true":"false");
     printf("bef: pconp=%u (%08x), pcenet=%u (%08x)\r\n",
         LPC_SC->PCONP, LPC_SC->PCONP, LPC1768_PCONP_PCENET, LPC1768_PCONP_PCENET);
     printf("pcenet bef power: status=%d\r\n",Peripheral_GetStatus(LPC1768_PCONP_PCENET));
 #endif
-    // TODO: turn on amps individually, when that's possible
+    
+    SnConfigFrame::EPowerModeBit cardpb(SnConfigFrame::kCardDatTak),
+                                 ampspb(SnConfigFrame::kAmpsDatTak),
+                                 iridpb(SnConfigFrame::kIridDatTak),
+                                 afarpb(SnConfigFrame::kAfarDatTak);
     if (isCommWin) {
-        PIN_turn_on_system = gConf.GetPowPinSetting(SnConfigFrame::kCardComWin);
-        wait_ms(10);
-        PIN_turn_on_amps = gConf.GetPowPinSetting(SnConfigFrame::kAmpsComWin);
-        wait_ms(10);
-        PIN_iridSbd_power = gConf.GetPowPinSetting(SnConfigFrame::kIridComWin);
-        wait_ms(10);
-#ifdef DEBUG
-        printf("afar pin=%d, com powsetting=%d\r\n",PIN_afar_power.read(),
-            gConf.GetPowPinSetting(SnConfigFrame::kAfarComWin));
-#endif
-        if (gConf.IsPoweredFor(SnConfigFrame::kAfarComWin)) {
-#ifdef DEBUG
-            printf("PHY cowin powering up\r\n");
-#endif
-            PHY_PowerUp(); wait(1);
+        cardpb = SnConfigFrame::kCardComWin;
+        ampspb = SnConfigFrame::kAmpsComWin;
+        iridpb = SnConfigFrame::kIridComWin;
+        afarpb = SnConfigFrame::kAfarComWin;
+    }
+    // TODO: turn on amps individually, when that's possible
+    PIN_turn_on_system = gConf.GetPowPinSetting(cardpb);
+    wait_ms(10);
+    PIN_turn_on_amps = gConf.GetPowPinSetting(ampspb);
+    wait_ms(10);
+    PIN_iridSbd_power = (kIridAfarPwrSame)
+        ? gConf.GetPowPinSetting(iridpb, false) // leave the iridium relay off. use afar relay.
+        : gConf.GetPowPinSetting(iridpb);
+    wait_ms(10);
 #ifdef DEBUG
-            printf("PHY cowin powered up\r\n");
+    printf("afar pin=%d, com powsetting=%d\r\n",PIN_afar_power.read(),
+        gConf.GetPowPinSetting(afarpb));
 #endif
-        } else {
-#ifdef DEBUG
-            printf("PHY cowin powering down\r\n");
-#endif
-            PHY_PowerDown(); wait(1);
+    if (gConf.IsPoweredFor(afarpb)) {
 #ifdef DEBUG
-            printf("PHY cowin powered down\r\n");
+        printf("PHY cowin powering up\r\n");
 #endif
-        }
+        PHY_PowerUp(); wait(1);
 #ifdef DEBUG
-        printf("PHY done\r\n");
+        printf("PHY cowin powered up\r\n");
 #endif
-        wait_ms(100);
-        PIN_afar_power = gConf.GetPowPinSetting(SnConfigFrame::kAfarComWin);
-        wait_ms(10);
     } else {
-        PIN_turn_on_system = gConf.GetPowPinSetting(SnConfigFrame::kCardDatTak);
-        wait_ms(10);
-        PIN_turn_on_amps = gConf.GetPowPinSetting(SnConfigFrame::kAmpsDatTak);
-        wait_ms(10);
-        PIN_iridSbd_power = gConf.GetPowPinSetting(SnConfigFrame::kIridDatTak);
-        wait_ms(10);
 #ifdef DEBUG
-        printf("afar pin=%d, dat powsetting=%d, ispow=%d\r\n",PIN_afar_power.read(),
-            gConf.GetPowPinSetting(SnConfigFrame::kAfarDatTak),
-            (int)(gConf.IsPoweredFor(SnConfigFrame::kAfarDatTak)));
+        printf("PHY cowin powering down\r\n");
 #endif
-        if (gConf.IsPoweredFor(SnConfigFrame::kAfarDatTak)) {
+        PHY_PowerDown(); wait(1);
 #ifdef DEBUG
-            printf("PHY dattak powering up\r\n");
+        printf("PHY cowin powered down\r\n");
 #endif
-            PHY_PowerUp(); wait(1);
+    }
 #ifdef DEBUG
-            printf("PHY dattak powered up\r\n");
-#endif
-        } else {
-#ifdef DEBUG
-            printf("PHY dattak powering down\r\n");
+    printf("PHY done\r\n");
 #endif
-            PHY_PowerDown(); wait(1);
-#ifdef DEBUG
-            printf("PHY dattak powered down\r\n");
-#endif
-        }
-#ifdef DEBUG
-        printf("PHY done\r\n");
-#endif
-        wait_ms(100);
-        PIN_afar_power = gConf.GetPowPinSetting(SnConfigFrame::kAfarDatTak);
-        wait_ms(10);
+    wait_ms(100);
+    int afpp = gConf.GetPowPinSetting(afarpb);
+    if (kIridAfarPwrSame) {
+        afpp |= gConf.GetPowPinSetting(iridpb);
     }
+    PIN_afar_power = afpp;
     wait(1.5); // let things power up
 #ifdef DEBUG
     printf("aft: pconp=%u (%08x), pcenet=%u (%08x)\r\n",
@@ -1298,7 +1278,9 @@
             switch ((*cw)->GetCommType()) {
                 case SnConfigFrame::kIrid:
                     havePower = gConf.IsPoweredFor(SnConfigFrame::kIridComWin)
-                        && (PIN_iridSbd_power.read() ==
+                        && ( (kIridAfarPwrSame)
+                              ? PIN_afar_power.read()
+                              : PIN_iridSbd_power.read() ==
                             gConf.GetPowPinSetting(SnConfigFrame::kIridComWin));
                     break;
                 case SnConfigFrame::kAfar: