You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
#include "device.h"
|
|
|
|
#define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */
|
|
RTC_DATA_ATTR int bootCount = 0;
|
|
RTC_DATA_ATTR long config_DeepSleepInterval = 0;
|
|
|
|
|
|
// private methods
|
|
void sleepDevice();
|
|
String getWakeupReason();
|
|
|
|
|
|
/**
|
|
* setup deep sleep mode
|
|
*/
|
|
void setupDevice()
|
|
{
|
|
// increment boot number and print it every reboot
|
|
//bootCount++;
|
|
|
|
// config wakeup timer
|
|
deviceSetSleepInterval(300);
|
|
}
|
|
|
|
|
|
void loopDevice()
|
|
{
|
|
if (config_DeepSleepInterval > 0)
|
|
{
|
|
sleepDevice();
|
|
// device stop here
|
|
}
|
|
}
|
|
|
|
|
|
void sleepDevice()
|
|
{
|
|
Serial.println("Going to sleep now");
|
|
Serial.flush();
|
|
|
|
esp_sleep_enable_timer_wakeup(config_DeepSleepInterval * uS_TO_S_FACTOR);
|
|
esp_deep_sleep_start();
|
|
}
|
|
|
|
|
|
void deviceSetSleepInterval(long interval)
|
|
{
|
|
config_DeepSleepInterval = interval;
|
|
}
|
|
|
|
|
|
long deviceGetSleepInterval()
|
|
{
|
|
return config_DeepSleepInterval;
|
|
}
|
|
|
|
String getWakeupReason()
|
|
{
|
|
esp_sleep_wakeup_cause_t wakeup_reason;
|
|
wakeup_reason = esp_sleep_get_wakeup_cause();
|
|
|
|
//return String(wakeup_reason);
|
|
|
|
switch (wakeup_reason)
|
|
{
|
|
case 1:
|
|
return String("Wakeup caused by external signal using RTC_IO");
|
|
case 2:
|
|
return String("Wakeup caused by external signal using RTC_CNTL");
|
|
case 3:
|
|
return String("Wakeup caused by timer");
|
|
case 4:
|
|
return String("Wakeup caused by touchpad");
|
|
case 5:
|
|
return String("Wakeup caused by ULP program");
|
|
default:
|
|
return String("Wakeup was not caused by deep sleep: " + String(wakeup_reason));
|
|
}
|
|
|
|
return String("unkown");
|
|
} |