diff --git a/GpsTracker/Alerts.cpp b/GpsTracker/Alerts.cpp index 1296c29..9a39699 100644 --- a/GpsTracker/Alerts.cpp +++ b/GpsTracker/Alerts.cpp @@ -1,23 +1,18 @@ #pragma once +#include "Debug.h" #include "Alerts.h" #include "Config.h" #include "Rtc.h" +#define LOGGER_NAME "Alerts" + namespace alerts { uint8_t getTriggered(PositionEntryMetadata &metadata) { config_t* config = &config::main::value; uint8_t result = 0; - if (!rtc::isAccurate() && !bitRead(config->activeAlerts, ALERT_RTC_CLOCK_FAILURE)) { - bitSet(result, ALERT_RTC_CLOCK_FAILURE); - } - - if (metadata.temperature == ALERT_SUSPICIOUS_RTC_TEMPERATURE && !bitRead(config->activeAlerts, ALERT_RTC_TEMPERATURE_FAILURE)) { - bitSet(result, ALERT_RTC_TEMPERATURE_FAILURE); - } - if (metadata.batteryLevel <= config->alertBatteryLevel1 && !bitRead(config->activeAlerts, ALERT_BATTERY_LEVEL_1)) { bitSet(result, ALERT_BATTERY_LEVEL_1); } @@ -26,6 +21,14 @@ namespace alerts { bitSet(result, ALERT_BATTERY_LEVEL_2); } + if (metadata.temperature == ALERT_SUSPICIOUS_RTC_TEMPERATURE && !bitRead(config->activeAlerts, ALERT_RTC_TEMPERATURE_FAILURE)) { + bitSet(result, ALERT_RTC_TEMPERATURE_FAILURE); + } + + if (!rtc::isAccurate() && !bitRead(config->activeAlerts, ALERT_RTC_CLOCK_FAILURE)) { + bitSet(result, ALERT_RTC_CLOCK_FAILURE); + } + return result; } @@ -41,16 +44,16 @@ namespace alerts { config_t* config = &config::main::value; uint8_t clearMask = 0; - if (bitRead(config->activeAlerts, ALERT_RTC_CLOCK_FAILURE) && rtc::isAccurate()) { - bitSet(clearMask, ALERT_RTC_CLOCK_FAILURE); + if ((config->activeAlerts & (_BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2))) && metadata.batteryLevel >= config->alertBatteryLevelClear) { + clearMask |= _BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2); } if (bitRead(config->activeAlerts, ALERT_RTC_TEMPERATURE_FAILURE) && metadata.temperature != ALERT_SUSPICIOUS_RTC_TEMPERATURE) { bitSet(clearMask, ALERT_RTC_TEMPERATURE_FAILURE); } - if ((config->activeAlerts & (_BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2))) && metadata.temperature >= config->alertBatteryLevelClear) { - clearMask |= _BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2); + if (bitRead(config->activeAlerts, ALERT_RTC_CLOCK_FAILURE) && rtc::isAccurate()) { + bitSet(clearMask, ALERT_RTC_CLOCK_FAILURE); } if (!clearMask) return; //save a write to eeprom if there is no change diff --git a/GpsTracker/Alerts.h b/GpsTracker/Alerts.h index 8c7e825..a0edc99 100644 --- a/GpsTracker/Alerts.h +++ b/GpsTracker/Alerts.h @@ -2,10 +2,10 @@ #include "Positions.h" -#define ALERT_BATTERY_LEVEL_1 1 -#define ALERT_BATTERY_LEVEL_2 2 -#define ALERT_RTC_TEMPERATURE_FAILURE 3 -#define ALERT_RTC_CLOCK_FAILURE 4 +#define ALERT_BATTERY_LEVEL_1 0 +#define ALERT_BATTERY_LEVEL_2 1 +#define ALERT_RTC_TEMPERATURE_FAILURE 2 +#define ALERT_RTC_CLOCK_FAILURE 3 namespace alerts { diff --git a/GpsTracker/Core.cpp b/GpsTracker/Core.cpp index ecb9f37..5c72ba7 100644 --- a/GpsTracker/Core.cpp +++ b/GpsTracker/Core.cpp @@ -55,27 +55,29 @@ namespace core { uint8_t notifyFailures(PositionEntryMetadata &metadata) { SIM808RegistrationStatus networkStatus; char buffer[SMS_BUFFER_SIZE]; - const __FlashStringHelper * backupFailureString = F(" Backup battery failure ?\n"); + const __FlashStringHelper * backupFailureString = F(" Backup battery failure ?"); uint8_t triggered = alerts::getTriggered(metadata); if (!triggered) return NO_ALERTS_NOTIFIED; + NOTICE_FORMAT("notifyFailures", "triggered : %B", triggered); + network::powerOn(); networkStatus = network::waitForRegistered(NETWORK_DEFAULT_TOTAL_TIMEOUT_MS); if (!network::isAvailable(networkStatus.stat)) return NO_ALERTS_NOTIFIED; - details::appendToSmsBuffer(buffer, PSTR("Alerts !\n")); + strncpy_P(buffer, PSTR("Alerts !"), SMS_BUFFER_SIZE); if (bitRead(triggered, ALERT_BATTERY_LEVEL_1) || bitRead(triggered, ALERT_BATTERY_LEVEL_2)) { - details::appendToSmsBuffer(buffer, PSTR("- Battery at %d%%.\n"), metadata.batteryLevel); + details::appendToSmsBuffer(buffer, PSTR("\n- Battery at %d%%."), metadata.batteryLevel); } - if (bitRead(triggered, ALERT_RTC_CLOCK_FAILURE)) { - details::appendToSmsBuffer(buffer, PSTR("-RTC was stopped. %S"), backupFailureString); + if (bitRead(triggered, ALERT_RTC_TEMPERATURE_FAILURE)) { + details::appendToSmsBuffer(buffer, PSTR("\n- Temperature is %dC.%S"), static_cast(metadata.temperature * 100), backupFailureString); } - if (bitRead(triggered, ALERT_RTC_TEMPERATURE_FAILURE)) { - details::appendToSmsBuffer(buffer, PSTR("- Temperature is %dC. %S"), static_cast(metadata.temperature * 100), backupFailureString); + if (bitRead(triggered, ALERT_RTC_CLOCK_FAILURE)) { + details::appendToSmsBuffer(buffer, PSTR("\n- RTC was stopped.%S"), backupFailureString); } bool notified = network::sendSms(buffer); diff --git a/GpsTracker/Debug.cpp b/GpsTracker/Debug.cpp index 7da8b83..078585a 100644 --- a/GpsTracker/Debug.cpp +++ b/GpsTracker/Debug.cpp @@ -192,7 +192,7 @@ namespace debug { tmElements_t time; rtc::getTime(time); - NOTICE_FORMAT("getAndDisplayRtcTime", "%d/%d/%d %d:%d:%d", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second); + NOTICE_FORMAT("getAndDisplayRtcTime", "%d/%d/%d %d:%d:%d %t", tmYearToCalendar(time.Year), time.Month, time.Day, time.Hour, time.Minute, time.Second, rtc::isAccurate()); } void setRtcTime() { @@ -271,19 +271,21 @@ namespace debug { void notifyFailures() { PositionEntryMetadata metadata = { - 1, //all battery alert should goes on with this + 1, //all battery alerts should goes on with this 3800, //doesn't matter ALERT_SUSPICIOUS_RTC_TEMPERATURE, 0, SIM808_GPS_STATUS::OFF }; - core::notifyFailures(metadata); + uint8_t alerts = core::notifyFailures(metadata); + NOTICE_FORMAT("notifyFailures", "result : %B", alerts); + alerts::add(alerts); } void clearAlerts() { PositionEntryMetadata metadata = { - 100, //all battery alert should goes off with this + 100, //all battery alerts should goes off with this 3800, //doesn't matter 10, 0, diff --git a/GpsTracker/Hardware.cpp b/GpsTracker/Hardware.cpp index edc0f65..f612ce4 100644 --- a/GpsTracker/Hardware.cpp +++ b/GpsTracker/Hardware.cpp @@ -64,7 +64,7 @@ namespace hardware { void gpsPowerOff() { if (!device.powered()) { - networkPoweredCount = gpsPoweredCount = 0; + networkPoweredCount = gpsPoweredCount = 0; //just to be sure counts == 0 return; } @@ -74,7 +74,7 @@ namespace hardware { powerOffIfUnused(); } - gpsPoweredCount--; + if (gpsPoweredCount) gpsPoweredCount--; //avoid 255 if 0-- } void networkPowerOn() { @@ -89,10 +89,11 @@ namespace hardware { void networkPowerOff() { if (!device.powered()) { - networkPoweredCount = gpsPoweredCount = 0; + networkPoweredCount = gpsPoweredCount = 0; //just to be sure counts == 0 return; } + if (networkPoweredCount == 1) { VERBOSE("networkPowerOff"); device.disableGprs(); @@ -101,7 +102,7 @@ namespace hardware { powerOffIfUnused(); } - networkPoweredCount--; + if (networkPoweredCount) networkPoweredCount--; //avoid 255 if 0-- } } diff --git a/GpsTracker/NetworkPositionsBackup.cpp b/GpsTracker/NetworkPositionsBackup.cpp index 127cac1..1e387c9 100644 --- a/GpsTracker/NetworkPositionsBackup.cpp +++ b/GpsTracker/NetworkPositionsBackup.cpp @@ -43,10 +43,10 @@ namespace positions { buffer, buffer, BUFFER_SIZE - ) == POSITIONS_CONFIG_NET_DEFAULT_EXPECTED_RESPONSE; + ); NOTICE_FORMAT("appendPosition", "Response : %d", responseCode); - return responseCode; + return responseCode == POSITIONS_CONFIG_NET_DEFAULT_EXPECTED_RESPONSE; } //__attribute__((__optimize__("O2")))