Parcourir la source

Added some code to reduce the effect of a gps fix that would indicate no speed, leaving the device in sleep mode for too long

tags/v1.2.0
Bertrand Lemasle il y a 7 ans
Parent
révision
01f3a488a1
2 fichiers modifiés avec 23 ajouts et 11 suppressions
  1. +21
    -9
      GpsTracker/Core.cpp
  2. +2
    -2
      GpsTracker/Core.h

+ 21
- 9
GpsTracker/Core.cpp Voir le fichier

@@ -8,6 +8,7 @@ using namespace utils;

namespace core {
uint16_t sleepTime = SLEEP_DEFAULT_TIME_SECONDS;;
uint8_t increaseInARow = 0;

void main() {
VERBOSE("main");
@@ -15,29 +16,40 @@ namespace core {
PositionEntryMetadata metadata;
if (positions::acquire(metadata)) {
positions::appendLast(metadata);
setSleepTime();
updateSleepTime(gps::getVelocity());
}

positions::doBackup();
positions::doBackup();
mainunit::deepSleep(sleepTime);
}

void setSleepTime() {
setSleepTime(gps::getVelocity());
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;
}

void setSleepTime(uint8_t velocity) {
sleepTime = SLEEP_DEFAULT_TIME_SECONDS;
uint16_t computeSleepTime(uint8_t velocity) {
uint16_t result;

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;
sleepTime = timing.seconds;
result = timing.seconds;
break;
}

VERBOSE_FORMAT("setSleepTime", "%d", sleepTime);
VERBOSE_FORMAT("computeSleepTime", "%d,%d", velocity, result);
return result;
}
}

+ 2
- 2
GpsTracker/Core.h Voir le fichier

@@ -14,6 +14,6 @@ namespace core {
extern uint16_t sleepTime;

void main();
void setSleepTime(uint8_t velocity);
void setSleepTime();
void updateSleepTime(uint8_t velocity);
uint16_t computeSleepTime(uint8_t velocity);
}

Chargement…
Annuler
Enregistrer