summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDawid Niedzwiecki <dn@semihalf.com>2021-06-28 15:24:17 +0200
committerCommit Bot <commit-bot@chromium.org>2021-07-09 19:45:07 +0000
commit107738848df07a66ae4d7c5af8f73a98ca555224 (patch)
treec7176ca63a5111d3e5a0202b3d6da1cd95c240eb /include
parent7dea3f0835af95710717b9370b703bdb53ce0ee3 (diff)
downloadchrome-ec-107738848df07a66ae4d7c5af8f73a98ca555224.tar.gz
zephyr: switch to using shell_*, not printk
Reimplement the printf functions for Zephyr to use shell_* functions instead of printk. The main differences are: -UART output is buffered by the shell layer. The size of the buffer should be adjusted per board (SHELL_BACKEND_SERIAL_TX_RING_BUFFER_SIZE) -The shell uses non-blocking UART FIFO operations while printk waits actively for every sent byte. -The shell prints can not be split by the other shell prints so it should increase the quality of the output. However the shell_* functions can not be used in interrupts, so use printk instead which can divide the shell output. The output may be messy for boards that have a lot of prints in interrupts e.g. volteer. EC uses unusual print format e.g. "%pT" to print a timestamp, so use the CrosEC's vfnprintf function and then pass the generated string to the shell_* print. Use the sprintf function for that purpose. Long term, the EC codebase should switch to a usual print format, so shell_* can be used directly and not 2 versions of vfnprintf. This change should also help to pass tests that wait for a certain pattern on output e.g. ECBootTime. BUG=b:191724484, b:178033156 BRANCH=none TEST=Verify the console output works Signed-off-by: Dawid Niedzwiecki <dn@semihalf.com> Change-Id: Ifaed2093ab8c43038c7d3e0ded1449a93f7f7da5 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2988194 Reviewed-by: Keith Short <keithshort@chromium.org> Commit-Queue: Keith Short <keithshort@chromium.org>
Diffstat (limited to 'include')
-rw-r--r--include/printf.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/include/printf.h b/include/printf.h
index 5c6373cf1e..37c0cc3949 100644
--- a/include/printf.h
+++ b/include/printf.h
@@ -12,6 +12,13 @@
#include <stddef.h> /* For size_t */
#include "common.h"
+/* The declaration of snprintf is changed to crec_snprintf for Zephyr,
+ * so include stdio.h from Zephyr.
+ */
+#ifdef CONFIG_ZEPHYR
+#include <stdio.h>
+#endif
+
/*
* Printf formatting: % [flags] [width] [.precision] [length] [type]
*
@@ -77,6 +84,11 @@
__stdlib_compat int vfnprintf(int (*addchar)(void *context, int c),
void *context, const char *format, va_list args);
+#ifndef CONFIG_ZEPHYR
+#define snprintf crec_snprintf
+#define vsnprintf crec_vsnprintf
+#endif
+
/**
* Print formatted outut to a string.
*
@@ -88,7 +100,8 @@ __stdlib_compat int vfnprintf(int (*addchar)(void *context, int c),
* @return EC_SUCCESS, or EC_ERROR_OVERFLOW if the output was truncated.
*/
__attribute__((__format__(__printf__, 3, 4)))
-__stdlib_compat int snprintf(char *str, size_t size, const char *format, ...);
+__stdlib_compat int crec_snprintf(char *str, size_t size, const char *format,
+ ...);
/**
* Print formatted output to a string.
@@ -102,8 +115,8 @@ __stdlib_compat int snprintf(char *str, size_t size, const char *format, ...);
* @return The string length written to str, or a negative value on error.
* The negative values can be -EC_ERROR_INVAL or -EC_ERROR_OVERFLOW.
*/
-__stdlib_compat int vsnprintf(char *str, size_t size, const char *format,
- va_list args);
+__stdlib_compat int crec_vsnprintf(char *str, size_t size, const char *format,
+ va_list args);
#endif /* !HIDE_EC_STDLIB */