Arianna autonomous DAQ firmware

Dependencies:   mbed SDFileSystemFilinfo AriSnProtocol NetServicesMin AriSnComm MODSERIAL PowerControlClkPatch DS1820OW

Revision:
59:21128cc24b04
Parent:
56:0bba0ef15697
Child:
67:ec999336fcd1
--- a/SnConfigFrame.cpp	Thu Oct 30 07:10:38 2014 +0000
+++ b/SnConfigFrame.cpp	Fri Oct 31 23:33:31 2014 +0000
@@ -2,6 +2,8 @@
 
 #include "mbed.h"
 
+//#define DEBUG
+
 #include "SnBitUtils.h"
 #include "SnHeaderFrame.h"
 #include "Watchdog.h"
@@ -15,6 +17,11 @@
 const uint8_t     SnConfigFrame::kIOVers               = 10;
 #endif
 const char* const SnConfigFrame::kDefConfFile          = "/local/DEFCONF.DAT";
+const char* const SnConfigFrame::kDefRemIpFilen        = "/local/REMOTIP.TXT";
+const char* const SnConfigFrame::kDefRemPortFilen      = "/local/REMOTPRT.TXT";
+const char* const SnConfigFrame::kDefMbedIPFilen       = "/local/MBEDIP.TXT";
+const char* const SnConfigFrame::kDefMbedMaskFilen     = "/local/MBEDMASK.TXT";
+const char* const SnConfigFrame::kDefMbedGateFilen     = "/local/MBEDGATE.TXT";
 const char* const SnConfigFrame::kDefIPflag            = "DEF";
 const uint32_t    SnConfigFrame::kMinCommWinPrdLowPwr  = 14400;    // exclusive min low power comm win period (s)
 const uint32_t    SnConfigFrame::kMaxCommWinPrdLowPwr  = 259200;   // exclusive max low power comm win period (s)
@@ -89,67 +96,159 @@
 }
 
 void SnConfigFrame::SetDefaultRemoteServ() {
-    sprintf(fRemoteServer,"%s","128.195.204.151");
+    if (false==ReadDefaultRemoteServer()) {
+        sprintf(fRemoteServer,"%s","128.195.204.151");
+    }
 }
 
 void SnConfigFrame::SetDefaultRemotePort() {
-    fRemotePort         = 6655;
+    if (false==ReadDefaultRemotePort()) {
+        fRemotePort         = 6655;
+    }
 }
 
 void SnConfigFrame::SetDefaultMbedIP() {
+    // see ReadDefaultIPFile
+    //
+    // these hardcoded defaults are only here
+    // "in case". they make it difficult/impossible
+    // to swap boards in the field without internet
+    // access to change the mbed program
     const uint64_t ip = GetMacAddress();
-    switch (ip) {
-        case 0x0002F7F0C3B60000: // station 3
-            sprintf(fMbedIP,"%s","157.132.94.35");
-            break;
-        case 0x0002F7F0C41C0000: // station 4
-            sprintf(fMbedIP,"%s","157.132.94.37");
-            break;
-        /*
-        case 0x0002F7F0AEE00000: // station 5
-            sprintf(fMbedIP,"%s","157.132.94.39");
-            break;
-        */
-        case 0x0002F7F0C61A0000: // station 10
-            sprintf(fMbedIP,"%s","157.132.94.39");
-            break;
-        case 0x0002F7F0C4450000: // station 6
-            sprintf(fMbedIP,"%s","157.132.94.41");
-            break;
-        /*
-        case 0x0002F7F0D2880000: // station 7
-            sprintf(fMbedIP,"%s","157.132.94.43");
-            break;
-        case 0x0002F7F0C0F80000: // station 8
-            sprintf(fMbedIP,"%s","157.132.94.45");
-            break;
-        */
-        case 0x0002F7F175B70000: // station 11
-            sprintf(fMbedIP,"%s","157.132.94.43");
-            break;
-        case 0x0002F7F0C5610000: // station 12
-            sprintf(fMbedIP,"%s","157.132.94.45");
-            break;
-        default: // what??
-            sprintf(fMbedIP,"%s","157.132.94.30"); // anciet station
-            break;
-    };
+    if (false==ReadDefaultMbedIP()) {
+        switch (ip) {
+            case 0x0002F7F2244B0000: // stn 13, board 102
+                sprintf(fMbedIP,"%s","157.132.94.31");
+                break;
+            case 0x0002F7F20A9C0000: // stn 14, board 104
+                sprintf(fMbedIP,"%s","157.132.94.33");
+                break;
+            case 0x0002F7F0C3B60000: // station 3
+            case 0x0002F7F224440000: // board 105
+                sprintf(fMbedIP,"%s","157.132.94.35");
+                break;
+            case 0x0002F7F0C41C0000: // station 4
+                sprintf(fMbedIP,"%s","157.132.94.37");
+                break;
+            case 0x0002F7F0C61A0000: // station 10
+            case 0x0002F7F21A8A0000: // board 111
+                sprintf(fMbedIP,"%s","157.132.94.39");
+                break;
+            case 0x0002F7F0C4450000: // station 6
+            case 0x0002F7F1E9ED0000: // board 108
+                sprintf(fMbedIP,"%s","157.132.94.41");
+                break;
+            case 0x0002F7F175B70000: // station 11
+            case 0x0002F7F1F2120000: // board 113
+                sprintf(fMbedIP,"%s","157.132.94.43");
+                break;
+            default: // what??
+                sprintf(fMbedIP,"%s","157.132.94.45"); // usually for tent
+                break;
+        };
+    }
 }
 // brian dornick 3107
 void SnConfigFrame::SetDefaultMaskIP() {
-    sprintf(fMbedMask,"%s","255.255.255.0");
+    if (false==ReadDefaultMbedMask()) {
+        sprintf(fMbedMask,"%s","255.255.255.0");
+    }
 }
 
 void SnConfigFrame::SetDefaultGateIP() {
-    sprintf(fMbedGate,"%s","157.132.94.1");
+    if (false==ReadDefaultMbedGate()) {
+        sprintf(fMbedGate,"%s","157.132.94.1");
+    }
+}
+
+bool SnConfigFrame::ReadOneIPFrom(const char* ipfname,
+                                  char* ipstr) {
+    bool ok = false;
+    FILE* ipf = fopen(ipfname, "r");
+    if (ipf!=0) {
+        uint8_t ipbytes[4] = {0,0,0,0};
+        const int nr = fscanf(ipf,"%hhu.%hhu.%hhu.%hhu\n",
+            &(ipbytes[0]), &(ipbytes[1]),
+            &(ipbytes[2]), &(ipbytes[3]));
+        if (4==nr) {
+            const int nc = 
+                sprintf(ipstr,"%hhu.%hhu.%hhu.%hhu",
+                    ipbytes[0], ipbytes[1],
+                    ipbytes[2], ipbytes[3]);
+            ok = nc>0;
+        }
+    }
+    fclose(ipf);
+#ifdef DEBUG
+    printf("ReadOneIPInto : ipstr=[%s], ok=%d\r\n",
+        ipstr, (int)ok);
+#endif
+    return ok;
+}
+
+bool SnConfigFrame::ReadDefaultRemoteServer() {
+    const bool ok = ReadOneIPFrom(kDefRemIpFilen, fRemoteServer);    
+#ifdef DEBUG
+    printf("remote = %s\r\n", fRemoteServer);
+#endif
+    return ok;
+}
+
+bool SnConfigFrame::ReadDefaultRemotePort() {
+    bool ok = false;
+    FILE* pf = fopen(kDefRemPortFilen, "r"); 
+    if (pf!=0) {
+        ok = (1==fscanf(pf, "%hu\n", &fRemotePort));
+    }
+    fclose(pf);
+#ifdef DEBUG
+    printf("port   = %hu\r\n", fRemotePort);
+#endif
+    return ok;
+}
+
+bool SnConfigFrame::ReadDefaultMbedIP() {
+    const bool ok = ReadOneIPFrom(kDefMbedIPFilen, fMbedIP);    
+#ifdef DEBUG
+    printf("mbed   = %s\r\n", fMbedIP);
+#endif
+    return ok;
+}
+
+bool SnConfigFrame::ReadDefaultMbedMask() {
+    const bool ok = ReadOneIPFrom(kDefMbedMaskFilen, fMbedMask);    
+#ifdef DEBUG
+    printf("mask   = %s\r\n", fMbedMask);
+#endif
+    return ok;
+}
+
+bool SnConfigFrame::ReadDefaultMbedGate() {
+    const bool ok = ReadOneIPFrom(kDefMbedGateFilen, fMbedGate);
+#ifdef DEBUG
+    printf("gate   = %s\r\n", fMbedGate);
+#endif
+    return ok;
+}
+
+bool SnConfigFrame::ReadDefaultIPFiles() {
+    bool ok  = ReadDefaultRemoteServer();
+         ok &= ReadDefaultRemotePort();
+         ok &= ReadDefaultMbedIP();
+         ok &= ReadDefaultMbedMask();
+         ok &= ReadDefaultMbedGate();
+    return ok;
 }
 
 void SnConfigFrame::SetDefaultIPs() {
-    SetDefaultRemoteServ();
-    SetDefaultRemotePort();
-    SetDefaultMbedIP();
-    SetDefaultMaskIP();
-    SetDefaultGateIP();
+    GetMacAddress(); // just to make sure it gets read
+    if (false==ReadDefaultIPFiles()) {
+        SetDefaultRemoteServ();
+        SetDefaultRemotePort();
+        SetDefaultMbedIP();
+        SetDefaultMaskIP();
+        SetDefaultGateIP();
+    }
 }
 
 void SnConfigFrame::ApplyConnectListenSafetyNets() {