summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--esp8266/uart.c11
-rw-r--r--lib/utils/pyexec.c9
-rw-r--r--lib/utils/pyexec.h1
3 files changed, 19 insertions, 2 deletions
diff --git a/esp8266/uart.c b/esp8266/uart.c
index c4d08eac4b..9b2bfb4c83 100644
--- a/esp8266/uart.c
+++ b/esp8266/uart.c
@@ -234,6 +234,17 @@ void mp_keyboard_interrupt(void);
int interrupt_char;
void uart_task_handler(os_event_t *evt) {
+ if (pyexec_repl_active) {
+ // TODO: Just returning here isn't exactly right.
+ // What really should be done is something like
+ // enquing delayed event to itself, for another
+ // chance to feed data to REPL. Otherwise, there
+ // can be situation when buffer has bunch of data,
+ // and sits unprocessed, because we consumed all
+ // processing signals like this.
+ return;
+ }
+
int c, ret = 0;
while ((c = ringbuf_get(&input_buf)) >= 0) {
if (c == interrupt_char) {
diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c
index d1205034e5..8afa3813cd 100644
--- a/lib/utils/pyexec.c
+++ b/lib/utils/pyexec.c
@@ -277,12 +277,17 @@ input_restart:
}
}
+uint8_t pyexec_repl_active;
int pyexec_event_repl_process_char(int c) {
+ pyexec_repl_active = 1;
+ int res;
if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
- return pyexec_raw_repl_process_char(c);
+ res = pyexec_raw_repl_process_char(c);
} else {
- return pyexec_friendly_repl_process_char(c);
+ res = pyexec_friendly_repl_process_char(c);
}
+ pyexec_repl_active = 0;
+ return res;
}
#else // MICROPY_REPL_EVENT_DRIVEN
diff --git a/lib/utils/pyexec.h b/lib/utils/pyexec.h
index cf44530c59..e0f62440e0 100644
--- a/lib/utils/pyexec.h
+++ b/lib/utils/pyexec.h
@@ -42,6 +42,7 @@ int pyexec_file(const char *filename);
int pyexec_frozen_module(const char *name);
void pyexec_event_repl_init(void);
int pyexec_event_repl_process_char(int c);
+extern uint8_t pyexec_repl_active;
MP_DECLARE_CONST_FUN_OBJ(pyb_set_repl_info_obj);