From 93c76d2b06e0f52395dc2d5fa1d7fae54c9164f7 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Thu, 29 Sep 2016 10:24:56 -0700
Subject: [PATCH] zephyr: Add Ctrl+C handling.

---
 zephyr/Makefile       | 1 +
 zephyr/main.c         | 2 ++
 zephyr/mpconfigport.h | 1 +
 zephyr/mphalport.h    | 1 -
 4 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/zephyr/Makefile b/zephyr/Makefile
index 501fb0a31..2cc314b53 100644
--- a/zephyr/Makefile
+++ b/zephyr/Makefile
@@ -37,6 +37,7 @@ SRC_C = main.c \
 	lib/utils/stdout_helpers.c \
 	lib/utils/printf.c \
 	lib/utils/pyexec.c \
+	lib/utils/interrupt_char.c \
 	lib/mp-readline/readline.c \
 	$(BUILD)/frozen.c \
 	$(SRC_MOD)
diff --git a/zephyr/main.c b/zephyr/main.c
index d6ac56943..3bd768f68 100644
--- a/zephyr/main.c
+++ b/zephyr/main.c
@@ -9,6 +9,7 @@
 #include "py/gc.h"
 #include "py/stackctrl.h"
 #include "lib/utils/pyexec.h"
+#include "lib/mp-readline/readline.h"
 
 void do_str(const char *src, mp_parse_input_kind_t input_kind) {
     mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, src, strlen(src), 0);
@@ -44,6 +45,7 @@ int real_main(void) {
     gc_init(heap, heap + sizeof(heap));
     #endif
     mp_init();
+    MP_STATE_PORT(mp_kbd_exception) = mp_obj_new_exception(&mp_type_KeyboardInterrupt);
     pyexec_frozen_module("main.py");
     #if MICROPY_REPL_EVENT_DRIVEN
     pyexec_event_repl_init();
diff --git a/zephyr/mpconfigport.h b/zephyr/mpconfigport.h
index 5d021b6aa..2c5fad21b 100644
--- a/zephyr/mpconfigport.h
+++ b/zephyr/mpconfigport.h
@@ -46,6 +46,7 @@ typedef long mp_off_t;
 #define MP_STATE_PORT MP_STATE_VM
 
 #define MICROPY_PORT_ROOT_POINTERS \
+    mp_obj_t mp_kbd_exception; \
     const char *readline_hist[8];
 
 // Include Zephyr's autoconf.h, which should be made first by Zephyr makefiles
diff --git a/zephyr/mphalport.h b/zephyr/mphalport.h
index 60d68bd2d..1bb64e000 100644
--- a/zephyr/mphalport.h
+++ b/zephyr/mphalport.h
@@ -1,2 +1 @@
 static inline mp_uint_t mp_hal_ticks_ms(void) { return 0; }
-static inline void mp_hal_set_interrupt_char(char c) {}
-- 
GitLab