From b1925b1bd863d0dedbf40c2f2512fef54ae369e0 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Mon, 15 May 2017 20:21:26 -0700 Subject: [PATCH] atmel-samd: Fixup autoreset after switching boot to running once. --- atmel-samd/autoreload.c | 1 + atmel-samd/bindings/samd/__init__.c | 4 ++-- atmel-samd/main.c | 17 ++++++++++++----- atmel-samd/mphalport.c | 3 --- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/atmel-samd/autoreload.c b/atmel-samd/autoreload.c index 5d1a512eda..b2c9d61a78 100644 --- a/atmel-samd/autoreload.c +++ b/atmel-samd/autoreload.c @@ -64,4 +64,5 @@ void autoreload_start() { void autoreload_stop() { autoreload_delay_ms = 0; + reload_next_character = false; } diff --git a/atmel-samd/bindings/samd/__init__.c b/atmel-samd/bindings/samd/__init__.c index 83c069eca9..e834d0500c 100644 --- a/atmel-samd/bindings/samd/__init__.c +++ b/atmel-samd/bindings/samd/__init__.c @@ -47,8 +47,8 @@ MP_DEFINE_CONST_FUN_OBJ_0(samd_enable_autoreload_obj, samd_enable_autoreload); //| .. method:: disable_autoreload() //| -//| Disable autoreload based on USB file write activity until the next reload -//| or until `enable_autoreload` is called. +//| Disable autoreload based on USB file write activity until +//| `enable_autoreload` is called. //| STATIC mp_obj_t samd_disable_autoreload(void) { autoreload_disable(); diff --git a/atmel-samd/main.c b/atmel-samd/main.c index 370e29a4f5..a1ccf0e3cb 100644 --- a/atmel-samd/main.c +++ b/atmel-samd/main.c @@ -118,7 +118,6 @@ void reset_mp(void) { reset_status_led(); new_status_color(0x8f008f); autoreload_stop(); - autoreload_enable(); // Sync the file systems in case any used RAM from the GC to cache. As soon // as we re-init the GC all bets are off on the cache. @@ -249,6 +248,8 @@ bool start_mp(safe_mode_t safe_mode) { mp_hal_stdout_tx_str("Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.\r\n"); } else if (safe_mode != NO_SAFE_MODE) { mp_hal_stdout_tx_str("Running in safe mode! Auto-reload is off.\r\n"); + } else if (!autoreload_is_enabled()) { + mp_hal_stdout_tx_str("Auto-reload is off.\r\n"); } } #endif @@ -320,10 +321,12 @@ bool start_mp(safe_mode_t safe_mode) { mp_hal_stdout_tx_str("\r\n\r\n"); } - if (!cdc_enabled_at_start && autoreload_is_enabled()) { - mp_hal_stdout_tx_str("Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.\r\n"); - } else { - mp_hal_stdout_tx_str("Auto-reload is off.\r\n"); + if (!cdc_enabled_at_start) { + if (autoreload_is_enabled()) { + mp_hal_stdout_tx_str("Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.\r\n"); + } else { + mp_hal_stdout_tx_str("Auto-reload is off.\r\n"); + } } if (safe_mode != NO_SAFE_MODE) { mp_hal_stdout_tx_str("\r\nYou are running in safe mode which means something really bad happened.\r\n"); @@ -618,6 +621,7 @@ int main(void) { for (;;) { if (!skip_repl) { // The REPL mode can change, or it can request a reload. + bool autoreload_on = autoreload_is_enabled(); autoreload_disable(); new_status_color(REPL_RUNNING); if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) { @@ -625,6 +629,9 @@ int main(void) { } else { exit_code = pyexec_friendly_repl(); } + if (autoreload_on) { + autoreload_enable(); + } reset_samd21(); reset_mp(); } diff --git a/atmel-samd/mphalport.c b/atmel-samd/mphalport.c index 8d5e98ca3a..ed64c55293 100644 --- a/atmel-samd/mphalport.c +++ b/atmel-samd/mphalport.c @@ -131,9 +131,6 @@ int receive_usb(void) { return 0; } - // Disable autoreload if someone is using the repl. - autoreload_disable(); - // Copy from head. cpu_irq_disable(); int data = usb_rx_buf[usb_rx_buf_head];