Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

51 righe
1.6 KiB

  1. #pragma once
  2. #include "Debug.h"
  3. #include "Alerts.h"
  4. #include "Config.h"
  5. #include "Rtc.h"
  6. #define LOGGER_NAME "Alerts"
  7. namespace alerts {
  8. uint8_t getTriggered(PositionEntryMetadata &metadata) {
  9. config_t* config = &config::main::value;
  10. uint8_t active = 0;
  11. if (metadata.batteryLevel <= config->alertBatteryLevel1) bitSet(active, ALERT_BATTERY_LEVEL_1);
  12. if (metadata.batteryLevel <= config->alertBatteryLevel2) bitSet(active, ALERT_BATTERY_LEVEL_2);
  13. if (metadata.temperature == ALERT_SUSPICIOUS_RTC_TEMPERATURE) bitSet(active, ALERT_RTC_TEMPERATURE_FAILURE);
  14. if (!rtc::isAccurate()) bitSet(active, ALERT_RTC_CLOCK_FAILURE);
  15. return config->activeAlerts ^ active;
  16. }
  17. void add(uint8_t mask) {
  18. config_t* config = &config::main::value;
  19. uint8_t active = config->activeAlerts;
  20. active |= mask;
  21. if (config->activeAlerts == active) return; //save a write to eeprom if there is no change
  22. config->activeAlerts = active;
  23. config::main::save();
  24. }
  25. void clear(PositionEntryMetadata &metadata) {
  26. config_t* config = &config::main::value;
  27. uint8_t clearMask = 0;
  28. uint8_t active = config->activeAlerts;
  29. if (metadata.batteryLevel >= config->alertBatteryLevelClear) clearMask |= _BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2);
  30. if (metadata.temperature != ALERT_SUSPICIOUS_RTC_TEMPERATURE) bitSet(clearMask, ALERT_RTC_TEMPERATURE_FAILURE);
  31. if (rtc::isAccurate()) bitSet(clearMask, ALERT_RTC_CLOCK_FAILURE);
  32. active &= ~clearMask;
  33. if (config->activeAlerts == active) return; //save a write to eeprom if there is no change
  34. config->activeAlerts = active;
  35. config::main::save();
  36. }
  37. }