Add a uprintf (UART printf) that outputs data on selected UART
authorNathael Pajani <nathael.pajani@ed3l.fr>
Mon, 31 Aug 2015 15:41:04 +0000 (17:41 +0200)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Tue, 8 Nov 2022 16:03:04 +0000 (17:03 +0100)
drivers/serial.c
include/drivers/serial.h
include/lib/stdio.h
lib/uprintf.c [new file with mode: 0644]

index 7dc5d83..d636d2a 100644 (file)
@@ -34,7 +34,6 @@
 #include "lib/utils.h"
 #include "drivers/serial.h"
 
-#define SERIAL_OUT_BUFF_SIZE 64
 struct uart_device
 {
        uint32_t num;
index c31e855..8fce4f0 100644 (file)
 #define SERIAL_MODE_RS485 SERIAL_CAP_RS485
 #define SERIAL_MODE_IRDA  SERIAL_CAP_IRDA
 
+
+/* This buffer size is the maximum write size for a serial_printf or a uprintf call.
+ * Previously this value was 64, but it is often too short, so I set it to 96, which
+ *    should be OK for most cases. In need of a bigger write buffer, change this value
+ *    or perform multiple write calls (better).
+ */
+#define SERIAL_OUT_BUFF_SIZE 96
+
+
 /***************************************************************************** */
 /*    Serial Write
  *
index 19dd837..e6ee86d 100644 (file)
@@ -31,4 +31,8 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
 
 int snprintf(char* buf, size_t size, const char *format, ...);
 
+
+int uprintf(int uart_num, const char *format, ...);
+
+
 #endif /* LIB_STDIO_H */
diff --git a/lib/uprintf.c b/lib/uprintf.c
new file mode 100644 (file)
index 0000000..57269cd
--- /dev/null
@@ -0,0 +1,45 @@
+/****************************************************************************
+ *  lib/uprintf.c
+ *
+ * UART printf
+ * 
+ * Copyright 2012 Nathael Pajani <nathael.pajani@ed3l.fr>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ *************************************************************************** */
+
+#include <stdarg.h>
+#include <stdint.h>
+#include "drivers/serial.h"
+#include "lib/string.h"
+#include "lib/stdio.h"
+
+
+int uprintf(int uart_num, const char* format, ...)
+{
+       char printf_buf[SERIAL_OUT_BUFF_SIZE];
+       va_list args;
+       int r;
+
+       va_start(args, format);
+    r = vsnprintf(printf_buf, SERIAL_OUT_BUFF_SIZE, format, args);
+    va_end(args);
+
+       serial_write(uart_num, printf_buf, r);
+
+    return r;
+}
+
+