From 251b53f1036e64afcc683e1967bdf68ec963ef0d Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Tue, 9 Jul 2019 22:52:19 +0200
Subject: [PATCH] fix(pycardium): Ensure printf output is sent to Epicardium
 API

Previously, printf would output directly to UART, which led to race
conditions.  With removing card10-board from pycardium and implementing
_write() directly, this can be fixed.  Now printf & co will output via
Epicardium API.

Signed-off-by: Rahix <rahix@rahix.de>
---
 pycardium/meson.build | 4 ++--
 pycardium/mphalport.c | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/pycardium/meson.build b/pycardium/meson.build
index 7e76d925..608d9cce 100644
--- a/pycardium/meson.build
+++ b/pycardium/meson.build
@@ -71,9 +71,9 @@ elf = executable(
   modsrc,
   mp_headers,
   include_directories: micropython_includes,
-  dependencies: [max32665_startup_core1, board_card10, periphdriver, api_caller],
+  dependencies: [max32665_startup_core1, periphdriver, api_caller],
   link_with: upy,
-  link_whole: [max32665_startup_core1_lib, board_card10_lib],
+  link_whole: [max32665_startup_core1_lib],
   link_args: [
     '-Wl,-Map=' + meson.current_build_dir() + '/' + name + '.map',
   ],
diff --git a/pycardium/mphalport.c b/pycardium/mphalport.c
index 91064177..b8ae7ec3 100644
--- a/pycardium/mphalport.c
+++ b/pycardium/mphalport.c
@@ -41,6 +41,13 @@ int DEBUG_printf(const char *fmt, ...)
 	return ret;
 }
 
+/* newlib syscall to allow printf to work */
+long _write(int fd, const char *buf, size_t cnt)
+{
+	epic_uart_write_str(buf, cnt);
+	return cnt;
+}
+
 bool do_interrupt = false;
 
 /* Timer Interrupt used for control char notification */
-- 
GitLab