Monitor for central heating system (e.g. 2zones+hw) Supports up to 15 temp probes (DS18B20/DS18S20) 3 valve monitors Gas pulse meter recording Use stand-alone or with nodeEnergyServer See http://robdobson.com/2015/09/central-heating-monitor
Dependencies: EthernetInterfacePlusHostname NTPClient Onewire RdWebServer SDFileSystem-RTOS mbed-rtos mbed-src
Revision 20:7933076df5af, committed 2015-10-13
- Comitter:
- Bobty
- Date:
- Tue Oct 13 18:35:20 2015 +0000
- Parent:
- 19:0367cb46d003
- Child:
- 21:ccf053bab795
- Commit message:
- Improved logging and added a mutex to avoid clashes on SD card access
Changed in this revision
--- a/GasUseCounter.cpp Mon Oct 05 14:05:33 2015 +0000 +++ b/GasUseCounter.cpp Tue Oct 13 18:35:20 2015 +0000 @@ -31,7 +31,7 @@ } // Show count - _pc.printf("Count %d Rate(ms) %d\r\n", _pulseDetector->GetPulseCount(), _pulseDetector->GetPulseRateMs()); + _logger.LogDebug("GasCount %d Rate(ms) %d", _pulseDetector->GetPulseCount(), _pulseDetector->GetPulseRateMs()); } return edgeDetected; } @@ -46,20 +46,32 @@ const char* fname = _gasUseFilename1; if (i == 1) fname = _gasUseFilename2; + + // Obtain lock to access sd card + _sdCardMutex.lock(); + FILE* fp = fopen(fname, "r"); if (fp == NULL) { - _pc.printf ("Read Gas ... Filename %s not found\r\n", fname); + // Release lock on sd card + _sdCardMutex.unlock(); + + _logger.LogDebug("GasCount Read Filename %s not found", fname); } else { int curCount = 0; int retVal = fscanf(fp, "%d", &curCount); fclose(fp); + + // Release lock on sd card + _sdCardMutex.unlock(); + + // Handle result if (retVal == 1) - _pc.printf ("Read from file %s last gas count = %d\r\n", fname, curCount); + _logger.LogDebug("GasCount read from file %s gas count = %d", fname, curCount); else - _pc.printf ("Failed to read gas count from file %s\r\n", fname); + _logger.LogDebug("GasCount Failed to read gas count from file %s", fname); if (i == 0) count0 = curCount; else @@ -72,7 +84,7 @@ maxCount = count1; _lastWrittenGasCount = maxCount; _pulseDetector->SetPulseCount(maxCount); - _pc.printf ("Pulse count set to %d\r\n", maxCount); + _logger.LogDebug("GasCount set to %d", maxCount); } void GasUseCounter::WriteGasCountToSD() @@ -82,16 +94,24 @@ const char* fname = _gasUseFilename1; if (i == 1) fname = _gasUseFilename2; + + // Obtain lock to access sd card + _sdCardMutex.lock(); + FILE* fp = fopen(fname, "w"); if (fp == NULL) { - _pc.printf ("WriteGas ... Filename %s not found\r\n", fname); + _logger.LogDebug("GasCount write failed filename %s not found", fname); } else { fprintf(fp, "%d", GetCount()); - _pc.printf ("Written to %s last gas count = %d\r\n", fname, GetCount()); + _logger.LogDebug("GasCount written to %s gas count = %d", fname, GetCount()); fclose(fp); } + + // Release lock on sd card + _sdCardMutex.unlock(); + } }
--- a/GasUseCounter.h Mon Oct 05 14:05:33 2015 +0000 +++ b/GasUseCounter.h Tue Oct 13 18:35:20 2015 +0000 @@ -3,7 +3,7 @@ #include "mbed.h" #include "PulsePin.h" #include "SDFileSystem.h" -#include <RawSerial.h> +#include "Logger.h" const int MAX_GAS_COUNT_STR_LEN = 50; const int MAX_PULSES_BEFORE_STORE_NV = 1; // Store at each pulse @@ -12,8 +12,8 @@ { public: // Constructor - GasUseCounter(const char* gasUseFilename1, const char* gasUseFilename2, DigitalIn& gasPulsePin, RawSerial &pc) : - _gasPulsePin(gasPulsePin), _pc(pc) + GasUseCounter(const char* gasUseFilename1, const char* gasUseFilename2, DigitalIn& gasPulsePin, Logger &logger, Mutex &sdCardMutex) : + _gasPulsePin(gasPulsePin), _logger(logger), _sdCardMutex(sdCardMutex) { _gasUseFilename1 = gasUseFilename1; _gasUseFilename2 = gasUseFilename2; @@ -62,7 +62,8 @@ char _gasCountStr [MAX_GAS_COUNT_STR_LEN]; DigitalIn& _gasPulsePin; PulsePin* _pulseDetector; - RawSerial& _pc; + Logger &_logger; + Mutex &_sdCardMutex; };
--- a/Logger.cpp Mon Oct 05 14:05:33 2015 +0000 +++ b/Logger.cpp Tue Oct 13 18:35:20 2015 +0000 @@ -3,10 +3,13 @@ #include "Logger.h" -Logger::Logger(const char* eventLogFileName, const char* dataLogFileBase) +Logger::Logger(const char* eventLogFileName, const char* dataLogFileBase, Mutex &sdCardMutex) : + _sdCardMutex(sdCardMutex) { _eventLogFileName = eventLogFileName; _dataLogFileBase = dataLogFileBase; + _logDebugToFile = false; + _logDebugToConsole = false; } void Logger::LogEvent(const char* format, ...) @@ -15,6 +18,11 @@ time_t seconds = time(NULL); strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%d\t%H:%M:%S\t", localtime(&seconds)); + // Obtain lock to access sd card - if unable then abort the logging process + if (!_sdCardMutex.trylock()) + return; + + // Open file FILE* fp = fopen(_eventLogFileName, "a"); if (fp == NULL) { @@ -30,6 +38,10 @@ fprintf(fp, "\r\n"); fclose(fp); } + + // Release lock on sd card + _sdCardMutex.unlock(); + } // Utility function to log data @@ -40,6 +52,10 @@ time_t seconds = time(NULL); strftime(fileNameBuf+strlen(fileNameBuf), sizeof(fileNameBuf)-strlen(fileNameBuf), "Data_%Y%m%d.txt", localtime(&seconds)); + // Obtain lock to access sd card - if unable then abort the logging process + if (!_sdCardMutex.trylock()) + return; + FILE* fp = fopen(fileNameBuf, "a"); if (fp == NULL) { @@ -54,4 +70,56 @@ fprintf(fp, "\r\n"); fclose(fp); } + + // Release lock on sd card + _sdCardMutex.unlock(); } + +// Utility function to log data +void Logger::LogDebug(const char* format, ...) +{ + char fileNameBuf[60]; + strcpy(fileNameBuf, _dataLogFileBase); + time_t seconds = time(NULL); + strftime(fileNameBuf+strlen(fileNameBuf), sizeof(fileNameBuf)-strlen(fileNameBuf), "Dbg_%Y%m%d.txt", localtime(&seconds)); + + // Log to file if enabled + if (_logDebugToFile) + { + // Obtain lock to access sd card - if unable then abort the logging process + if (_sdCardMutex.trylock()) + { + FILE* fp = fopen(fileNameBuf, "a"); + if (fp == NULL) + { + printf ("Data Log ... Filename %s not found\r\n", _eventLogFileName); + } + else + { + char timeBuf[40]; + time_t seconds = time(NULL); + strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%d\t%H:%M:%S\t", localtime(&seconds)); + fprintf(fp, timeBuf); + va_list argptr; + va_start(argptr, format); + vfprintf(fp, format, argptr); + va_end(argptr); + fprintf(fp, "\r\n"); + } + fclose(fp); + + // Release lock on sd card + _sdCardMutex.unlock(); + } + } + + // Print to terminal if enabled + if (_logDebugToConsole) + { + va_list argptr; + va_start(argptr, format); + vprintf(format, argptr); + va_end(argptr); + printf("\r\n"); + } +}
--- a/Logger.h Mon Oct 05 14:05:33 2015 +0000 +++ b/Logger.h Tue Oct 13 18:35:20 2015 +0000 @@ -5,17 +5,27 @@ #define __LOGGER__H #include "mbed.h" #include <stdarg.h> +#include "rtos.h" class Logger { public: - Logger(const char* eventLogFileName, const char* dataLogFileBase); + Logger(const char* eventLogFileName, const char* dataLogFileBase, Mutex &sdCardMutex); void LogEvent(const char* format, ...); void LogData(const char* format, ...); + void LogDebug(const char* format, ...); + void SetDebugDest(bool logToFile, bool logToConsole) + { + _logDebugToFile = logToFile; + _logDebugToConsole = logToConsole; + }; private: const char* _eventLogFileName; const char* _dataLogFileBase; + bool _logDebugToFile; + bool _logDebugToConsole; + Mutex &_sdCardMutex; };
--- a/RdDS18B20.cpp Mon Oct 05 14:05:33 2015 +0000 +++ b/RdDS18B20.cpp Tue Oct 13 18:35:20 2015 +0000 @@ -4,10 +4,10 @@ #include "RdDS18B20.h" -#define SHOW_18B20_DEBUGGING 1 +// #define SHOW_18B20_DEBUGGING 1 // Construct onewire bus with desired pin -DS18B20::DS18B20(PinName mbedPin) : _oneWire(mbedPin) +DS18B20::DS18B20(PinName mbedPin, Logger &logger) : _oneWire(mbedPin), _logger(logger) { _numValidAddresses = 0; for (int i = 0; i < MAX_BUS_DEVICES; i++) @@ -56,7 +56,7 @@ if (_oneWire.CRC(temperatureVals, sizeof(temperatureVals)/sizeof(int)-1) == temperatureVals[sizeof(temperatureVals)/sizeof(int)-1]) { #ifdef SHOW_18B20_DEBUGGING - printf("Temp CRC Fail\r\n"); + _logger.LogDebug("Temp CRC Fail addr %d", addrIdx); #endif return INVALID_TEMPERATURE; } @@ -64,7 +64,7 @@ { #ifdef SHOW_18B20_DEBUGGING double temperature = ((((int)(temperatureVals[1])) * 256) + temperatureVals[0])*0.0625; - printf("Temp = %0.1f", temperature); + _logger.LogDebug("Temp = %0.1f", temperature); #endif } @@ -75,7 +75,7 @@ if ((temperature < -10) || (temperature > 100)) { #ifdef SHOW_18B20_DEBUGGING - printf("Temp out of bounds\r\n"); + _logger.LogDebug("Temp out of bounds"); #endif return INVALID_TEMPERATURE; } @@ -111,16 +111,16 @@ } // Debug print address -void DS18B20::DebugPrintAddress(int addrIdx) +void DS18B20::DebugGetAddress(int addrIdx, char* buf) { // Check valid address if ((addrIdx >= _numValidAddresses) || (addrIdx < 0)) { - printf("Invalid addrIdx %d", addrIdx); + sprintf(buf, "Invalid addrIdx %d", addrIdx); return; } // Write out address - printf(GetAddressStr(addrIdx)); + strcpy(buf, GetAddressStr(addrIdx)); } double DS18B20::GetLatestTemperature(int addrIdx, time_t& timeOfReading) @@ -133,7 +133,6 @@ int DS18B20::SearchToGetAddresses() { - const int MAX_ADDR_SEARCH_RETRIES = 5; // Address Table @@ -173,50 +172,45 @@ if (rslt != ONEWIRE_OK) { #ifdef SHOW_18B20_DEBUGGING - printf("Search returned %s\r\n", (rslt == ONEWIRE_SEARCH_INIT_FAIL) ? "InitFail" : ((rslt == ONEWIRE_SEARCH_NOT_FOUND) ? "NotFound" : "UnknownError")); + _logger.LogDebug("Search returned %s", (rslt == ONEWIRE_SEARCH_INIT_FAIL) ? "InitFail" : ((rslt == ONEWIRE_SEARCH_NOT_FOUND) ? "NotFound" : "UnknownError")); #endif break; } -#ifdef SHOW_18B20_DEBUGGING - printf("Found device addr (ROM) ="); -#endif for( int i = 0; i < ONEWIRE_ADDR_BYTES; i++) { // Copy to table tmpAddrTable[validAddresses][i] = addr[i]; -#ifdef SHOW_18B20_DEBUGGING - printf(" %02x", addr[i]); -#endif } // Check CRC - only include if CRC is valid - if (_oneWire.CRC(addr, ONEWIRE_ADDR_BYTES-1) == addr[ONEWIRE_ADDR_BYTES-1]) + bool addrValid = (_oneWire.CRC(addr, ONEWIRE_ADDR_BYTES-1) == addr[ONEWIRE_ADDR_BYTES-1]); + if (addrValid) validAddresses++; -#ifdef SHOW_18B20_DEBUGGING - else - printf(" (CRC INVALID!)"); -#endif -#ifdef SHOW_18B20_DEBUGGING - // the first ROM byte indicates which chip - switch (addr[0]) - { - case 0x10: - printf(" Chip = DS18S20\r\n"); // or old DS1820 - break; - case 0x28: - printf(" Chip = DS18B20\r\n"); - break; - case 0x22: - printf(" Chip = DS1822\r\n"); - break; - default: - printf(" NOT DS18x20 FAMILY\r\n"); - break; - } +#ifdef SHOW_18B20_DEBUGGING + _logger.LogDebug("Found addr (ROM) = %02x%02x%02x%02x%02x%02x%02x%02x %s %s", + addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], addr[6], addr[7], + (addrValid ? "CRC OK" : "CRC INVALID"), + GetChipId(addr[0])); #endif } + } return validAddresses; } + +char* DS18B20::GetChipId(int val) +{ + // the first ROM byte indicates which chip + switch (val) + { + case 0x10: + return("Chip = DS18S20\r\n"); // or old DS1820 + case 0x28: + return("Chip = DS18B20\r\n"); + case 0x22: + return("Chip = DS1822\r\n"); + } + return("Chip NOT DS18x20 FAMILY\r\n"); +}
--- a/RdDS18B20.h Mon Oct 05 14:05:33 2015 +0000 +++ b/RdDS18B20.h Tue Oct 13 18:35:20 2015 +0000 @@ -7,14 +7,15 @@ #include "mbed.h" #include "Onewire.h" +#include "Logger.h" class DS18B20 { public: - DS18B20(PinName mbedPin); + DS18B20(PinName mbedPin, Logger &logger); void ReqConvert(); double ReadTemperature(int addrIdx); - void DebugPrintAddress(int addrIdx); + void DebugGetAddress(int addrIdx, char* buf); int SearchToGetAddresses(); int GetNumAddresses() { @@ -36,6 +37,9 @@ time_t _timeOfReadingTable[MAX_BUS_DEVICES]; Onewire _oneWire; char _addrStr[ONEWIRE_ADDR_STRLEN]; + Logger &_logger; + char* GetChipId(int val); + }; #endif \ No newline at end of file
--- a/RdWebServer.lib Mon Oct 05 14:05:33 2015 +0000 +++ b/RdWebServer.lib Tue Oct 13 18:35:20 2015 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/Bobty/code/RdWebServer/#ffa1dddd3da4 +http://mbed.org/users/Bobty/code/RdWebServer/#3c4c10e989b1
--- a/Thermometers.cpp Mon Oct 05 14:05:33 2015 +0000 +++ b/Thermometers.cpp Tue Oct 13 18:35:20 2015 +0000 @@ -6,7 +6,8 @@ #define SHOW_THERMOMETER_DEBUGGING 1 const int DEBUG_EXPECTED_THERMOMETER_COUNT = 3; -Thermometers::Thermometers(int numTempSensorPins, const PinName tempSensorPins[], int serviceIntervalInMs) +Thermometers::Thermometers(int numTempSensorPins, const PinName tempSensorPins[], int serviceIntervalInMs, Logger &logger) : + _logger(logger) { _numTempSensorPins = numTempSensorPins; _tempSensorPins = tempSensorPins; @@ -23,7 +24,7 @@ { if (busIdx >= MAX_ONEWIRE_BUSES) break; - _thermometerBuses[busIdx] = new DS18B20(_tempSensorPins[busIdx]); + _thermometerBuses[busIdx] = new DS18B20(_tempSensorPins[busIdx], _logger); DS18B20* pThermBus = _thermometerBuses[busIdx]; pThermBus->SearchToGetAddresses(); pThermBus->ReqConvert(); @@ -42,7 +43,7 @@ if (_countForGetThermometerAddresses++ == 0) { #ifdef SHOW_THERMOMETER_DEBUGGING - printf("Requested Addresses\r\n"); + _logger.LogDebug("ThermReqAddr"); #endif for (int busIdx = 0; busIdx < _numThermometerBuses; busIdx++) { @@ -51,6 +52,28 @@ if (numTherms != DEBUG_EXPECTED_THERMOMETER_COUNT) _failAddrCount++; } + +#ifdef SHOW_THERMOMETER_DEBUGGING + for (int busIdx = 0; busIdx < _numThermometerBuses; busIdx++) + { + DS18B20* pThermBus = _thermometerBuses[busIdx]; + if(_failAddrCount == 0 && _failReadCount == 0) + { + _logger.LogDebug("Therm B%d N%d OK", busIdx, pThermBus->GetNumAddresses()); + } + else + { + _logger.LogDebug("Therm B%d N%d FailAddr %d FailRead %d", busIdx, pThermBus->GetNumAddresses(), + _failAddrCount, _failReadCount); + } + for (int addrIdx = 0; addrIdx < pThermBus->GetNumAddresses(); addrIdx++) + { + char buf [40]; + pThermBus->DebugGetAddress(addrIdx, buf); + _logger.LogDebug("Therm B%d N%d %s", busIdx, addrIdx, buf); + } + } +#endif } else if (_countForGetThermometerAddresses > reGetThermometerAddressesAfterNumReadings) { @@ -63,15 +86,11 @@ if (_countForThermReadings == loopCountForRequestingThermReading) { #ifdef SHOW_THERMOMETER_DEBUGGING - printf("Requested Conversion\r\n"); +// _logger.LogDebug("ThermReqConv"); #endif for (int busIdx = 0; busIdx < _numThermometerBuses; busIdx++) { DS18B20* pThermBus = _thermometerBuses[busIdx]; -#ifdef SHOW_THERMOMETER_DEBUGGING - printf("Bus %d Num therms %d Failed Addr %d Failed Read %d\r\n", busIdx, pThermBus->GetNumAddresses(), - _failAddrCount, _failReadCount); -#endif pThermBus->ReqConvert(); } } @@ -80,25 +99,40 @@ if (_countForThermReadings > numLoopsPerThermReading) { _countForThermReadings = 0; -#ifdef SHOW_THERMOMETER_DEBUGGING - printf("Reading Temp\r\n"); -#endif for (int busIdx = 0; busIdx < _numThermometerBuses; busIdx++) { DS18B20* pThermBus = _thermometerBuses[busIdx]; for (int addrIdx = 0; addrIdx < pThermBus->GetNumAddresses(); addrIdx++) { double tempValue = pThermBus->ReadTemperature(addrIdx); -#ifdef SHOW_THERMOMETER_DEBUGGING - printf("Bus %d Therm %d === %.2fC ... Addr = ", busIdx, addrIdx, tempValue); - pThermBus->DebugPrintAddress(addrIdx); - printf("\r\n"); -#endif if (tempValue == DS18B20::INVALID_TEMPERATURE) _failReadCount++; } } - } + +#ifdef SHOW_THERMOMETER_DEBUGGING + char tempStrBuf[140]; + tempStrBuf[0] = 0; + for (int busIdx = 0; busIdx < _numThermometerBuses; busIdx++) + { + DS18B20* pThermBus = _thermometerBuses[busIdx]; + for (int addrIdx = 0; addrIdx < pThermBus->GetNumAddresses(); addrIdx++) + { + time_t timeOfReading = 0; + double tempValue = pThermBus->GetLatestTemperature(addrIdx, timeOfReading); + int ageInSecs = time(NULL) - timeOfReading; + if (tempValue == DS18B20::INVALID_TEMPERATURE) + sprintf(tempStrBuf+strlen(tempStrBuf), "%.2fC (INVALID) ", tempValue); + else if (ageInSecs == 0) + sprintf(tempStrBuf+strlen(tempStrBuf), "%.2fC ", tempValue); + else + sprintf(tempStrBuf+strlen(tempStrBuf), "%.2fC (%dS ago) ", tempValue, ageInSecs); + } + } + _logger.LogDebug("Therm %s", tempStrBuf); +#endif + + } } }
--- a/Thermometers.h Mon Oct 05 14:05:33 2015 +0000 +++ b/Thermometers.h Tue Oct 13 18:35:20 2015 +0000 @@ -5,6 +5,7 @@ #define Thermometers__H #include "RdDS18B20.h" +#include "Logger.h" struct TemperatureValue { @@ -16,7 +17,7 @@ class Thermometers { public: - Thermometers(int numTempSensorPins, const PinName tempSensorPins[], int serviceIntervalInMs); + Thermometers(int numTempSensorPins, const PinName tempSensorPins[], int serviceIntervalInMs, Logger &logger); void Init(); void Service(); int GetTemperatureValues(int maxTempValues, TemperatureValue* tempValues, int maxAgeInSecs); @@ -41,6 +42,7 @@ // DEBUG int _failReadCount; int _failAddrCount; + Logger &_logger; }; #endif
--- a/main.cpp Mon Oct 05 14:05:33 2015 +0000 +++ b/main.cpp Tue Oct 13 18:35:20 2015 +0000 @@ -40,6 +40,9 @@ NTPClient ntp; const int NTP_REFRESH_INTERVAL_HOURS = 1; +// Mutex for SD card access +Mutex sdCardMutex; + // File system for SD card SDFileSystem sd(p5, p6, p7, p8, "sd"); @@ -50,15 +53,15 @@ const char* dataLogFileBase = "/sd/"; // Logger -Logger logger(eventLogFileName, dataLogFileBase); +Logger logger(eventLogFileName, dataLogFileBase, sdCardMutex); // Gas use counter DigitalIn gasPulsePin(p21); -GasUseCounter gasUseCounter(gasPulseFileName1, gasPulseFileName2, gasPulsePin, pc); +GasUseCounter gasUseCounter(gasPulseFileName1, gasPulseFileName2, gasPulsePin, logger, sdCardMutex); // Thermometers - DS18B20 OneWire Thermometer connections const PinName tempSensorPins[] = { p22 }; -Thermometers thermometers(sizeof(tempSensorPins)/sizeof(PinName), tempSensorPins, LOOP_DELAY_IN_MS); +Thermometers thermometers(sizeof(tempSensorPins)/sizeof(PinName), tempSensorPins, LOOP_DELAY_IN_MS, logger); // Voltage Sensors / Alerters const int NUM_VOLT_ALERTERS = 3; @@ -144,15 +147,15 @@ int rslt = sendUDPSocket.sendTo(broadcastEndpoint, broadcastMsgBuffer, bytesToSend); if (rslt == bytesToSend) { - pc.printf("Broadcast (len %d) Sent ok %s\r\n", bytesToSend, broadcastMsgBuffer); + logger.LogDebug("Broadcast (len %d) Sent ok %s", bytesToSend, broadcastMsgBuffer); } else if (rslt == -1) { - pc.printf("Broadcast Failed to send %s\r\n", broadcastMsgBuffer); + logger.LogDebug("Broadcast Failed to send %s", broadcastMsgBuffer); } else { - pc.printf("Broadcast Didn't send all of %s\r\n", broadcastMsgBuffer); + logger.LogDebug("Broadcast Didn't send all of %s", broadcastMsgBuffer); } // Log the data @@ -172,7 +175,7 @@ char* setGasUseCallback(int method, char* cmdStr, char* argStr, char* msgBuffer, int msgLen, int contentLen, unsigned char* pPayload, int payloadLen, int splitPayloadPos) { - pc.printf("Setting gas use count %s\r\n", argStr); + logger.LogDebug("Setting gas use count %s", argStr); int newGasUse = 0; char* eqStr = strchr(argStr, '='); if (eqStr == NULL) @@ -186,7 +189,7 @@ void http_thread(void const* arg) { char* baseWebFolder = "/sd/"; - RdWebServer webServer; + RdWebServer webServer(&sdCardMutex); webServer.addCommand("", RdWebServerCmdDef::CMD_SDORUSBFILE, NULL, "index.htm", false); webServer.addCommand("gear-gr.png", RdWebServerCmdDef::CMD_SDORUSBFILE, NULL, NULL, true); webServer.addCommand("listfiles", RdWebServerCmdDef::CMD_SDORUSBFILE, NULL, "/", false); @@ -201,18 +204,18 @@ { while (1) { - pc.printf("Trying to update time...\r\n"); + logger.LogDebug("Trying to update time..."); if (ntp.setTime("0.pool.ntp.org") == NTP_OK) { osDelay(1000); // This delay is simply to try to improve printf output - printf("Set time successfully\r\n"); + logger.LogDebug("Set time successfully"); time_t ctTime; ctTime = time(NULL); - pc.printf("Time is set to (UTC): %s\r\n", ctime(&ctTime)); + logger.LogDebug("Time is set to (UTC): %s", ctime(&ctTime)); } else { - pc.printf("Cannot set from NTP\r\n"); + logger.LogDebug("Cannot set from NTP"); } // Refresh time every K hours @@ -225,7 +228,7 @@ { osDelay(1000); } - pc.printf("%d mins to next NTP time refresh\r\n", (NTP_REFRESH_INTERVAL_HOURS-k-1)*60 + (59-i)); + logger.LogDebug("%d mins to next NTP time refresh", (NTP_REFRESH_INTERVAL_HOURS-k-1)*60 + (59-i)); } } } @@ -240,7 +243,8 @@ int main() { pc.baud(115200); - pc.printf("\r\n\r\nGas Monitor V2 - Rob Dobson 2014\r\n"); + logger.SetDebugDest(true, true); + logger.LogDebug("\r\n\r\nGas Monitor V2 - Rob Dobson 2015"); // Initialise thermometers thermometers.Init(); @@ -251,8 +255,8 @@ // Setup ethernet interface char macAddr[6]; mbed_mac_address(macAddr); - pc.printf("Ethernet MAC address: %02x:%02x:%02x:%02x:%02x:%02x\r\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); - pc.printf("Connecting to ethernet ...\r\n"); + logger.LogDebug("Ethernet MAC address: %02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); + logger.LogDebug("Connecting to ethernet ..."); // Init ethernet EthernetInterface::init(); @@ -263,7 +267,7 @@ // Connect ethernet EthernetInterface::connect(); - pc.printf("IP Address: %s HostName %s\r\n", EthernetInterface::getIPAddress(), EthernetInterface::getName()); + logger.LogDebug("IP Address: %s HostName %s", EthernetInterface::getIPAddress(), EthernetInterface::getName()); // NTP Time setter Thread ntpTimeSetter(&ntp_thread); @@ -275,8 +279,8 @@ bool watchdogCausedRestart = watchdog.WatchdogCausedRestart(); bool restartCauseRecorded = false; - // Setup the watchdog for 10s reset - watchdog.SetTimeoutSecs(10); + // Setup the watchdog for reset + watchdog.SetTimeoutSecs(60); // Time of last broadcast time_t timeOfLastBroadcast = time(NULL); @@ -293,12 +297,12 @@ if (watchdogCausedRestart) { logger.LogEvent("Watchdog Restart"); - pc.printf("Watchdog Restart\r\n"); + logger.LogDebug("Watchdog Restart"); } else { logger.LogEvent("Normal Restart"); - pc.printf("Normal Restart\r\n"); + logger.LogDebug("Normal Restart"); } restartCauseRecorded = true; }