summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2017-11-16 15:05:35 -0500
committerGitHub <noreply@github.com>2017-11-16 15:05:35 -0500
commitea4b08de20c4b677b04eb94322ece5d3af31703b (patch)
tree1aee859743a8861f0fe4a18e92024b2fa86bd97d
parent2d34450872d40cf308981ffda6b1736528b1fba7 (diff)
parent99153569f41e7c40a69ec64c25f3eb278c68c51e (diff)
Merge pull request #441 from tannewt/samd_reenable
Create supervisor module.
-rw-r--r--main.c8
-rw-r--r--ports/atmel-samd/Makefile2
-rw-r--r--ports/atmel-samd/mpconfigport.h4
-rw-r--r--shared-bindings/index.rst1
-rw-r--r--shared-bindings/supervisor/__init__.c (renamed from ports/atmel-samd/bindings/samd/__init__.c)36
-rw-r--r--supervisor/shared/autoreload.c12
-rw-r--r--supervisor/shared/autoreload.h4
-rw-r--r--tests/basics/class_reverse_op.py3
-rw-r--r--tests/circuitpython/nvm_present.py2
-rw-r--r--tests/skip_if.py13
10 files changed, 57 insertions, 28 deletions
diff --git a/main.c b/main.c
index 5f73713cb..7ed93ddf5 100644
--- a/main.c
+++ b/main.c
@@ -290,18 +290,14 @@ int __attribute__((used)) main(void) {
bool first_run = true;
for (;;) {
if (!skip_repl) {
- // The REPL mode can change, or it can request a reload.
- bool autoreload_on = autoreload_is_enabled();
- autoreload_disable();
+ autoreload_suspend();
new_status_color(REPL_RUNNING);
if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
exit_code = pyexec_raw_repl();
} else {
exit_code = pyexec_friendly_repl();
}
- if (autoreload_on) {
- autoreload_enable();
- }
+ autoreload_resume();
reset_port();
reset_board();
reset_mp();
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index ccf029a7f..916bc559f 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -221,7 +221,6 @@ SRC_C = \
tick.c \
usb.c \
usb_mass_storage.c \
- bindings/samd/__init__.c \
boards/$(BOARD)/board.c \
boards/$(BOARD)/pins.c \
lib/oofatfs/ff.c \
@@ -314,6 +313,7 @@ SRC_BINDINGS_ENUMS = \
digitalio/Pull.c \
help.c \
math/__init__.c \
+ supervisor/__init__.c \
util.c
SRC_COMMON_HAL_EXPANDED = $(addprefix shared-bindings/, $(SRC_COMMON_HAL)) \
diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h
index 0728a643b..1db2d5a67 100644
--- a/ports/atmel-samd/mpconfigport.h
+++ b/ports/atmel-samd/mpconfigport.h
@@ -168,7 +168,7 @@ extern const struct _mp_obj_module_t cpy_nvm_module;
extern const struct _mp_obj_module_t neopixel_write_module;
extern const struct _mp_obj_module_t uheap_module;
extern const struct _mp_obj_module_t ustack_module;
-extern const struct _mp_obj_module_t samd_module;
+extern const struct _mp_obj_module_t supervisor_module;
extern const struct _mp_obj_module_t gamepad_module;
extern const struct _mp_obj_module_t touchio_module;
extern const struct _mp_obj_module_t usb_hid_module;
@@ -216,7 +216,6 @@ extern const struct _mp_obj_module_t usb_hid_module;
// { MP_OBJ_NEW_QSTR(MP_QSTR_gamepad),(mp_obj_t)&gamepad_module },
// { MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid),(mp_obj_t)&usb_hid_module },
// { MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module },
-// { MP_OBJ_NEW_QSTR(MP_QSTR_samd),(mp_obj_t)&samd_module },
#define MICROPY_PORT_BUILTIN_MODULES \
@@ -228,6 +227,7 @@ extern const struct _mp_obj_module_t usb_hid_module;
{ MP_OBJ_NEW_QSTR(MP_QSTR_os), (mp_obj_t)&os_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_struct), (mp_obj_t)&struct_module }, \
+ { MP_OBJ_NEW_QSTR(MP_QSTR_supervisor), (mp_obj_t)&supervisor_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_math), (mp_obj_t)&math_module }, \
{ MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_module },
EXTRA_BUILTIN_MODULES
diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst
index 229ae38d4..6dced5026 100644
--- a/shared-bindings/index.rst
+++ b/shared-bindings/index.rst
@@ -32,6 +32,7 @@ Module / Port SAMD21 SAMD21 Express ESP8266
`random` **Yes** **Yes** **Yes**
`storage` **Yes** **Yes** **Yes**
`struct` **Yes** **Yes** **Yes**
+`supervisor` **Yes** **Yes** No
`time` **Yes** **Yes** **Yes**
`touchio` **Yes** **Yes** No
`uheap` Debug Debug Debug
diff --git a/ports/atmel-samd/bindings/samd/__init__.c b/shared-bindings/supervisor/__init__.c
index d2bc0e0c0..cbb138beb 100644
--- a/ports/atmel-samd/bindings/samd/__init__.c
+++ b/shared-bindings/supervisor/__init__.c
@@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2016 Scott Shawcroft for Adafruit Industries
+ * Copyright (c) 2016-2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -28,11 +28,11 @@
#include "supervisor/shared/autoreload.h"
#include "supervisor/shared/rgb_led_status.h"
-//| :mod:`samd` --- SAMD implementation settings
+//| :mod:`supervisor` --- Supervisor settings
//| =================================================
//|
-//| .. module:: samd
-//| :synopsis: SAMD implementation settings
+//| .. module:: supervisor
+//| :synopsis: Supervisor settings
//| :platform: SAMD21
//|
@@ -40,29 +40,29 @@
//|
//| Enable autoreload based on USB file write activity.
//|
-STATIC mp_obj_t samd_enable_autoreload(void) {
+STATIC mp_obj_t supervisor_enable_autoreload(void) {
autoreload_enable();
return mp_const_none;
}
-MP_DEFINE_CONST_FUN_OBJ_0(samd_enable_autoreload_obj, samd_enable_autoreload);
+MP_DEFINE_CONST_FUN_OBJ_0(supervisor_enable_autoreload_obj, supervisor_enable_autoreload);
//| .. method:: disable_autoreload()
//|
//| Disable autoreload based on USB file write activity until
//| `enable_autoreload` is called.
//|
-STATIC mp_obj_t samd_disable_autoreload(void) {
+STATIC mp_obj_t supervisor_disable_autoreload(void) {
autoreload_disable();
return mp_const_none;
}
-MP_DEFINE_CONST_FUN_OBJ_0(samd_disable_autoreload_obj, samd_disable_autoreload);
+MP_DEFINE_CONST_FUN_OBJ_0(supervisor_disable_autoreload_obj, supervisor_disable_autoreload);
//| .. method:: set_rgb_status_brightness()
//|
//| Set brightness of status neopixel from 0-255
//| `set_rgb_status_brightness` is called.
//|
-STATIC mp_obj_t samd_set_rgb_status_brightness(mp_obj_t lvl){
+STATIC mp_obj_t supervisor_set_rgb_status_brightness(mp_obj_t lvl){
// This must be int. If cast to uint8_t first, will never raise a ValueError.
int brightness_int = mp_obj_get_int(lvl);
if(brightness_int < 0 || brightness_int > 255){
@@ -71,18 +71,18 @@ STATIC mp_obj_t samd_set_rgb_status_brightness(mp_obj_t lvl){
set_rgb_status_brightness((uint8_t)brightness_int);
return mp_const_none;
}
-MP_DEFINE_CONST_FUN_OBJ_1(samd_set_rgb_status_brightness_obj, samd_set_rgb_status_brightness);
+MP_DEFINE_CONST_FUN_OBJ_1(supervisor_set_rgb_status_brightness_obj, supervisor_set_rgb_status_brightness);
-STATIC const mp_rom_map_elem_t samd_module_globals_table[] = {
- { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_samd) },
- { MP_OBJ_NEW_QSTR(MP_QSTR_enable_autoreload), MP_ROM_PTR(&samd_enable_autoreload_obj)},
- { MP_OBJ_NEW_QSTR(MP_QSTR_disable_autoreload), MP_ROM_PTR(&samd_disable_autoreload_obj)},
- { MP_OBJ_NEW_QSTR(MP_QSTR_set_rgb_status_brightness), MP_ROM_PTR(&samd_set_rgb_status_brightness_obj)},
+STATIC const mp_rom_map_elem_t supervisor_module_globals_table[] = {
+ { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_supervisor) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_enable_autoreload), MP_ROM_PTR(&supervisor_enable_autoreload_obj)},
+ { MP_OBJ_NEW_QSTR(MP_QSTR_disable_autoreload), MP_ROM_PTR(&supervisor_disable_autoreload_obj)},
+ { MP_OBJ_NEW_QSTR(MP_QSTR_set_rgb_status_brightness), MP_ROM_PTR(&supervisor_set_rgb_status_brightness_obj)},
};
-STATIC MP_DEFINE_CONST_DICT(samd_module_globals, samd_module_globals_table);
+STATIC MP_DEFINE_CONST_DICT(supervisor_module_globals, supervisor_module_globals_table);
-const mp_obj_module_t samd_module = {
+const mp_obj_module_t supervisor_module = {
.base = { &mp_type_module },
- .globals = (mp_obj_dict_t*)&samd_module_globals,
+ .globals = (mp_obj_dict_t*)&supervisor_module_globals,
};
diff --git a/supervisor/shared/autoreload.c b/supervisor/shared/autoreload.c
index b1d0f05a9..39c33c05e 100644
--- a/supervisor/shared/autoreload.c
+++ b/supervisor/shared/autoreload.c
@@ -31,13 +31,15 @@
volatile uint32_t autoreload_delay_ms = 0;
bool autoreload_enabled = false;
+static bool autoreload_suspended = false;
volatile bool reload_next_character = false;
inline void autoreload_tick() {
if (autoreload_delay_ms == 0) {
return;
}
- if (autoreload_delay_ms == 1 && autoreload_enabled && !reload_next_character) {
+ if (autoreload_delay_ms == 1 && autoreload_enabled &&
+ !autoreload_suspended && !reload_next_character) {
mp_keyboard_interrupt();
reload_next_character = true;
}
@@ -53,6 +55,14 @@ void autoreload_disable() {
autoreload_enabled = false;
}
+void autoreload_suspend() {
+ autoreload_suspended = true;
+}
+
+void autoreload_resume() {
+ autoreload_suspended = false;
+}
+
inline bool autoreload_is_enabled() {
return autoreload_enabled;
}
diff --git a/supervisor/shared/autoreload.h b/supervisor/shared/autoreload.h
index bc3c6d21d..62f9fe073 100644
--- a/supervisor/shared/autoreload.h
+++ b/supervisor/shared/autoreload.h
@@ -39,4 +39,8 @@ void autoreload_enable(void);
void autoreload_disable(void);
bool autoreload_is_enabled(void);
+// Temporarily turn it off. Used during the REPL.
+void autoreload_suspend(void);
+void autoreload_resume(void);
+
#endif // MICROPY_INCLUDED_SUPERVISOR_AUTORELOAD_H
diff --git a/tests/basics/class_reverse_op.py b/tests/basics/class_reverse_op.py
index d41c55c9d..1a047e448 100644
--- a/tests/basics/class_reverse_op.py
+++ b/tests/basics/class_reverse_op.py
@@ -1,3 +1,6 @@
+import skip_if
+skip_if.no_reverse_ops()
+
class A:
def __init__(self, v):
diff --git a/tests/circuitpython/nvm_present.py b/tests/circuitpython/nvm_present.py
index a2cf3a22c..bef80dcc6 100644
--- a/tests/circuitpython/nvm_present.py
+++ b/tests/circuitpython/nvm_present.py
@@ -1,4 +1,6 @@
import skip_if
+# TODO(tannewt): Remove this when we add nvm support to 3.x
+skip_if.always()
skip_if.board_not_in("metro_m0_express", "feather_m0_express", "circuitplayground_express")
import microcontroller
diff --git a/tests/skip_if.py b/tests/skip_if.py
index 7b1e06871..8d0ed8f21 100644
--- a/tests/skip_if.py
+++ b/tests/skip_if.py
@@ -27,6 +27,9 @@ def skip():
print("SKIP")
raise SystemExit
+def always():
+ skip()
+
def no_reversed():
import builtins
if "reversed" not in dir(builtins):
@@ -89,3 +92,13 @@ def no_slice_assign():
m2[1:3] = m1[0:2]
except TypeError:
skip()
+
+
+def no_reverse_ops():
+ class Foo:
+ def __radd__(self, other):
+ pass
+ try:
+ 5 + Foo()
+ except TypeError:
+ skip()