summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/export/logf.h29
-rw-r--r--firmware/logf.c60
2 files changed, 89 insertions, 0 deletions
diff --git a/firmware/export/logf.h b/firmware/export/logf.h
new file mode 100644
index 0000000000..dc8c699ab2
--- /dev/null
+++ b/firmware/export/logf.h
@@ -0,0 +1,29 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2005 by Daniel Stenberg
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef LOGF_H
+#define LOGF_H
+
+extern unsigned char logfbuffer[];
+extern unsigned char *logfptr;
+extern unsigned char *logfend;
+extern bool logfwrap;
+
+void logf(const char *format, ...);
+
+#endif /* LOGF_H */
diff --git a/firmware/logf.c b/firmware/logf.c
new file mode 100644
index 0000000000..2cb5383783
--- /dev/null
+++ b/firmware/logf.c
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2005 by Daniel Stenberg
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+/*
+ * logf() logs 16 bytes in a circular buffer. Each logged string is space-
+ * padded for easier and faster output on screen. Just output 16 lines on each
+ * line. 16 bytes fit nicely on the iRiver remote LCD (128 pixels with an 8
+ * pixels font).
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <sprintf.h>
+#include <stdbool.h>
+#include "config.h"
+
+#define MAX_LOGF_LINES 1000
+#define MAX_LOGF_DATASIZE (16*MAX_LOGF_LINES)
+
+unsigned char logfbuffer[MAX_LOGF_DATASIZE];
+unsigned char *logfend=&logfbuffer[MAX_LOGF_DATASIZE];
+unsigned char *logfptr=&logfbuffer[0];
+bool logfwrap;
+
+void logf(const char *format, ...)
+{
+ int len;
+ va_list ap;
+ va_start(ap, format);
+
+ if(logfptr >= logfend) {
+ /* wrap */
+ logfwrap = true;
+ logfptr = &logfbuffer[0];
+ }
+ len = vsnprintf(logfptr, 16, format, ap);
+ va_end(ap);
+ if(len < 16)
+ /* pad with spaces up to the 16 byte border */
+ memset(logfptr+len, ' ', 16-len);
+
+ logfptr += 16; /* leave it where we write the next time */
+}