diff --git a/GpsTracker/NetworkPositionsBackup.cpp b/GpsTracker/NetworkPositionsBackup.cpp index 5cc0a4c..3ad065a 100644 --- a/GpsTracker/NetworkPositionsBackup.cpp +++ b/GpsTracker/NetworkPositionsBackup.cpp @@ -15,10 +15,13 @@ namespace positions { namespace backup { namespace net { + uint8_t networkUnavailableInARow = 0; + uint8_t networkUnavailablePostpone = 1; + bool NetworkPositionsBackup::isBackupNeeded(bool forPrepare) { config_t *config = &config::main::value; 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) { @@ -60,9 +63,18 @@ namespace positions { 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 { + networkUnavailableInARow = 0; + networkUnavailablePostpone = 1; + hardware::i2c::powerOn(); do { if (!positions::get(currentEntryIndex, currentEntry)) break; diff --git a/GpsTracker/NetworkPositionsConfig.h b/GpsTracker/NetworkPositionsConfig.h index 6388fe0..3313b16 100644 --- a/GpsTracker/NetworkPositionsConfig.h +++ b/GpsTracker/NetworkPositionsConfig.h @@ -1,10 +1,11 @@ #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 {