Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

67 rindas
1.5 KiB

  1. #include "Core.h"
  2. #include "Config.h"
  3. #include "Flash.h"
  4. #define LOGGER_NAME "Core"
  5. using namespace utils;
  6. namespace core {
  7. uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS;;
  8. uint8_t stoppedInARow = 0;
  9. void main() {
  10. positions::prepareBackup();
  11. PositionEntryMetadata metadata;
  12. if (positions::acquire(metadata)) {
  13. positions::appendLast(metadata);
  14. updateSleepTime(gps::getVelocity());
  15. }
  16. positions::doBackup();
  17. mainunit::deepSleep(sleepTime);
  18. }
  19. void updateSleepTime(uint8_t velocity) {
  20. uint16_t result = computeSleepTime(velocity);
  21. if (velocity < SLEEP_TIMING_MIN_MOVING_VELOCITY) {
  22. stoppedInARow++;
  23. if (stoppedInARow < SLEEP_DEFAULT_STOPPED_THRESHOLD) {
  24. result = SLEEP_DEFAULT_PAUSING_TIME_SECONDS;
  25. }
  26. }
  27. else stoppedInARow = 0;
  28. sleepTime = result;
  29. NOTICE_FORMAT("updateSleepTime", "%dkmh => %d seconds", velocity, sleepTime);
  30. }
  31. uint16_t computeSleepTime(uint8_t velocity) {
  32. uint16_t result;
  33. uint16_t currentTime = 0xFFFF;
  34. if (rtc::isAccurate()) {
  35. tmElements_t time;
  36. rtc::getTime(time);
  37. currentTime = SLEEP_TIMING_TIME(time.Hour, time.Minute);
  38. }
  39. for (uint8_t i = flash::getArraySize(config::defaultSleepTimings); i--;) {
  40. sleepTimings_t timing;
  41. flash::read(&config::defaultSleepTimings[i], timing);
  42. if (velocity < timing.speed) continue;
  43. if (currentTime != 0xFFFF && (currentTime < timing.timeMin || currentTime > timing.timeMax)) continue;
  44. result = timing.seconds;
  45. break;
  46. }
  47. VERBOSE_FORMAT("computeSleepTime", "%d,%d", velocity, result);
  48. return result;
  49. }
  50. }