瀏覽代碼

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 7 年之前
父節點
當前提交
01f3a488a1
共有 2 個檔案被更改,包括 23 行新增11 行删除
  1. +21
    -9
      GpsTracker/Core.cpp
  2. +2
    -2
      GpsTracker/Core.h

+ 21
- 9
GpsTracker/Core.cpp 查看文件

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


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


void main() { void main() {
VERBOSE("main"); VERBOSE("main");
@@ -15,29 +16,40 @@ namespace core {
PositionEntryMetadata metadata; PositionEntryMetadata metadata;
if (positions::acquire(metadata)) { if (positions::acquire(metadata)) {
positions::appendLast(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++) { for (uint8_t i = 0; i < flash::getArraySize(config::defaultSleepTimings); i++) {
sleepTimings_t timing; sleepTimings_t timing;
flash::read(&config::defaultSleepTimings[i], timing); flash::read(&config::defaultSleepTimings[i], timing);


if (velocity > timing.speed) continue; if (velocity > timing.speed) continue;
sleepTime = timing.seconds;
result = timing.seconds;
break; break;
} }


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

+ 2
- 2
GpsTracker/Core.h 查看文件

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


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

Loading…
取消
儲存