From 56a514c193a246de3782a02cf0ae9b09b8563e9c Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sat, 17 Dec 2016 00:48:56 +0300
Subject: [PATCH] zephyr/uart_core: Access console UART directly instead of
 printk() hack.

This is required to avoid extra level of output "cooking" ("\r\r\n") and
make test infrastructure work. On the other hand, this breaks somewhat
Zephyr console abstraction.
---
 zephyr/uart_core.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/zephyr/uart_core.c b/zephyr/uart_core.c
index 702c97d20..1e85053cd 100644
--- a/zephyr/uart_core.c
+++ b/zephyr/uart_core.c
@@ -26,9 +26,8 @@
 #include <unistd.h>
 #include "py/mpconfig.h"
 #include "src/zephyr_getchar.h"
-
-// Stopgap
-extern void printk(const char*, ...);
+// Zephyr headers
+#include <uart.h>
 
 /*
  * Core UART functions to implement for a port
@@ -41,7 +40,12 @@ int mp_hal_stdin_rx_chr(void) {
 
 // Send string of given length
 void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) {
+    static struct device *uart_console_dev;
+    if (uart_console_dev == NULL) {
+        uart_console_dev = device_get_binding(CONFIG_UART_CONSOLE_ON_DEV_NAME);
+    }
+
     while (len--) {
-        printk("%c", *str++);
+        uart_poll_out(uart_console_dev, *str++);
     }
 }
-- 
GitLab