summaryrefslogtreecommitdiffstats
path: root/common/console_simple.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2008-08-01 11:47:10 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2008-08-01 11:47:10 +0200
commitaca52174a9c43aabdf5b5874c7902181a047f61a (patch)
tree9d17e41af46cddcaeff59e42dbe3f22b1248cccc /common/console_simple.c
parentc10e20846ddbd0f6f062fb5faa66a9570fbcedc7 (diff)
downloadbarebox-aca52174a9c43aabdf5b5874c7902181a047f61a.tar.gz
console: add a simple console for saving space
Add a simple console layer which is not able to handle multiple consoles for those who don't need it. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/console_simple.c')
-rw-r--r--common/console_simple.c117
1 files changed, 117 insertions, 0 deletions
diff --git a/common/console_simple.c b/common/console_simple.c
new file mode 100644
index 0000000..5a80f76
--- /dev/null
+++ b/common/console_simple.c
@@ -0,0 +1,117 @@
+#include <config.h>
+#include <common.h>
+#include <fs.h>
+
+static struct console_device *console;
+
+int printf (const char *fmt, ...)
+{
+ va_list args;
+ uint i;
+ char printbuffer[CFG_PBSIZE];
+
+ va_start (args, fmt);
+
+ /* For this to work, printbuffer must be larger than
+ * anything we ever want to print.
+ */
+ i = vsprintf (printbuffer, fmt, args);
+ va_end (args);
+
+ /* Print the string */
+ puts(printbuffer);
+
+ return i;
+}
+EXPORT_SYMBOL(printf);
+
+int vprintf (const char *fmt, va_list args)
+{
+ uint i;
+ char printbuffer[CFG_PBSIZE];
+
+ /* For this to work, printbuffer must be larger than
+ * anything we ever want to print.
+ */
+ i = vsprintf (printbuffer, fmt, args);
+
+ /* Print the string */
+ puts (printbuffer);
+
+ return i;
+}
+EXPORT_SYMBOL(vprintf);
+
+void console_puts(unsigned int ch, const char *str)
+{
+ const char *s = str;
+ while (*s) {
+ console_putc(ch, *s);
+ if (*s == '\n')
+ console_putc(ch, '\r');
+ s++;
+ }
+}
+EXPORT_SYMBOL(console_puts);
+
+void console_putc(unsigned int ch, char c)
+{
+ console->putc(console, c);
+ if (c == '\n')
+ console->putc(console, '\r');
+}
+EXPORT_SYMBOL(console_putc);
+
+int fputc(int fd, char c)
+{
+ if (fd == 1)
+ putchar(c);
+ else if (fd == 2)
+ eputc(c);
+ else
+ return write(fd, &c, 1);
+ return 0;
+}
+EXPORT_SYMBOL(fputc);
+
+int fputs(int fd, const char *s)
+{
+ if (fd == 1)
+ puts(s);
+ else if (fd == 2)
+ eputs(s);
+ else
+ return write(fd, s, strlen(s));
+ return 0;
+}
+EXPORT_SYMBOL(fputs);
+
+int tstc(void)
+{
+ return console->tstc(console);
+}
+EXPORT_SYMBOL(tstc);
+
+int getc(void)
+{
+ return console->getc(console);
+}
+EXPORT_SYMBOL(getc);
+
+#ifndef ARCH_HAS_CTRLC
+/* test if ctrl-c was pressed */
+int ctrlc (void)
+{
+ if (tstc() && getc() == 3)
+ return 1;
+ return 0;
+}
+EXPORT_SYMBOL(ctrlc);
+#endif /* ARCH_HAS_CTRC */
+
+int console_register(struct console_device *newcdev)
+{
+ if (!console)
+ console = newcdev;
+ return 0;
+}