From 6b41da4c9a0597fc9e2802890b209cdce33acda0 Mon Sep 17 00:00:00 2001 From: Bertrand Lemasle Date: Thu, 3 May 2018 17:33:21 +1200 Subject: [PATCH] Ability to force backup. Forcing backup when "stopping" --- GpsTracker/Core.cpp | 18 +++++++++++------- GpsTracker/Core.h | 4 ++-- GpsTracker/Debug.cpp | 4 ++-- GpsTracker/GpsTracker.ino | 2 +- GpsTracker/NetworkPositionsBackup.cpp | 4 ++-- GpsTracker/NetworkPositionsBackup.h | 2 +- GpsTracker/Positions.cpp | 4 ++-- GpsTracker/Positions.h | 2 +- GpsTracker/PositionsBackup.h | 2 +- GpsTracker/SdPositionsBackup.cpp | 2 +- GpsTracker/SdPositionsBackup.h | 2 +- 11 files changed, 25 insertions(+), 21 deletions(-) diff --git a/GpsTracker/Core.cpp b/GpsTracker/Core.cpp index 14dde34..4c09c27 100644 --- a/GpsTracker/Core.cpp +++ b/GpsTracker/Core.cpp @@ -7,38 +7,42 @@ using namespace utils; namespace core { - uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS;; + uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS; uint8_t stoppedInARow = 0; void main() { - + bool forceBackup = false; positions::prepareBackup(); PositionEntryMetadata metadata; if (positions::acquire(metadata)) { positions::appendLast(metadata); - updateSleepTime(gps::getVelocity()); + forceBackup = updateSleepTime(gps::getVelocity()); } - positions::doBackup(); + positions::doBackup(forceBackup); mainunit::deepSleep(sleepTime); } - void updateSleepTime(uint8_t velocity) { - uint16_t result = computeSleepTime(velocity); + bool updateSleepTime(uint8_t velocity) { + uint16_t result = mapSleepTime(velocity); + bool goingLongSleep = false; if (velocity < SLEEP_TIMING_MIN_MOVING_VELOCITY) { stoppedInARow++; if (stoppedInARow < SLEEP_DEFAULT_STOPPED_THRESHOLD) { result = SLEEP_DEFAULT_PAUSING_TIME_SECONDS; } + else goingLongSleep = true; } else stoppedInARow = 0; sleepTime = result; NOTICE_FORMAT("updateSleepTime", "%dkmh => %d seconds", velocity, sleepTime); + + return goingLongSleep; } - uint16_t computeSleepTime(uint8_t velocity) { + uint16_t mapSleepTime(uint8_t velocity) { uint16_t result; uint16_t currentTime = 0xFFFF; diff --git a/GpsTracker/Core.h b/GpsTracker/Core.h index 7539d51..635e2f5 100644 --- a/GpsTracker/Core.h +++ b/GpsTracker/Core.h @@ -14,6 +14,6 @@ namespace core { extern uint16_t sleepTime; void main(); - void updateSleepTime(uint8_t velocity); - uint16_t computeSleepTime(uint8_t velocity); + bool updateSleepTime(uint8_t velocity); + uint16_t mapSleepTime(uint8_t velocity); } \ No newline at end of file diff --git a/GpsTracker/Debug.cpp b/GpsTracker/Debug.cpp index ef8a2d0..f88d1f2 100644 --- a/GpsTracker/Debug.cpp +++ b/GpsTracker/Debug.cpp @@ -168,7 +168,7 @@ namespace debug { NOTICE_FORMAT("setFakeGpsPosition", "Last position set to : %s", gps::lastPosition); NOTICE_FORMAT("setFakeGpsPosition", "Speed : %d", gps::getVelocity()); - NOTICE_FORMAT("setFakeGpsPosition", "Sleep time : %d", core::computeSleepTime(gps::getVelocity())); + NOTICE_FORMAT("setFakeGpsPosition", "Sleep time : %d", core::mapSleepTime(gps::getVelocity())); } void getAndDisplayBattery() { @@ -198,7 +198,7 @@ namespace debug { utils::flash::read(&config::defaultSleepTimings[arraySize - 1], maxSpeedTiming); for (int i = 0; i <= maxSpeedTiming.speed; i++) { - core::computeSleepTime(i); + core::mapSleepTime(i); } NOTICE_MSG("getAndDisplaySleepTimes", "Done"); diff --git a/GpsTracker/GpsTracker.ino b/GpsTracker/GpsTracker.ino index 9b44f41..259c656 100644 --- a/GpsTracker/GpsTracker.ino +++ b/GpsTracker/GpsTracker.ino @@ -78,7 +78,7 @@ void loop() { debug::addLastPositionToEeprom(); break; case debug::GPSTRACKER_DEBUG_COMMAND::EEPROM_BACKUP_ENTRIES: - positions::doBackup(); + positions::doBackup(false); break; case debug::GPSTRACKER_DEBUG_COMMAND::SLEEP: mainunit::sleep(period_t::SLEEP_8S); diff --git a/GpsTracker/NetworkPositionsBackup.cpp b/GpsTracker/NetworkPositionsBackup.cpp index 3ad065a..5ad38ac 100644 --- a/GpsTracker/NetworkPositionsBackup.cpp +++ b/GpsTracker/NetworkPositionsBackup.cpp @@ -106,10 +106,10 @@ namespace positions { _prepareTime = rtc::getTime(); } - void NetworkPositionsBackup::backup() { + void NetworkPositionsBackup::backup(bool force) { NOTICE("backup"); - if (!isBackupNeeded(false)) return; + if (!force || !isBackupNeeded(false)) return; appendPositions(); } } diff --git a/GpsTracker/NetworkPositionsBackup.h b/GpsTracker/NetworkPositionsBackup.h index dd6fe4b..4986093 100644 --- a/GpsTracker/NetworkPositionsBackup.h +++ b/GpsTracker/NetworkPositionsBackup.h @@ -20,7 +20,7 @@ namespace positions { void setup(); void prepare(); - void backup(); + void backup(bool force); }; } diff --git a/GpsTracker/Positions.cpp b/GpsTracker/Positions.cpp index 3d909a1..14e0253 100644 --- a/GpsTracker/Positions.cpp +++ b/GpsTracker/Positions.cpp @@ -154,10 +154,10 @@ namespace positions { #endif } - void doBackup() { + void doBackup(bool force) { #ifdef BACKUPS_ENABLED for (int i = 0; i < BACKUPS_ENABLED; i++) { - _backups[i]->backup(); + _backups[i]->backup(force); } #endif } diff --git a/GpsTracker/Positions.h b/GpsTracker/Positions.h index 5709423..33da1d0 100644 --- a/GpsTracker/Positions.h +++ b/GpsTracker/Positions.h @@ -28,5 +28,5 @@ namespace positions { uint16_t count(uint16_t fromIndex); void prepareBackup(); - void doBackup(); + void doBackup(bool force); } \ No newline at end of file diff --git a/GpsTracker/PositionsBackup.h b/GpsTracker/PositionsBackup.h index 0e12dfa..340ec4b 100644 --- a/GpsTracker/PositionsBackup.h +++ b/GpsTracker/PositionsBackup.h @@ -9,7 +9,7 @@ namespace positions { virtual void setup() = 0; virtual void prepare() = 0; - virtual void backup() = 0; + virtual void backup(bool force) = 0; }; } diff --git a/GpsTracker/SdPositionsBackup.cpp b/GpsTracker/SdPositionsBackup.cpp index 4bfcb50..7e543e8 100644 --- a/GpsTracker/SdPositionsBackup.cpp +++ b/GpsTracker/SdPositionsBackup.cpp @@ -99,7 +99,7 @@ namespace positions { hardware::sdcard::setup(); } - void SdPositionsBackup::backup() { + void SdPositionsBackup::backup(bool force) { VERBOSE("backup"); if (!hardware::sdcard::available) { diff --git a/GpsTracker/SdPositionsBackup.h b/GpsTracker/SdPositionsBackup.h index f26aad9..87aa92b 100644 --- a/GpsTracker/SdPositionsBackup.h +++ b/GpsTracker/SdPositionsBackup.h @@ -10,7 +10,7 @@ namespace positions { private: public: void setup(); - void backup(); + void backup(bool force); }; }