From 8da1d78cb4b68d6bebac50892b9b8be1092b8654 Mon Sep 17 00:00:00 2001 From: devyte Date: Wed, 24 Jan 2018 17:14:57 -0300 Subject: [PATCH] Change argument to Esp.deepSleep from uint32 to uint64 to match SDK, add deepSleepMax based on the cali_proc function per SDK --- cores/esp8266/Esp.cpp | 11 ++++++++++- cores/esp8266/Esp.h | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cores/esp8266/Esp.cpp b/cores/esp8266/Esp.cpp index f4c0b2208..c8969691b 100644 --- a/cores/esp8266/Esp.cpp +++ b/cores/esp8266/Esp.cpp @@ -107,13 +107,22 @@ void EspClass::wdtFeed(void) extern "C" void esp_yield(); -void EspClass::deepSleep(uint32_t time_us, WakeMode mode) +void EspClass::deepSleep(uint64_t time_us, WakeMode mode) { system_deep_sleep_set_option(static_cast(mode)); system_deep_sleep(time_us); esp_yield(); } +//this calculation was taken verbatim from the SDK api reference for SDK 2.1.0. +//Note: system_rtc_clock_cali_proc() returns a uint32_t, even though system_deep_sleep() takes a uint64_t. +uint64_t EspClass::deepSleepMax() +{ + //cali*(2^31-1)/(2^12) + return (uint64_t)system_rtc_clock_cali_proc()*(0x80000000-1)/(0x1000); + +} + bool EspClass::rtcUserMemoryRead(uint32_t offset, uint32_t *data, size_t size) { if (size + offset > 512) { diff --git a/cores/esp8266/Esp.h b/cores/esp8266/Esp.h index e6754019d..e5d3a5f90 100644 --- a/cores/esp8266/Esp.h +++ b/cores/esp8266/Esp.h @@ -92,7 +92,8 @@ class EspClass { void wdtDisable(); void wdtFeed(); - void deepSleep(uint32_t time_us, RFMode mode = RF_DEFAULT); + void deepSleep(uint64_t time_us, RFMode mode = RF_DEFAULT); + uint64_t deepSleepMax(); bool rtcUserMemoryRead(uint32_t offset, uint32_t *data, size_t size); bool rtcUserMemoryWrite(uint32_t offset, uint32_t *data, size_t size);