Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

55 строки
1.6 KiB

  1. #include "Config.h"
  2. #if BACKUP_ENABLE_NETWORK
  3. #include "Debug.h"
  4. #include "Network.h"
  5. #include "Hardware.h"
  6. #include "MainUnit.h"
  7. #define LOGGER_NAME "Network"
  8. namespace network {
  9. __attribute__((__optimize__("O2")))
  10. SIM808RegistrationStatus waitForRegistered(uint32_t timeout) {
  11. SIM808RegistrationStatus currentStatus;
  12. SIM808SignalQualityReport report;
  13. uint8_t noReliableNetwork = 0;
  14. do {
  15. currentStatus = hardware::sim808::device.getNetworkRegistrationStatus();
  16. if (isAvailable(currentStatus.stat)) break;
  17. report = hardware::sim808::device.getSignalQuality();
  18. NOTICE_FORMAT("waitForRegistered", "%d, [%d %ddBm]", currentStatus.stat, report.ssri, report.attenuation);
  19. if (report.ssri < NETWORK_DEFAULT_NO_NETWORK_QUALITY_THRESHOLD) noReliableNetwork++;
  20. else noReliableNetwork = 0;
  21. if (noReliableNetwork > NETWORK_DEFAULT_NO_NETWORK_TRIES) {
  22. NOTICE_MSG("waitForRegistered", "No reliable signal");
  23. break; //after a while, not network really means no network. Bailing out
  24. }
  25. mainunit::deepSleep(NETWORK_DEFAULT_INTERMEDIATE_TIMEOUT_MS / 1000);
  26. timeout -= NETWORK_DEFAULT_INTERMEDIATE_TIMEOUT_MS;
  27. } while (timeout > 1);
  28. report = hardware::sim808::device.getSignalQuality();
  29. NOTICE_FORMAT("waitForRegistered", "%d, [%d %ddBm]", currentStatus.stat, report.ssri, report.attenuation);
  30. return currentStatus;
  31. }
  32. bool isAvailable(SIM808_NETWORK_REGISTRATION_STATE state) {
  33. return state == SIM808_NETWORK_REGISTRATION_STATE::REGISTERED ||
  34. state == SIM808_NETWORK_REGISTRATION_STATE::ROAMING;
  35. }
  36. bool enableGprs() {
  37. return hardware::sim808::device.enableGprs(config::main::value.network.apn);
  38. }
  39. }
  40. #endif