Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

57 rader
1.3 KiB

  1. #include "MainUnit.h"
  2. #include "Rtc.h"
  3. #include "Hardware.h"
  4. #include "config/Pins.h"
  5. #include "Logging.h"
  6. extern int __heap_start, *__brkval;
  7. namespace mainunit {
  8. #define CURRENT_LOGGER "mainunit"
  9. namespace details {
  10. void prepareSleep() {
  11. hardware::sim808::simSerial.end(); //avoid woke up by SoftwareSerial interrupt
  12. delay(5); //ensure log messages have been printed out
  13. }
  14. void wokeUp() {
  15. #define CURRENT_LOGGER_FUNCTION "wokeUp"
  16. tmElements_t wokeUpTime;
  17. rtc::getTime(wokeUpTime);
  18. VERBOSE_FORMAT("%d:%d:%d", wokeUpTime.hour, wokeUpTime.minute, wokeUpTime.second);
  19. hardware::sim808::simSerial.listen();
  20. }
  21. }
  22. void interrupt() {
  23. detachInterrupt(digitalPinToInterrupt(RTC_WAKE));
  24. }
  25. void interruptIn(uint16_t seconds) {
  26. rtc::setAlarm(seconds);
  27. pinMode(RTC_WAKE, INPUT);
  28. attachInterrupt(digitalPinToInterrupt(RTC_WAKE), interrupt, FALLING);
  29. }
  30. void deepSleep(uint16_t seconds) {
  31. #define CURRENT_LOGGER_FUNCTION "deepSleep"
  32. NOTICE_FORMAT("%ds", seconds);
  33. interruptIn(seconds);
  34. details::prepareSleep();
  35. LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  36. details::wokeUp();
  37. }
  38. int freeRam() {
  39. int v;
  40. return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
  41. }
  42. }