WIP: trying deep sleep
This commit is contained in:
parent
aaa2c6dac4
commit
377dd3c4e6
8 changed files with 177 additions and 29 deletions
|
@ -4,23 +4,30 @@
|
|||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
#include "pico/sleep.h"
|
||||
#include "pico/stdlib.h"
|
||||
// #include "stdlib.h"
|
||||
#include "hardware/clocks.h"
|
||||
#include "hardware/rosc.h"
|
||||
#include "hardware/structs/scb.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
bool isDST(int8_t day, int8_t month, int8_t dow) {
|
||||
bool isDST(const datetime_t &dt) {
|
||||
// January, february, november and december are out.
|
||||
if (month < 3 || month > 10) {
|
||||
if (dt.month < 3 || dt.month > 10) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// April to September are in
|
||||
if (month > 3 && month < 10) {
|
||||
if (dt.month > 3 && dt.month < 10) {
|
||||
return true;
|
||||
}
|
||||
|
||||
int previousSunday = day - dow;
|
||||
int previousSunday = dt.day - dt.dotw;
|
||||
|
||||
// In march, we are DST if our previous sunday was on or after the 25th.
|
||||
if (month == 3) {
|
||||
if (dt.month == 3) {
|
||||
return previousSunday >= 25;
|
||||
}
|
||||
|
||||
|
@ -186,4 +193,57 @@ void wifi_disable() {
|
|||
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0);
|
||||
cyw43_wifi_leave(&cyw43_state, CYW43_ITF_STA);
|
||||
cyw43_arch_deinit();
|
||||
}
|
||||
}
|
||||
|
||||
void recover_from_sleep(uint scb_orig, uint clock0_orig, uint clock1_orig) {
|
||||
|
||||
// Re-enable ring Oscillator control
|
||||
rosc_write(&rosc_hw->ctrl, ROSC_CTRL_ENABLE_BITS);
|
||||
|
||||
// reset procs back to default
|
||||
scb_hw->scr = scb_orig;
|
||||
clocks_hw->sleep_en0 = clock0_orig;
|
||||
clocks_hw->sleep_en1 = clock1_orig;
|
||||
|
||||
// reset clocks
|
||||
clocks_init();
|
||||
stdio_init_all();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void perform_sleep(datetime_t &untilDt) {
|
||||
printf("Going to sleep...\n");
|
||||
uart_default_tx_wait_blocking();
|
||||
|
||||
sleep_goto_sleep_until(&untilDt, nullptr);
|
||||
}
|
||||
|
||||
void add_one_day(datetime_t &dt) {
|
||||
int daysPerMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
||||
|
||||
// Is it a leap year?
|
||||
if ((dt.year % 4 == 0 && dt.year % 100 != 0) || dt.year % 400 == 0) {
|
||||
daysPerMonth[2] = 29;
|
||||
}
|
||||
|
||||
if (dt.month == 12 && dt.day == daysPerMonth[12]) {
|
||||
dt.year += 1;
|
||||
dt.month = 1;
|
||||
dt.day = 1;
|
||||
} else if (dt.day == daysPerMonth[dt.month]) {
|
||||
dt.month = (dt.month + 1) % 12;
|
||||
dt.day = 1;
|
||||
} else {
|
||||
dt.day += 1;
|
||||
}
|
||||
}
|
||||
|
||||
void add_one_hour(datetime_t &dt) {
|
||||
if (dt.hour == 23) {
|
||||
add_one_day(dt);
|
||||
dt.hour = 0;
|
||||
} else {
|
||||
dt.hour += 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue