summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormicroDev <70126934+microDev1@users.noreply.github.com>2020-09-19 17:48:36 +0530
committerScott Shawcroft <scott@tannewt.org>2020-10-27 16:13:25 -0700
commite310b871c8eb8cf924e6937edc7cd51a2be1a6b7 (patch)
tree9e8d7054d263e004bfdb43bed3945fb9bb6c6165
parent3a30887b444c6c17f116abd85308251486c9dfe9 (diff)
Get io wake working
-rwxr-xr-xmain.c2
-rw-r--r--ports/esp32s2/common-hal/io_alarm/__init__.c27
-rw-r--r--ports/esp32s2/common-hal/time_alarm/__init__.c (renamed from ports/esp32s2/common-hal/timealarm/__init__.c)4
-rw-r--r--ports/esp32s2/mpconfigport.mk3
-rw-r--r--py/circuitpy_defns.mk10
-rw-r--r--py/circuitpy_mpconfig.h18
-rw-r--r--py/circuitpy_mpconfig.mk7
-rw-r--r--shared-bindings/io_alarm/__init__.c34
-rw-r--r--shared-bindings/io_alarm/__init__.h8
-rw-r--r--shared-bindings/time_alarm/__init__.c31
-rw-r--r--shared-bindings/time_alarm/__init__.h8
-rw-r--r--shared-bindings/timealarm/__init__.c31
-rw-r--r--shared-bindings/timealarm/__init__.h8
13 files changed, 138 insertions, 53 deletions
diff --git a/main.c b/main.c
index ebce8cd40..5a30f4bb2 100755
--- a/main.c
+++ b/main.c
@@ -509,7 +509,7 @@ int __attribute__((used)) main(void) {
}
if (exit_code == PYEXEC_FORCED_EXIT) {
if (!first_run) {
- serial_write_compressed(translate("\n\n ----- soft reboot -----\n"));
+ serial_write_compressed(translate("\n\n------ soft reboot ------\n"));
}
first_run = false;
skip_repl = run_code_py(safe_mode);
diff --git a/ports/esp32s2/common-hal/io_alarm/__init__.c b/ports/esp32s2/common-hal/io_alarm/__init__.c
new file mode 100644
index 000000000..d88c147fe
--- /dev/null
+++ b/ports/esp32s2/common-hal/io_alarm/__init__.c
@@ -0,0 +1,27 @@
+#include "shared-bindings/io_alarm/__init__.h"
+
+#include "esp_sleep.h"
+#include "driver/rtc_io.h"
+
+void common_hal_io_alarm_pin_state (uint8_t gpio, uint8_t level, bool pull) {
+ if (!rtc_gpio_is_valid_gpio(gpio)) {
+ mp_raise_ValueError(translate("io must be rtc io"));
+ return;
+ }
+
+ switch(esp_sleep_enable_ext0_wakeup(gpio, level)) {
+ case ESP_ERR_INVALID_ARG:
+ mp_raise_ValueError(translate("trigger level must be 0 or 1"));
+ return;
+ case ESP_ERR_INVALID_STATE:
+ mp_raise_RuntimeError(translate("wakeup conflict"));
+ return;
+ default:
+ break;
+ }
+
+ if (pull) {
+ (level) ? rtc_gpio_pulldown_en(gpio) : rtc_gpio_pullup_en(gpio);
+ }
+}
+
diff --git a/ports/esp32s2/common-hal/timealarm/__init__.c b/ports/esp32s2/common-hal/time_alarm/__init__.c
index e404f801a..342ca9d15 100644
--- a/ports/esp32s2/common-hal/timealarm/__init__.c
+++ b/ports/esp32s2/common-hal/time_alarm/__init__.c
@@ -1,8 +1,8 @@
#include "esp_sleep.h"
-#include "shared-bindings/timealarm/__init__.h"
+#include "shared-bindings/time_alarm/__init__.h"
-void common_hal_timealarm_duration (uint32_t ms) {
+void common_hal_time_alarm_duration (uint32_t ms) {
if (esp_sleep_enable_timer_wakeup((ms) * 1000) == ESP_ERR_INVALID_ARG) {
mp_raise_ValueError(translate("time out of range"));
}
diff --git a/ports/esp32s2/mpconfigport.mk b/ports/esp32s2/mpconfigport.mk
index 125d078e8..0f8f3ada5 100644
--- a/ports/esp32s2/mpconfigport.mk
+++ b/ports/esp32s2/mpconfigport.mk
@@ -22,7 +22,8 @@ CIRCUITPY_FREQUENCYIO = 0
CIRCUITPY_I2CPERIPHERAL = 0
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_NVM = 0
-CIRCUITPY_TIMEALARM = 1
+CIRCUITPY_TIME_ALARM = 1
+CIRCUITPY_IO_ALARM = 1
# We don't have enough endpoints to include MIDI.
CIRCUITPY_USB_MIDI = 0
CIRCUITPY_WIFI = 1
diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk
index 91af6ffc1..672eeda40 100644
--- a/py/circuitpy_defns.mk
+++ b/py/circuitpy_defns.mk
@@ -259,8 +259,11 @@ endif
ifeq ($(CIRCUITPY_TIME),1)
SRC_PATTERNS += time/%
endif
-ifeq ($(CIRCUITPY_TIMEALARM),1)
-SRC_PATTERNS += timealarm/%
+ifeq ($(CIRCUITPY_TIME_ALARM),1)
+SRC_PATTERNS += time_alarm/%
+endif
+ifeq ($(CIRCUITPY_IO_ALARM),1)
+SRC_PATTERNS += io_alarm/%
endif
ifeq ($(CIRCUITPY_TOUCHIO),1)
SRC_PATTERNS += touchio/%
@@ -363,7 +366,8 @@ SRC_COMMON_HAL_ALL = \
ssl/SSLContext.c \
supervisor/Runtime.c \
supervisor/__init__.c \
- timealarm/__init__.c \
+ time_alarm/__init__.c \
+ io_alarm/__init__.c \
watchdog/WatchDogMode.c \
watchdog/WatchDogTimer.c \
watchdog/__init__.c \
diff --git a/py/circuitpy_mpconfig.h b/py/circuitpy_mpconfig.h
index 8efd43921..d899ecacb 100644
--- a/py/circuitpy_mpconfig.h
+++ b/py/circuitpy_mpconfig.h
@@ -663,11 +663,18 @@ extern const struct _mp_obj_module_t time_module;
#define TIME_MODULE_ALT_NAME
#endif
-#if CIRCUITPY_TIMEALARM
-extern const struct _mp_obj_module_t timealarm_module;
-#define TIMEALARM_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_timealarm), (mp_obj_t)&timealarm_module },
+#if CIRCUITPY_TIME_ALARM
+extern const struct _mp_obj_module_t time_alarm_module;
+#define TIME_ALARM_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_time_alarm), (mp_obj_t)&time_alarm_module },
#else
-#define TIMEALARM_MODULE
+#define TIME_ALARM_MODULE
+#endif
+
+#if CIRCUITPY_IO_ALARM
+extern const struct _mp_obj_module_t io_alarm_module;
+#define IO_ALARM_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_io_alarm), (mp_obj_t)&io_alarm_module },
+#else
+#define IO_ALARM_MODULE
#endif
#if CIRCUITPY_TOUCHIO
@@ -828,7 +835,8 @@ extern const struct _mp_obj_module_t wifi_module;
STRUCT_MODULE \
SUPERVISOR_MODULE \
TOUCHIO_MODULE \
- TIMEALARM_MODULE \
+ TIME_ALARM_MODULE \
+ IO_ALARM_MODULE \
UHEAP_MODULE \
USB_HID_MODULE \
USB_MIDI_MODULE \
diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk
index bb70daccc..4cce2a0a1 100644
--- a/py/circuitpy_mpconfig.mk
+++ b/py/circuitpy_mpconfig.mk
@@ -234,8 +234,11 @@ CFLAGS += -DCIRCUITPY_TERMINALIO=$(CIRCUITPY_TERMINALIO)
CIRCUITPY_TIME ?= 1
CFLAGS += -DCIRCUITPY_TIME=$(CIRCUITPY_TIME)
-CIRCUITPY_TIMEALARM ?= 0
-CFLAGS += -DCIRCUITPY_TIMEALARM=$(CIRCUITPY_TIMEALARM)
+CIRCUITPY_TIME_ALARM ?= 0
+CFLAGS += -DCIRCUITPY_TIME_ALARM=$(CIRCUITPY_TIME_ALARM)
+
+CIRCUITPY_IO_ALARM ?= 0
+CFLAGS += -DCIRCUITPY_IO_ALARM=$(CIRCUITPY_IO_ALARM)
# touchio might be native or generic. See circuitpy_defns.mk.
CIRCUITPY_TOUCHIO_USE_NATIVE ?= 0
diff --git a/shared-bindings/io_alarm/__init__.c b/shared-bindings/io_alarm/__init__.c
new file mode 100644
index 000000000..534b7e66f
--- /dev/null
+++ b/shared-bindings/io_alarm/__init__.c
@@ -0,0 +1,34 @@
+#include "py/obj.h"
+
+#include "shared-bindings/io_alarm/__init__.h"
+#include "shared-bindings/microcontroller/Pin.h"
+
+//| Set Timer Wakeup
+//|
+STATIC mp_obj_t io_alarm_pin_state(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
+ enum { ARG_level, ARG_pull };
+ static const mp_arg_t allowed_args[] = {
+ { MP_QSTR_level, MP_ARG_INT | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
+ { MP_QSTR_pull, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_bool = false} },
+ };
+
+ mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
+ mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
+
+ mcu_pin_obj_t *pin = validate_obj_is_pin(pos_args[0]);
+ common_hal_io_alarm_pin_state(pin->number, args[ARG_level].u_int, args[ARG_pull].u_bool);
+
+ return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_KW(io_alarm_pin_state_obj, 1, io_alarm_pin_state);
+
+STATIC const mp_rom_map_elem_t io_alarm_module_globals_table[] = {
+ { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_io_alarm) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_PinState), MP_ROM_PTR(&io_alarm_pin_state_obj) },
+};
+STATIC MP_DEFINE_CONST_DICT(io_alarm_module_globals, io_alarm_module_globals_table);
+
+const mp_obj_module_t io_alarm_module = {
+ .base = { &mp_type_module },
+ .globals = (mp_obj_dict_t*)&io_alarm_module_globals,
+};
diff --git a/shared-bindings/io_alarm/__init__.h b/shared-bindings/io_alarm/__init__.h
new file mode 100644
index 000000000..dd4b88165
--- /dev/null
+++ b/shared-bindings/io_alarm/__init__.h
@@ -0,0 +1,8 @@
+#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_IO_ALARM___INIT___H
+#define MICROPY_INCLUDED_SHARED_BINDINGS_IO_ALARM___INIT___H
+
+#include "py/runtime.h"
+
+extern void common_hal_io_alarm_pin_state(uint8_t gpio, uint8_t level, bool pull);
+
+#endif //MICROPY_INCLUDED_SHARED_BINDINGS_IO_ALARM___INIT___H
diff --git a/shared-bindings/time_alarm/__init__.c b/shared-bindings/time_alarm/__init__.c
new file mode 100644
index 000000000..bfbece83c
--- /dev/null
+++ b/shared-bindings/time_alarm/__init__.c
@@ -0,0 +1,31 @@
+#include "py/obj.h"
+#include "shared-bindings/time_alarm/__init__.h"
+
+//| Set Timer Wakeup
+//|
+STATIC mp_obj_t time_alarm_duration(mp_obj_t seconds_o) {
+ #if MICROPY_PY_BUILTINS_FLOAT
+ mp_float_t seconds = mp_obj_get_float(seconds_o);
+ mp_float_t msecs = 1000.0f * seconds + 0.5f;
+ #else
+ mp_int_t seconds = mp_obj_get_int(seconds_o);
+ mp_int_t msecs = 1000 * seconds;
+ #endif
+ if (seconds < 0) {
+ mp_raise_ValueError(translate("sleep length must be non-negative"));
+ }
+ common_hal_time_alarm_duration(msecs);
+ return mp_const_none;
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_1(time_alarm_duration_obj, time_alarm_duration);
+
+STATIC const mp_rom_map_elem_t time_alarm_module_globals_table[] = {
+ { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_time_alarm) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_Duration), MP_ROM_PTR(&time_alarm_duration_obj) },
+};
+STATIC MP_DEFINE_CONST_DICT(time_alarm_module_globals, time_alarm_module_globals_table);
+
+const mp_obj_module_t time_alarm_module = {
+ .base = { &mp_type_module },
+ .globals = (mp_obj_dict_t*)&time_alarm_module_globals,
+};
diff --git a/shared-bindings/time_alarm/__init__.h b/shared-bindings/time_alarm/__init__.h
new file mode 100644
index 000000000..0913f7fde
--- /dev/null
+++ b/shared-bindings/time_alarm/__init__.h
@@ -0,0 +1,8 @@
+#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_TIME_ALARM___INIT___H
+#define MICROPY_INCLUDED_SHARED_BINDINGS_TIME_ALARM___INIT___H
+
+#include "py/runtime.h"
+
+extern void common_hal_time_alarm_duration(uint32_t);
+
+#endif //MICROPY_INCLUDED_SHARED_BINDINGS_TIME_ALARM___INIT___H
diff --git a/shared-bindings/timealarm/__init__.c b/shared-bindings/timealarm/__init__.c
deleted file mode 100644
index 19fb4f093..000000000
--- a/shared-bindings/timealarm/__init__.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "py/obj.h"
-#include "shared-bindings/timealarm/__init__.h"
-
-//| Set Timer Wakeup
-//|
-STATIC mp_obj_t timealarm_duration(mp_obj_t seconds_o) {
- #if MICROPY_PY_BUILTINS_FLOAT
- mp_float_t seconds = mp_obj_get_float(seconds_o);
- mp_float_t msecs = 1000.0f * seconds + 0.5f;
- #else
- mp_int_t seconds = mp_obj_get_int(seconds_o);
- mp_int_t msecs = 1000 * seconds;
- #endif
- if (seconds < 0) {
- mp_raise_ValueError(translate("sleep length must be non-negative"));
- }
- common_hal_timealarm_duration(msecs);
- return mp_const_none;
-}
-STATIC MP_DEFINE_CONST_FUN_OBJ_1(timealarm_duration_obj, timealarm_duration);
-
-STATIC const mp_rom_map_elem_t timealarm_module_globals_table[] = {
- { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_timealarm) },
- { MP_OBJ_NEW_QSTR(MP_QSTR_duration), MP_ROM_PTR(&timealarm_duration_obj) },
-};
-STATIC MP_DEFINE_CONST_DICT(timealarm_module_globals, timealarm_module_globals_table);
-
-const mp_obj_module_t timealarm_module = {
- .base = { &mp_type_module },
- .globals = (mp_obj_dict_t*)&timealarm_module_globals,
-};
diff --git a/shared-bindings/timealarm/__init__.h b/shared-bindings/timealarm/__init__.h
deleted file mode 100644
index b70cbda1f..000000000
--- a/shared-bindings/timealarm/__init__.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_ulp___INIT___H
-#define MICROPY_INCLUDED_SHARED_BINDINGS_ulp___INIT___H
-
-#include "py/runtime.h"
-
-extern void common_hal_timealarm_duration(uint32_t);
-
-#endif \ No newline at end of file