瀏覽代碼

Added relativeToPowerOnTime to waitForRegistered, allowing to efficiently wait for the network accross the firmware

tags/v1.2.0
Bertrand Lemasle 6 年之前
父節點
當前提交
b63912bd29
共有 4 個文件被更改,包括 22 次插入21 次删除
  1. +17
    -5
      GpsTracker/Network.cpp
  2. +3
    -3
      GpsTracker/Network.h
  3. +2
    -11
      GpsTracker/NetworkPositionsBackup.cpp
  4. +0
    -2
      GpsTracker/NetworkPositionsBackup.h

+ 17
- 5
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
}

+ 3
- 3
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();
}

+ 2
- 11
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) {


+ 0
- 2
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();


Loading…
取消
儲存