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