Skip to content

Commit 31e51fe

Browse files
committed
os: enter sleep mode after power-on reset
1 parent d35793c commit 31e51fe

File tree

5 files changed

+42
-24
lines changed

5 files changed

+42
-24
lines changed

main/inc/core/os.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
#include "freertos/event_groups.h"
1313

1414
typedef enum user_event_group_bits {
15-
OS_PWR_SLP_BIT = BIT0,
16-
OS_PWR_RST_BIT = BIT1,
15+
OS_PWR_SLEEP_BIT = BIT0,
16+
OS_PWR_RESET_BIT = BIT1,
1717

1818
BLE_GATTS_IDLE_BIT = BIT2,
1919
BLE_GATTS_LOCK_BIT = BIT3,
@@ -25,8 +25,8 @@ typedef enum user_event_group_bits {
2525

2626
extern EventGroupHandle_t user_event_group;
2727

28-
extern void os_pwr_slp_wait(EventBits_t bits);
29-
extern void os_pwr_rst_wait(EventBits_t bits);
28+
extern void os_pwr_sleep_wait(EventBits_t bits);
29+
extern void os_pwr_reset_wait(EventBits_t bits);
3030

3131
extern void os_init(void);
3232

main/src/core/os.c

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
EventGroupHandle_t user_event_group;
2121

2222
#if defined(CONFIG_ENABLE_SLP_KEY) || defined(CONFIG_ENABLE_BLE_IF)
23-
static EventBits_t slp_wait_bits = 0;
24-
static EventBits_t rst_wait_bits = 0;
23+
static EventBits_t sleep_wait_bits = 0;
24+
static EventBits_t reset_wait_bits = 0;
2525

2626
static void os_pwr_task_handle(void *pvParameters)
2727
{
@@ -30,22 +30,22 @@ static void os_pwr_task_handle(void *pvParameters)
3030
while (1) {
3131
xEventGroupWaitBits(
3232
user_event_group,
33-
OS_PWR_SLP_BIT | OS_PWR_RST_BIT,
33+
OS_PWR_SLEEP_BIT | OS_PWR_RESET_BIT,
3434
pdFALSE,
3535
pdFALSE,
3636
portMAX_DELAY
3737
);
3838

3939
EventBits_t uxBits = xEventGroupGetBits(user_event_group);
40-
if (uxBits & OS_PWR_SLP_BIT) {
40+
if (uxBits & OS_PWR_SLEEP_BIT) {
4141
for (int i=3; i>0; i--) {
4242
ESP_LOGW(OS_PWR_TAG, "sleeping in %ds", i);
4343
vTaskDelay(1000 / portTICK_RATE_MS);
4444
}
4545

4646
xEventGroupWaitBits(
4747
user_event_group,
48-
slp_wait_bits,
48+
sleep_wait_bits,
4949
pdFALSE,
5050
pdTRUE,
5151
portMAX_DELAY
@@ -67,36 +67,36 @@ static void os_pwr_task_handle(void *pvParameters)
6767

6868
ESP_LOGW(OS_PWR_TAG, "sleep now");
6969
esp_deep_sleep_start();
70-
} else if (uxBits & OS_PWR_RST_BIT) {
70+
} else if (uxBits & OS_PWR_RESET_BIT) {
7171
for (int i=3; i>0; i--) {
72-
ESP_LOGW(OS_PWR_TAG, "restarting in %ds", i);
72+
ESP_LOGW(OS_PWR_TAG, "resetting in %ds", i);
7373
vTaskDelay(1000 / portTICK_RATE_MS);
7474
}
7575

7676
xEventGroupWaitBits(
7777
user_event_group,
78-
rst_wait_bits,
78+
reset_wait_bits,
7979
pdFALSE,
8080
pdTRUE,
8181
portMAX_DELAY
8282
);
8383

84-
ESP_LOGW(OS_PWR_TAG, "restart now");
84+
ESP_LOGW(OS_PWR_TAG, "reset now");
8585
esp_restart();
8686
}
8787
}
8888
}
8989

90-
void os_pwr_slp_wait(EventBits_t bits)
90+
void os_pwr_sleep_wait(EventBits_t bits)
9191
{
9292
if (bits) {
93-
slp_wait_bits = bits;
94-
xEventGroupSetBits(user_event_group, OS_PWR_SLP_BIT);
93+
sleep_wait_bits = bits;
94+
xEventGroupSetBits(user_event_group, OS_PWR_SLEEP_BIT);
9595
} else {
9696
#ifdef CONFIG_ENABLE_SLP_KEY
9797
esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_ON);
9898
rtc_gpio_set_direction(CONFIG_SLP_KEY_PIN, RTC_GPIO_MODE_INPUT_ONLY);
99-
#ifdef CONFIG_ENABLE_SLP_KEY_LOW
99+
#ifdef CONFIG_SLP_KEY_ACTIVE_LOW
100100
rtc_gpio_pulldown_dis(CONFIG_SLP_KEY_PIN);
101101
rtc_gpio_pullup_en(CONFIG_SLP_KEY_PIN);
102102
esp_sleep_enable_ext1_wakeup(1ULL << CONFIG_SLP_KEY_PIN, ESP_EXT1_WAKEUP_ALL_LOW);
@@ -111,13 +111,13 @@ void os_pwr_slp_wait(EventBits_t bits)
111111
}
112112
}
113113

114-
void os_pwr_rst_wait(EventBits_t bits)
114+
void os_pwr_reset_wait(EventBits_t bits)
115115
{
116116
if (bits) {
117-
rst_wait_bits = bits;
118-
xEventGroupSetBits(user_event_group, OS_PWR_RST_BIT);
117+
reset_wait_bits = bits;
118+
xEventGroupSetBits(user_event_group, OS_PWR_RESET_BIT);
119119
} else {
120-
ESP_LOGW(OS_PWR_TAG, "restart now");
120+
ESP_LOGW(OS_PWR_TAG, "reset now");
121121
esp_restart();
122122
}
123123
}
@@ -127,6 +127,14 @@ void os_init(void)
127127
{
128128
user_event_group = xEventGroupCreate();
129129

130+
#ifdef CONFIG_ENABLE_SLP_KEY
131+
if (esp_sleep_get_wakeup_cause() != ESP_SLEEP_WAKEUP_UNDEFINED) {
132+
ESP_LOGW(OS_PWR_TAG, "resuming from sleep mode");
133+
} else {
134+
os_pwr_sleep_wait(0);
135+
}
136+
#endif
137+
130138
#if defined(CONFIG_ENABLE_SLP_KEY) || defined(CONFIG_ENABLE_BLE_IF)
131139
xTaskCreatePinnedToCore(os_pwr_task_handle, "osPwrT", 2048, NULL, 5, NULL, 0);
132140
#endif

main/src/user/ble_gatts.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ static void profile_ota_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t
154154
ota_end();
155155

156156
EventBits_t uxBits = xEventGroupGetBits(user_event_group);
157-
if (!(uxBits & OS_PWR_SLP_BIT) && !(uxBits & OS_PWR_RST_BIT)) {
157+
if (!(uxBits & OS_PWR_SLEEP_BIT) && !(uxBits & OS_PWR_RESET_BIT)) {
158158
esp_ble_gap_start_advertising(&adv_params);
159159
}
160160

main/src/user/key_handle.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,10 @@ void slp_key_handle(void)
4747
#endif
4848
fan_set_mode(0);
4949

50+
#ifdef CONFIG_ENABLE_QC
5051
dac_output_disable(DAC_CHANNEL_1);
5152
dac_output_disable(DAC_CHANNEL_2);
53+
#endif
5254

5355
#ifdef CONFIG_ENABLE_BLE_IF
5456
EventBits_t uxBits = xEventGroupGetBits(user_event_group);
@@ -58,6 +60,6 @@ void slp_key_handle(void)
5860
}
5961
#endif
6062

61-
os_pwr_slp_wait(BLE_GATTS_IDLE_BIT);
63+
os_pwr_sleep_wait(BLE_GATTS_IDLE_BIT);
6264
}
6365
#endif

main/src/user/ota.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
#include "freertos/ringbuf.h"
1616
#include "freertos/task.h"
1717

18+
#include "driver/dac.h"
19+
1820
#include "core/os.h"
1921
#include "core/app.h"
22+
2023
#include "user/fan.h"
2124
#include "user/gui.h"
2225
#include "user/led.h"
@@ -250,10 +253,15 @@ void ota_exec(const char *data, uint32_t len)
250253
fan_set_mode(0);
251254
}
252255

256+
#ifdef CONFIG_ENABLE_QC
257+
dac_output_disable(DAC_CHANNEL_1);
258+
dac_output_disable(DAC_CHANNEL_2);
259+
#endif
260+
253261
esp_ble_gatts_close(gatts_profile_tbl[PROFILE_IDX_OTA].gatts_if,
254262
gatts_profile_tbl[PROFILE_IDX_OTA].conn_id);
255263

256-
os_pwr_rst_wait(BLE_GATTS_IDLE_BIT);
264+
os_pwr_reset_wait(BLE_GATTS_IDLE_BIT);
257265

258266
update_handle = 0;
259267

0 commit comments

Comments
 (0)