diff --git a/GpsTracker/Network.cpp b/GpsTracker/Network.cpp index 030435d..fb9e6a3 100644 --- a/GpsTracker/Network.cpp +++ b/GpsTracker/Network.cpp @@ -1,22 +1,36 @@ #include "Config.h" -#if BACKUP_ENABLE_NETWORK #include "Debug.h" #include "Network.h" #include "Hardware.h" #include "MainUnit.h" +#include "Rtc.h" #define LOGGER_NAME "Network" namespace network { + timestamp_t _poweredOnTime; + + void powerOn() { + hardware::sim808::networkPowerOn(); + _poweredOnTime = rtc::getTime(); + } + + void powerOff() { + hardware::sim808::networkPowerOff(); + _poweredOnTime = 0; + } + __attribute__((__optimize__("O2"))) - SIM808RegistrationStatus waitForRegistered(uint32_t timeout) { + SIM808RegistrationStatus waitForRegistered(uint32_t timeout, bool relativeToPowerOnTime = true) { SIM808RegistrationStatus currentStatus; SIM808SignalQualityReport report; uint8_t noReliableNetwork = 0; + if (relativeToPowerOnTime) timeout -= (rtc::getTime() - _poweredOnTime) * 1000; + do { currentStatus = hardware::sim808::device.getNetworkRegistrationStatus(); if (isAvailable(currentStatus.stat)) break; @@ -50,6 +64,4 @@ namespace network { return hardware::sim808::device.enableGprs(config::main::value.network.apn); } - -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/GpsTracker/Network.h b/GpsTracker/Network.h index 33ee41e..a704004 100644 --- a/GpsTracker/Network.h +++ b/GpsTracker/Network.h @@ -4,10 +4,10 @@ namespace network { - inline void powerOn() { hardware::sim808::networkPowerOn(); } - inline void powerOff() { hardware::sim808::networkPowerOff(); } + void powerOn(); + void powerOff(); - SIM808RegistrationStatus waitForRegistered(uint32_t timeout); + SIM808RegistrationStatus waitForRegistered(uint32_t timeout, bool relativeToPowerOnTime = true); bool isAvailable(SIM808_NETWORK_REGISTRATION_STATE state); bool enableGprs(); } \ No newline at end of file diff --git a/GpsTracker/NetworkPositionsBackup.cpp b/GpsTracker/NetworkPositionsBackup.cpp index 81cbaba..341167d 100644 --- a/GpsTracker/NetworkPositionsBackup.cpp +++ b/GpsTracker/NetworkPositionsBackup.cpp @@ -53,15 +53,11 @@ namespace positions { //__attribute__((__optimize__("O2"))) void NetworkPositionsBackup::appendPositions() { uint16_t currentEntryIndex = config::main::value.network.lastSavedEntry + 1; - uint32_t networkTimeout = 0; PositionEntry currentEntry; SIM808RegistrationStatus networkStatus; network::powerOn(); - networkTimeout = NETWORK_DEFAULT_TOTAL_TIMEOUT_MS; - if (_prepareTime > 0) networkTimeout -= (rtc::getTime() - _prepareTime) * 1000; - - networkStatus = network::waitForRegistered(networkTimeout); + networkStatus = network::waitForRegistered(NETWORK_DEFAULT_TOTAL_TIMEOUT_MS); if (!network::isAvailable(networkStatus.stat) || !network::enableGprs()) { networkUnavailableInARow = min(networkUnavailableInARow + 1, POSITIONS_CONFIG_NET_DEFAULT_UNAVAILABLE_NETWORK_POSTPONE_THRESHOLD + 1); //avoid increment overflow @@ -97,13 +93,8 @@ namespace positions { void NetworkPositionsBackup::prepare() { NOTICE("prepare"); - if (!isBackupNeeded(true)) { - _prepareTime = 0; - return; - } - + if (!isBackupNeeded(true)) return; network::powerOn(); - _prepareTime = rtc::getTime(); } void NetworkPositionsBackup::backup(bool force) { diff --git a/GpsTracker/NetworkPositionsBackup.h b/GpsTracker/NetworkPositionsBackup.h index 4986093..751a911 100644 --- a/GpsTracker/NetworkPositionsBackup.h +++ b/GpsTracker/NetworkPositionsBackup.h @@ -10,8 +10,6 @@ namespace positions { class NetworkPositionsBackup : public PositionsBackup { private: - timestamp_t _prepareTime; - bool isBackupNeeded(bool forPrepare); bool appendPosition(PositionEntry &entry); void appendPositions();