#include "Core.h" #include "Config.h" #include "Flash.h" #define LOGGER_NAME "Core" using namespace utils; namespace core { uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS;; uint8_t increaseInARow = 0; void main() { PositionEntryMetadata metadata; if (positions::acquire(metadata)) { positions::appendLast(metadata); updateSleepTime(gps::getVelocity()); } positions::doBackup(); mainunit::deepSleep(sleepTime); } void updateSleepTime(uint8_t velocity) { uint16_t result = computeSleepTime(velocity); if (result > sleepTime) { increaseInARow++; if (increaseInARow < SLEEP_DEFAULT_INCREASE_THRESHOLD) return; } else increaseInARow = 0; sleepTime = result; NOTICE_FORMAT("updateSleepTime", "%dkmh => %d seconds", velocity, sleepTime); } uint16_t computeSleepTime(uint8_t velocity) { uint16_t result; uint16_t currentTime = 0xFFFF; if (rtc::isAccurate()) { tmElements_t time; rtc::getTime(time); currentTime = SLEEP_TIMING_TIME(time.Hour, time.Minute); } for (uint8_t i = 0; i < flash::getArraySize(config::defaultSleepTimings); i++) { sleepTimings_t timing; flash::read(&config::defaultSleepTimings[i], timing); if (velocity > timing.speed) continue; if (currentTime != 0xFFFF && (currentTime < timing.timeMin || currentTime > timing.timeMax)) continue; result = timing.seconds; break; } VERBOSE_FORMAT("computeSleepTime", "%d,%d", velocity, result); return result; } }