From 701043b4a34dfed4d342e0d9a0425e45483b2723 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Thu, 2 Aug 2018 22:35:07 +1200 Subject: [PATCH] Added alerts conditions and framework --- GpsTracker/Alerts.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ GpsTracker/Alerts.h | 16 ++++++++++++++++ GpsTracker/Config.h | 6 ++++++ 3 files changed, 65 insertions(+) create mode 100644 GpsTracker/Alerts.cpp create mode 100644 GpsTracker/Alerts.h diff --git a/GpsTracker/Alerts.cpp b/GpsTracker/Alerts.cpp new file mode 100644 index 0000000..2023741 --- /dev/null +++ b/GpsTracker/Alerts.cpp @@ -0,0 +1,43 @@ +#pragma once + +#include "Alerts.h" +#include "Config.h" + +namespace alerts { + + uint8_t _alerts = 0; + + uint8_t getTriggered(PositionEntryMetadata &metadata) { + config_t* config = &config::main::value; + uint8_t result = 0; + + if (metadata.temperature == ALERT_RTC_TEMPERATURE_FAILURE && !bitRead(_alerts, ALERT_RTC_FAILURE)) { + bitSet(result, ALERT_RTC_FAILURE); + } + + if (metadata.batteryLevel <= config->alertBatteryLevel1 && !bitRead(_alerts, ALERT_BATTERY_LEVEL_1)) { + bitSet(result, ALERT_BATTERY_LEVEL_1); + } + + if (metadata.batteryLevel <= config->alertBatteryLevel2 && !bitRead(_alerts, ALERT_BATTERY_LEVEL_2)) { + bitSet(result, ALERT_BATTERY_LEVEL_2); + } + + return result; + } + + void clear(PositionEntryMetadata &metadata) { + config_t* config = &config::main::value; + uint8_t clearMask = 0; + + if (bitRead(_alerts, ALERT_RTC_FAILURE) && metadata.temperature != ALERT_RTC_TEMPERATURE_FAILURE) { + bitSet(clearMask, ALERT_RTC_FAILURE); + } + + if (_alerts & (_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); + } + + _alerts &= ~clearMask; + } +} diff --git a/GpsTracker/Alerts.h b/GpsTracker/Alerts.h new file mode 100644 index 0000000..5117792 --- /dev/null +++ b/GpsTracker/Alerts.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Positions.h" + +#define ALERT_BATTERY_LEVEL_1 1 +#define ALERT_BATTERY_LEVEL_2 2 +#define ALERT_RTC_FAILURE 3 + +namespace alerts { + + extern uint8_t _alerts; + + uint8_t getTriggered(PositionEntryMetadata &metadata); + inline void add(uint8_t mask) { _alerts |= mask; } + void clear(PositionEntryMetadata &metadata); +} diff --git a/GpsTracker/Config.h b/GpsTracker/Config.h index 54e776e..d5935e4 100644 --- a/GpsTracker/Config.h +++ b/GpsTracker/Config.h @@ -43,6 +43,8 @@ #define NETWORK_DEFAULT_NO_NETWORK_QUALITY_THRESHOLD 8 #define NETWORK_DEFAULT_NO_NETWORK_TRIES 5 +#define ALERT_RTC_TEMPERATURE_FAILURE 0 + #pragma endregion struct sleepTimings_t { @@ -60,6 +62,10 @@ struct config_t { #if BACKUP_ENABLE_NETWORK networkConfig_t network; #endif + uint8_t alertBatteryLevel1; + uint8_t alertBatteryLevel2; + uint8_t alertBatteryLevelClear; + char contactPhone[15]; }; namespace config {