From 499784a824c541001c2fd52ae95eba88dcfc952b Mon Sep 17 00:00:00 2001 From: Marvin Borner Date: Sat, 21 Dec 2019 22:22:03 +0100 Subject: Many debugging/serial improvements Sorry for the little information, but I did many things :) --- src/kernel/lib/stdio/debug.c | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/kernel/lib/stdio/debug.c (limited to 'src/kernel/lib/stdio/debug.c') diff --git a/src/kernel/lib/stdio/debug.c b/src/kernel/lib/stdio/debug.c new file mode 100644 index 0000000..d66ee59 --- /dev/null +++ b/src/kernel/lib/stdio/debug.c @@ -0,0 +1,59 @@ +#include +#include +#include +#include +#include + +void _write_serial(const char *data) +{ + for (size_t i = 0; i < strlen(data); i++) serial_put(data[i]); +} + +void serial_printf(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + + uint8_t readyToFormat = 0; + + char buff = 0; + + for (; *fmt; fmt++) { + if (readyToFormat) { + if (*fmt == '%') { + serial_put('%'); + readyToFormat = 0; + continue; + } + + buff = *fmt; + if (buff == 's') { + const char *str = va_arg(args, const char*); + _write_serial(str); + readyToFormat = 0; + } else if (buff == 'x') { + char *p = htoa((uint32_t) va_arg(args, int)); + _write_serial(p); + kfree(p); + readyToFormat = 0; + } else if (buff == 'd') { + char *p = itoa(va_arg(args, int)); + _write_serial(p); + kfree(p); + readyToFormat = 0; + } else if (buff == 'c') { + serial_put((char) va_arg(args, int)); + readyToFormat = 0; + } + } else { + if (*fmt == '%') + readyToFormat = 1; + else + serial_put(*fmt); + } + } + + serial_put('\n'); + + va_end(args); +} \ No newline at end of file -- cgit v1.2.3