您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

44 行
1.2 KiB

  1. #pragma once
  2. #include "Alerts.h"
  3. #include "Config.h"
  4. namespace alerts {
  5. uint8_t _alerts = 0;
  6. uint8_t getTriggered(PositionEntryMetadata &metadata) {
  7. config_t* config = &config::main::value;
  8. uint8_t result = 0;
  9. if (metadata.temperature == ALERT_RTC_TEMPERATURE_FAILURE && !bitRead(_alerts, ALERT_RTC_FAILURE)) {
  10. bitSet(result, ALERT_RTC_FAILURE);
  11. }
  12. if (metadata.batteryLevel <= config->alertBatteryLevel1 && !bitRead(_alerts, ALERT_BATTERY_LEVEL_1)) {
  13. bitSet(result, ALERT_BATTERY_LEVEL_1);
  14. }
  15. if (metadata.batteryLevel <= config->alertBatteryLevel2 && !bitRead(_alerts, ALERT_BATTERY_LEVEL_2)) {
  16. bitSet(result, ALERT_BATTERY_LEVEL_2);
  17. }
  18. return result;
  19. }
  20. void clear(PositionEntryMetadata &metadata) {
  21. config_t* config = &config::main::value;
  22. uint8_t clearMask = 0;
  23. if (bitRead(_alerts, ALERT_RTC_FAILURE) && metadata.temperature != ALERT_RTC_TEMPERATURE_FAILURE) {
  24. bitSet(clearMask, ALERT_RTC_FAILURE);
  25. }
  26. if (_alerts & (_BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2) && metadata.temperature >= config->alertBatteryLevelClear)) {
  27. clearMask |= _BV(ALERT_BATTERY_LEVEL_1) | _BV(ALERT_BATTERY_LEVEL_2);
  28. }
  29. _alerts &= ~clearMask;
  30. }
  31. }