Skip to content

Commit f8f4057

Browse files
committed
Add watchdog methods.
esp.wdt_start(<seconds>) esp.wdt_reset() esp.wdt_stop()
1 parent a5a2c62 commit f8f4057

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

esp32/modesp.c

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@
4949
#include "sdmmc_cmd.h"
5050
#endif
5151

52+
#include "freertos/FreeRTOS.h"
53+
#include "freertos/task.h"
54+
#include "esp_task_wdt.h"
55+
5256
/* esp.temperature_sens_read() */
5357
extern int temprature_sens_read();
5458
STATIC mp_obj_t esp_temperature_sens_read() {
@@ -64,6 +68,78 @@ STATIC mp_obj_t esp_hall_sens_read() {
6468
STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_hall_sens_read_obj, esp_hall_sens_read);
6569

6670

71+
/* esp.wdt_start(<secs>) */
72+
STATIC mp_obj_t esp_wdt_start(mp_obj_t timeout) {
73+
// reconfigure watchdog
74+
mp_int_t t = mp_obj_get_int(timeout);
75+
esp_err_t res = esp_task_wdt_init(t, true);
76+
if (res != ESP_OK) {
77+
if (res == ESP_ERR_NO_MEM)
78+
mp_raise_msg(&mp_type_MemoryError, "WDT: Out of memory");
79+
mp_raise_msg(&mp_type_NotImplementedError, "WDT: Unknown error");
80+
}
81+
82+
// add current task
83+
res = esp_task_wdt_add(NULL);
84+
if (res != ESP_OK) {
85+
if (res == ESP_ERR_INVALID_ARG)
86+
mp_raise_msg(&mp_type_AttributeError, "WDT: Task is already subscribed");
87+
if (res == ESP_ERR_NO_MEM)
88+
mp_raise_msg(&mp_type_MemoryError, "WDT: Out of memory");
89+
if (res == ESP_ERR_INVALID_STATE)
90+
mp_raise_msg(&mp_type_AttributeError, "WDT: Not initialized");
91+
mp_raise_msg(&mp_type_NotImplementedError, "WDT: Unknown error");
92+
}
93+
94+
return mp_const_none;
95+
}
96+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(esp_wdt_start_obj, esp_wdt_start);
97+
98+
/* esp.wdt_stop() */
99+
STATIC mp_obj_t esp_wdt_stop(void) {
100+
// remove current task
101+
esp_err_t res = esp_task_wdt_delete(NULL);
102+
if (res != ESP_OK) {
103+
if (res == ESP_ERR_INVALID_ARG)
104+
mp_raise_msg(&mp_type_AttributeError, "WDT: Task is already unsubscribed");
105+
if (res == ESP_ERR_INVALID_STATE)
106+
mp_raise_msg(&mp_type_AttributeError, "WDT: Not initialized");
107+
mp_raise_msg(&mp_type_NotImplementedError, "WDT: Unknown error");
108+
}
109+
110+
// reconfigure watchdog to startup-state.
111+
#ifdef CONFIG_TASK_WDT_PANIC
112+
res = esp_task_wdt_init(CONFIG_TASK_WDT_TIMEOUT_S, true);
113+
#elif CONFIG_TASK_WDT
114+
res = esp_task_wdt_init(CONFIG_TASK_WDT_TIMEOUT_S, false);
115+
#endif
116+
if (res != ESP_OK) {
117+
if (res == ESP_ERR_NO_MEM)
118+
mp_raise_msg(&mp_type_MemoryError, "WDT: Out of memory");
119+
mp_raise_msg(&mp_type_NotImplementedError, "WDT: Unknown error");
120+
}
121+
122+
return mp_const_none;
123+
}
124+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_wdt_stop_obj, esp_wdt_stop);
125+
126+
/* esp.wdt_reset() */
127+
STATIC mp_obj_t esp_wdt_reset(void) {
128+
esp_err_t res = esp_task_wdt_reset();
129+
if (res != ESP_OK) {
130+
if (res == ESP_ERR_NOT_FOUND)
131+
mp_raise_msg(&mp_type_AttributeError, "WDT: Task is not subscribed");
132+
if (res == ESP_ERR_INVALID_STATE)
133+
mp_raise_msg(&mp_type_AttributeError, "WDT: Not initialized");
134+
mp_raise_msg(&mp_type_NotImplementedError, "WDT: Unknown error");
135+
}
136+
137+
return mp_const_none;
138+
}
139+
STATIC MP_DEFINE_CONST_FUN_OBJ_0(esp_wdt_reset_obj, esp_wdt_reset);
140+
141+
142+
/* flash */
67143
STATIC wl_handle_t fs_handle = WL_INVALID_HANDLE;
68144
STATIC size_t wl_sect_size = 4096;
69145

@@ -379,6 +455,10 @@ STATIC const mp_rom_map_elem_t esp_module_globals_table[] = {
379455
{ MP_ROM_QSTR(MP_QSTR_temperature_sens_read), MP_ROM_PTR(&esp_temperature_sens_read_obj) },
380456
{ MP_ROM_QSTR(MP_QSTR_hall_sens_read), MP_ROM_PTR(&esp_hall_sens_read_obj) },
381457

458+
{ MP_ROM_QSTR(MP_QSTR_wdt_start), MP_ROM_PTR(&esp_wdt_start_obj) },
459+
{ MP_ROM_QSTR(MP_QSTR_wdt_stop), MP_ROM_PTR(&esp_wdt_stop_obj) },
460+
{ MP_ROM_QSTR(MP_QSTR_wdt_reset), MP_ROM_PTR(&esp_wdt_reset_obj) },
461+
382462
{ MP_ROM_QSTR(MP_QSTR_flash_read), MP_ROM_PTR(&esp_flash_read_obj) },
383463
{ MP_ROM_QSTR(MP_QSTR_flash_write), MP_ROM_PTR(&esp_flash_write_obj) },
384464
{ MP_ROM_QSTR(MP_QSTR_flash_erase), MP_ROM_PTR(&esp_flash_erase_obj) },

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy