소스 검색

When network is not available for the time being, postponing the backup to a later time to avoid eating the battery for nothing

tags/v1.2.0
Bertrand Lemasle 7 년 전
부모
커밋
0cd271cf09
2개의 변경된 파일20개의 추가작업 그리고 7개의 파일을 삭제
  1. +15
    -3
      GpsTracker/NetworkPositionsBackup.cpp
  2. +5
    -4
      GpsTracker/NetworkPositionsConfig.h

+ 15
- 3
GpsTracker/NetworkPositionsBackup.cpp 파일 보기

@@ -15,10 +15,13 @@ namespace positions {
namespace backup { namespace backup {
namespace net { namespace net {


uint8_t networkUnavailableInARow = 0;
uint8_t networkUnavailablePostpone = 1;

bool NetworkPositionsBackup::isBackupNeeded(bool forPrepare) { bool NetworkPositionsBackup::isBackupNeeded(bool forPrepare) {
config_t *config = &config::main::value; config_t *config = &config::main::value;
return (config->network.lastSavedEntry == 0xFFFF && config->lastEntry != 0xFFFF) || return (config->network.lastSavedEntry == 0xFFFF && config->lastEntry != 0xFFFF) ||
positions::count(config->network.lastSavedEntry) > config->network.saveThreshold - (forPrepare ? 1 : 0);
positions::count(config->network.lastSavedEntry) > (config->network.saveThreshold * networkUnavailablePostpone) - (forPrepare ? 1 : 0);
} }


bool NetworkPositionsBackup::appendPosition(PositionEntry &entry) { bool NetworkPositionsBackup::appendPosition(PositionEntry &entry) {
@@ -60,9 +63,18 @@ namespace positions {


networkStatus = network::waitForRegistered(networkTimeout); networkStatus = network::waitForRegistered(networkTimeout);


if (!network::isAvailable(networkStatus.stat)) NOTICE_MSG("appendPositions", "network unavailable");
else if (!network::enableGprs()) NOTICE_MSG("appendPositions", "gprs unavailable");
if (!network::isAvailable(networkStatus.stat) || !network::enableGprs()) {
networkUnavailableInARow++;
NOTICE_MSG("appendPositions", "network or gprs unavailable");

if (networkUnavailableInARow > POSITIONS_CONFIG_NET_DEFAULT_UNAVAILABLE_NETWORK_POSTPONE_THRESHOLD) {
networkUnavailablePostpone++;
}
}
else { else {
networkUnavailableInARow = 0;
networkUnavailablePostpone = 1;

hardware::i2c::powerOn(); hardware::i2c::powerOn();
do { do {
if (!positions::get(currentEntryIndex, currentEntry)) break; if (!positions::get(currentEntryIndex, currentEntry)) break;


+ 5
- 4
GpsTracker/NetworkPositionsConfig.h 파일 보기

@@ -1,10 +1,11 @@
#pragma once #pragma once




#define POSITIONS_CONFIG_NET_DEFAULT_SAVE_THRESHOLD 30
#define POSITIONS_CONFIG_NET_DEFAULT_APN "Vodafone"
#define POSITIONS_CONFIG_NET_DEFAULT_URL "http://yourserver.com/endpoint"
#define POSITIONS_CONFIG_NET_DEFAULT_EXPECTED_RESPONSE 201
#define POSITIONS_CONFIG_NET_DEFAULT_SAVE_THRESHOLD 30
#define POSITIONS_CONFIG_NET_DEFAULT_APN "Vodafone"
#define POSITIONS_CONFIG_NET_DEFAULT_URL "http://yourserver.com/endpoint"
#define POSITIONS_CONFIG_NET_DEFAULT_EXPECTED_RESPONSE 201
#define POSITIONS_CONFIG_NET_DEFAULT_UNAVAILABLE_NETWORK_POSTPONE_THRESHOLD 5




struct networkConfig_t { struct networkConfig_t {


불러오는 중...
취소
저장