From 69775a1519c0fa3291f0bacd98c24a9f247d76d6 Mon Sep 17 00:00:00 2001 From: Rahix <rahix@rahix.de> Date: Thu, 15 Aug 2019 21:22:10 +0200 Subject: [PATCH] feat(epicardium): Display all output on CDC-ACM Closes #67 Signed-off-by: Rahix <rahix@rahix.de> --- epicardium/meson.build | 1 + epicardium/modules/serial.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/epicardium/meson.build b/epicardium/meson.build index 4c32b0a0..c9b128f7 100644 --- a/epicardium/meson.build +++ b/epicardium/meson.build @@ -85,6 +85,7 @@ elf = executable( include_directories: [freertos_includes], link_args: [ '-Wl,-Map=' + meson.current_build_dir() + '/' + name + '.map', + '-Wl,--defsym=_write=_write_epicardium', ], ) diff --git a/epicardium/modules/serial.c b/epicardium/modules/serial.c index db188ebe..a7392056 100644 --- a/epicardium/modules/serial.c +++ b/epicardium/modules/serial.c @@ -49,7 +49,7 @@ int epic_uart_read_char(void) */ int epic_uart_read_str(char *buf, size_t cnt) { - int i = 0; + size_t i = 0; for (i = 0; i < cnt; i++) { if (xQueueReceive(read_queue, &buf[i], 0) != pdTRUE) { @@ -60,6 +60,24 @@ int epic_uart_read_str(char *buf, size_t cnt) return i; } +long _write_epicardium(int fd, const char *buf, size_t cnt) +{ + /* + * Only print one line at a time. Insert `\r` between lines so they are + * properly displayed on the serial console. + */ + size_t i, last = 0; + for (i = 0; i < cnt; i++) { + if (buf[i] == '\n') { + epic_uart_write_str(&buf[last], i - last); + epic_uart_write_str("\r", 1); + last = i; + } + } + epic_uart_write_str(&buf[last], cnt - last); + return cnt; +} + /* Interrupt handler needed for SDK UART implementation */ void UART0_IRQHandler(void) { -- GitLab