aboutsummaryrefslogtreecommitdiffstats
path: root/src/usb_stdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/usb_stdio.c')
-rw-r--r--src/usb_stdio.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/usb_stdio.c b/src/usb_stdio.c
new file mode 100644
index 0000000..90beefb
--- /dev/null
+++ b/src/usb_stdio.c
@@ -0,0 +1,40 @@
+#include "usb_stdio.h"
+
+#include "pico/stdio/driver.h"
+#include "tusb.h"
+
+static void usb_stdio_write(const char *buf, int len);
+static void usb_stdio_flush(void);
+static int usb_stdio_read(char *buf, int len);
+
+static struct stdio_driver usb_stdio = {
+ .out_chars = usb_stdio_write,
+ .out_flush = usb_stdio_flush,
+ .in_chars = usb_stdio_read,
+ .next = NULL
+};
+
+void
+usb_stdio_write(const char *buf, int len)
+{
+ tud_cdc_write(buf, (uint32_t) len);
+}
+
+void
+usb_stdio_flush(void)
+{
+ tud_cdc_write_flush();
+}
+
+int
+usb_stdio_read(char *buf, int len)
+{
+ return (int) tud_cdc_read(buf, (uint32_t) len);
+}
+
+void
+usb_stdio_init(void)
+{
+ stdio_set_driver_enabled(&usb_stdio, true);
+ stdio_init_all();
+}