diff options
Diffstat (limited to 'pbl/console.c')
-rw-r--r-- | pbl/console.c | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/pbl/console.c b/pbl/console.c index a9859ad162..3574753d23 100644 --- a/pbl/console.c +++ b/pbl/console.c @@ -1,6 +1,47 @@ #include <common.h> #include <debug_ll.h> +static void (*__putc)(void *ctx, int c); +static void *putc_ctx; + +/** + * pbl_set_putc() - setup UART used for PBL console + * @putc: The putc function. + * @ctx: The context pointer passed back to putc + * + * This sets the putc function which is afterwards used to output + * characters in the PBL. + */ +void pbl_set_putc(void (*putcf)(void *ctx, int c), void *ctx) +{ + __putc = putcf; + putc_ctx = ctx; +} + +void console_putc(unsigned int ch, char c) +{ + if (!__putc) + putc_ll(c); + else + __putc(putc_ctx, c); +} + +int console_puts(unsigned int ch, const char *str) +{ + int n = 0; + + while (*str) { + if (*str == '\n') + putc_ll('\r'); + + console_putc(CONSOLE_STDOUT, *str); + str++; + n++; + } + + return n; +} + int printf(const char *fmt, ...) { va_list args; @@ -11,7 +52,7 @@ int printf(const char *fmt, ...) i = vsprintf(printbuffer, fmt, args); va_end(args); - puts_ll(printbuffer); + console_puts(CONSOLE_STDOUT, printbuffer); return i; } @@ -26,7 +67,7 @@ int pr_print(int level, const char *fmt, ...) i = vsprintf(printbuffer, fmt, args); va_end(args); - puts_ll(printbuffer); + console_puts(CONSOLE_STDOUT, printbuffer); return i; } @@ -35,8 +76,3 @@ int ctrlc(void) { return 0; } - -void console_putc(unsigned int ch, char c) -{ - putc_ll(c); -} |