From a767fe607672cd7ee7acbdb57b4716204d9b77f8 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 16:26:41 +1200 Subject: [PATCH 01/10] Fixed respondeCode was evaluated to a boolean --- GpsTracker/NetworkPositionsBackup.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GpsTracker/NetworkPositionsBackup.cpp b/GpsTracker/NetworkPositionsBackup.cpp index 81cbaba..77d44e7 100644 --- a/GpsTracker/NetworkPositionsBackup.cpp +++ b/GpsTracker/NetworkPositionsBackup.cpp @@ -44,10 +44,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"))) From 75b3b1ad407dd68f6d90f9669934b061b742913d Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 17:04:11 +1200 Subject: [PATCH 02/10] Fixed alerts not starting at first bit --- GpsTracker/Alerts.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 { From 28efbe5a759279caead80d955afc8b9aeb2925af Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 17:05:08 +1200 Subject: [PATCH 03/10] Moved alerts code to match alerts bits definition --- GpsTracker/Alerts.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/GpsTracker/Alerts.cpp b/GpsTracker/Alerts.cpp index 1296c29..0ee426b 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.temperature >= 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 From 9882a9dc0b54cb0e96213c82b172f4d0bcc7841f Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 17:06:15 +1200 Subject: [PATCH 04/10] Additional debug info for getTime and notifyFailures --- GpsTracker/Debug.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/GpsTracker/Debug.cpp b/GpsTracker/Debug.cpp index 7da8b83..2c3fffc 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() { @@ -278,7 +278,8 @@ namespace debug { SIM808_GPS_STATUS::OFF }; - core::notifyFailures(metadata); + uint8_t alerts = core::notifyFailures(metadata); + NOTICE_FORMAT("notifyFailures", "result : %B", alerts); } void clearAlerts() { From 82a00d305da5d4d6b8793d539b281df680ac78a6 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 17:34:28 +1200 Subject: [PATCH 05/10] Fix gps & network powered count could go to 255 --- GpsTracker/Hardware.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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-- } } From 741947db3dd0e5c0abd1c6868358dfa643082845 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 17:35:27 +1200 Subject: [PATCH 06/10] Fixed start of sms message not at the start of the buffer --- GpsTracker/Core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GpsTracker/Core.cpp b/GpsTracker/Core.cpp index ecb9f37..4bf2225 100644 --- a/GpsTracker/Core.cpp +++ b/GpsTracker/Core.cpp @@ -65,7 +65,7 @@ namespace core { if (!network::isAvailable(networkStatus.stat)) return NO_ALERTS_NOTIFIED; - details::appendToSmsBuffer(buffer, PSTR("Alerts !\n")); + strncpy_P(buffer, PSTR("Alerts !\n"), 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); } From c5c91b7eeafb9700a70c09d180bd67a3fdbeb3f8 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 17:36:58 +1200 Subject: [PATCH 07/10] Moved notifyFailures alerts to match alerts bits --- GpsTracker/Core.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/GpsTracker/Core.cpp b/GpsTracker/Core.cpp index 4bf2225..8518d91 100644 --- a/GpsTracker/Core.cpp +++ b/GpsTracker/Core.cpp @@ -70,16 +70,17 @@ namespace core { details::appendToSmsBuffer(buffer, PSTR("- Battery at %d%%.\n"), 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("- 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("-RTC was stopped.%S"), backupFailureString); } bool notified = network::sendSms(buffer); if (!notified) NOTICE_MSG("notifyFailure", "SMS not sent !"); + NOTICE_FORMAT("notifyFailures", "%s", buffer); network::powerOff(); return notified ? triggered : NO_ALERTS_NOTIFIED; //If not notified, the alerts state should not be persisted (so we can retry to notify them) From b99b7823944ca610260f37c199fb64cdbb005b77 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 19:09:05 +1200 Subject: [PATCH 08/10] Fixed using bad parameter for battery alerts clearance --- GpsTracker/Alerts.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GpsTracker/Alerts.cpp b/GpsTracker/Alerts.cpp index 0ee426b..9a39699 100644 --- a/GpsTracker/Alerts.cpp +++ b/GpsTracker/Alerts.cpp @@ -44,7 +44,7 @@ namespace alerts { config_t* config = &config::main::value; uint8_t clearMask = 0; - if ((config->activeAlerts & (_BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2))) && metadata.temperature >= config->alertBatteryLevelClear) { + 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); } From d2f3afae4233103a8d9b7116f0dda84a24bf137f Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 19:09:54 +1200 Subject: [PATCH 09/10] Moved line return at the beginning of each line. --- GpsTracker/Core.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/GpsTracker/Core.cpp b/GpsTracker/Core.cpp index 8518d91..5c72ba7 100644 --- a/GpsTracker/Core.cpp +++ b/GpsTracker/Core.cpp @@ -55,32 +55,33 @@ 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; - strncpy_P(buffer, PSTR("Alerts !\n"), SMS_BUFFER_SIZE); + 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_TEMPERATURE_FAILURE)) { - details::appendToSmsBuffer(buffer, PSTR("- Temperature is %dC.%S"), static_cast(metadata.temperature * 100), backupFailureString); + details::appendToSmsBuffer(buffer, PSTR("\n- Temperature is %dC.%S"), static_cast(metadata.temperature * 100), backupFailureString); } if (bitRead(triggered, ALERT_RTC_CLOCK_FAILURE)) { - details::appendToSmsBuffer(buffer, PSTR("-RTC was stopped.%S"), backupFailureString); + details::appendToSmsBuffer(buffer, PSTR("\n- RTC was stopped.%S"), backupFailureString); } bool notified = network::sendSms(buffer); if (!notified) NOTICE_MSG("notifyFailure", "SMS not sent !"); - NOTICE_FORMAT("notifyFailures", "%s", buffer); network::powerOff(); return notified ? triggered : NO_ALERTS_NOTIFIED; //If not notified, the alerts state should not be persisted (so we can retry to notify them) From 32e05881ea207cad1588bc4dc6bef0675b8198a4 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Sun, 5 Aug 2018 19:10:40 +1200 Subject: [PATCH 10/10] debug::notifyFailures now calls alerts::add --- GpsTracker/Debug.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/GpsTracker/Debug.cpp b/GpsTracker/Debug.cpp index 2c3fffc..078585a 100644 --- a/GpsTracker/Debug.cpp +++ b/GpsTracker/Debug.cpp @@ -271,7 +271,7 @@ 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, @@ -280,11 +280,12 @@ namespace debug { 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,