summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/esp32/machine_wdt.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/ports/esp32/machine_wdt.c b/ports/esp32/machine_wdt.c
index 2cb6c5181..bf924c35e 100644
--- a/ports/esp32/machine_wdt.c
+++ b/ports/esp32/machine_wdt.c
@@ -37,9 +37,12 @@ const mp_obj_type_t machine_wdt_type;
typedef struct _machine_wdt_obj_t {
mp_obj_base_t base;
+ esp_task_wdt_user_handle_t twdt_user_handle;
} machine_wdt_obj_t;
-STATIC machine_wdt_obj_t wdt_default = {{&machine_wdt_type}};
+STATIC machine_wdt_obj_t wdt_default = {
+ {&machine_wdt_type}, 0
+};
STATIC mp_obj_t machine_wdt_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
enum { ARG_id, ARG_timeout };
@@ -68,14 +71,22 @@ STATIC mp_obj_t machine_wdt_make_new(const mp_obj_type_t *type_in, size_t n_args
mp_raise_OSError(rs_code);
}
- esp_task_wdt_add(NULL);
+ if (wdt_default.twdt_user_handle == NULL) {
+ rs_code = esp_task_wdt_add_user("mpy_machine_wdt", &wdt_default.twdt_user_handle);
+ if (rs_code != ESP_OK) {
+ mp_raise_OSError(rs_code);
+ }
+ }
return &wdt_default;
}
STATIC mp_obj_t machine_wdt_feed(mp_obj_t self_in) {
(void)self_in;
- esp_task_wdt_reset();
+ mp_int_t rs_code = esp_task_wdt_reset_user(wdt_default.twdt_user_handle);
+ if (rs_code != ESP_OK) {
+ mp_raise_OSError(rs_code);
+ }
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(machine_wdt_feed_obj, machine_wdt_feed);