|
@@ -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; |
|
|
|
|
|
} |
|
|
|
|
|
} |