#include "Config.h" #if BACKUP_ENABLE_NETWORK #include "Debug.h" #include "Network.h" #include "Hardware.h" #include "MainUnit.h" #define LOGGER_NAME "Network" namespace network { SIM808RegistrationStatus waitForRegistered(uint32_t timeout) { VERBOSE("waitForRegistered"); SIM808RegistrationStatus currentStatus; uint8_t noReliableNetwork = 0; do { currentStatus = hardware::sim808::device.getNetworkRegistrationStatus(); if (isAvailable(currentStatus.stat)) break; SIM808SignalQualityReport report = hardware::sim808::device.getSignalQuality(); NOTICE_FORMAT("waitForRegistered", "%d, [%d %ddBm]", currentStatus.stat, report.ssri, report.attenuation); if (report.ssri < NETWORK_DEFAULT_NO_NETWORK_QUALIRY_THRESHOLD) noReliableNetwork++; else noReliableNetwork = 0; if (noReliableNetwork > NETWORK_DEFAULT_NO_NETWORK_TRIES) { NOTICE_MSG("waitForRegistered", "No reliable signal"); break; //after a while, not network really means no network. Bailing out } mainunit::deepSleep(NETWORK_DEFAULT_INTERMEDIATE_TIMEOUT_MS / 1000); timeout -= NETWORK_DEFAULT_INTERMEDIATE_TIMEOUT_MS; } while (timeout > 1); NOTICE_FORMAT("waitForRegistered", "%d, [%d %ddBm]", currentStatus.stat, report.ssri, report.attenuation); return currentStatus; } bool isAvailable(SIM808_NETWORK_REGISTRATION_STATE state) { return state == SIM808_NETWORK_REGISTRATION_STATE::REGISTERED || state == SIM808_NETWORK_REGISTRATION_STATE::ROAMING; } bool enableGprs() { return hardware::sim808::device.enableGprs(config::main::value.network.apn); } } #endif