49
49
#include "sdmmc_cmd.h"
50
50
#endif
51
51
52
+ #include "freertos/FreeRTOS.h"
53
+ #include "freertos/task.h"
54
+ #include "esp_task_wdt.h"
55
+
52
56
/* esp.temperature_sens_read() */
53
57
extern int temprature_sens_read ();
54
58
STATIC mp_obj_t esp_temperature_sens_read () {
@@ -64,6 +68,78 @@ STATIC mp_obj_t esp_hall_sens_read() {
64
68
STATIC MP_DEFINE_CONST_FUN_OBJ_0 (esp_hall_sens_read_obj , esp_hall_sens_read );
65
69
66
70
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 */
67
143
STATIC wl_handle_t fs_handle = WL_INVALID_HANDLE ;
68
144
STATIC size_t wl_sect_size = 4096 ;
69
145
@@ -379,6 +455,10 @@ STATIC const mp_rom_map_elem_t esp_module_globals_table[] = {
379
455
{ MP_ROM_QSTR (MP_QSTR_temperature_sens_read ), MP_ROM_PTR (& esp_temperature_sens_read_obj ) },
380
456
{ MP_ROM_QSTR (MP_QSTR_hall_sens_read ), MP_ROM_PTR (& esp_hall_sens_read_obj ) },
381
457
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
+
382
462
{ MP_ROM_QSTR (MP_QSTR_flash_read ), MP_ROM_PTR (& esp_flash_read_obj ) },
383
463
{ MP_ROM_QSTR (MP_QSTR_flash_write ), MP_ROM_PTR (& esp_flash_write_obj ) },
384
464
{ MP_ROM_QSTR (MP_QSTR_flash_erase ), MP_ROM_PTR (& esp_flash_erase_obj ) },
0 commit comments