Explorar el Código

Avoid backup while the tracker is moving

tags/v1.2.0
Bertrand Lemasle hace 6 años
padre
commit
7cc36c6258
Se han modificado 2 ficheros con 21 adiciones y 9 borrados
  1. +13
    -8
      src/Core.cpp
  2. +8
    -1
      src/Core.h

+ 13
- 8
src/Core.cpp Ver fichero

@@ -13,6 +13,7 @@ namespace core {

uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS;
uint8_t stoppedInARow = SLEEP_DEFAULT_STOPPED_THRESHOLD - 1;
TRACKER_MOVING_STATE movingState = TRACKER_MOVING_STATE::MOVING;

namespace details {

@@ -30,23 +31,25 @@ namespace core {
}

void main() {
bool forceBackup = false;
bool acquired = false;
PositionEntryMetadata metadata;

positions::prepareBackup();
if(movingState >= TRACKER_MOVING_STATE::STOPPED) positions::prepareBackup();
acquired = positions::acquire(metadata);

if (acquired) {
positions::appendLast(metadata);

forceBackup = updateSleepTime();
movingState = updateSleepTime();
gps::preserveCurrentCoordinates();
}

alerts::clear(metadata);
alerts::add(notifyFailures(metadata));
positions::doBackup(forceBackup);

if(movingState >= TRACKER_MOVING_STATE::STOPPED) {
positions::doBackup(movingState == TRACKER_MOVING_STATE::STOPPED); //do not force on STATIC
}

if (acquired) updateRtcTime();
mainunit::deepSleep(sleepTime);
@@ -104,8 +107,8 @@ namespace core {
rtc::setTime(time);
}

bool updateSleepTime() {
bool goingLongSleep = false;
TRACKER_MOVING_STATE updateSleepTime() {
TRACKER_MOVING_STATE state = TRACKER_MOVING_STATE::MOVING;
uint8_t velocity = gps::getVelocity();

sleepTime = mapSleepTime(velocity);
@@ -117,13 +120,15 @@ namespace core {

if (stoppedInARow < SLEEP_DEFAULT_STOPPED_THRESHOLD) {
sleepTime = SLEEP_DEFAULT_PAUSING_TIME_SECONDS;
state = TRACKER_MOVING_STATE::PAUSED;
}
else if (stoppedInARow == SLEEP_DEFAULT_STOPPED_THRESHOLD) goingLongSleep = true;
else if (stoppedInARow == SLEEP_DEFAULT_STOPPED_THRESHOLD) state = TRACKER_MOVING_STATE::STOPPED;
else state = TRACKER_MOVING_STATE::STATIC;
}
else stoppedInARow = 0;

NOTICE_FORMAT("updateSleepTime", "%dkmh => %d seconds", velocity, sleepTime);
return goingLongSleep;
return state;
}

uint16_t mapSleepTime(uint8_t velocity) {


+ 8
- 1
src/Core.h Ver fichero

@@ -10,12 +10,19 @@
#include "Pins.h"
#include "Positions.h"

enum class TRACKER_MOVING_STATE : uint8_t {
MOVING = 0,
PAUSED = 1,
STOPPED = 2,
STATIC = 3
};

namespace core {
extern uint16_t sleepTime;

void main();
void updateRtcTime();
bool updateSleepTime();
TRACKER_MOVING_STATE updateSleepTime();
uint16_t mapSleepTime(uint8_t velocity);

uint8_t notifyFailures(PositionEntryMetadata &metadata);

Cargando…
Cancelar
Guardar