diff --git a/fusee/fusee-secondary/src/log.c b/fusee/fusee-secondary/src/log.c
new file mode 100644
index 000000000..050b2fccc
--- /dev/null
+++ b/fusee/fusee-secondary/src/log.c
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2018 Atmosphère-NX
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+
+#include "log.h"
+#include "display/video_fb.h"
+
+/* default log level for screen output */
+ScreenLogLevel g_screen_log_level = SCREEN_LOG_LEVEL_MANDATORY;
+
+void log_set_log_level(ScreenLogLevel log_level) {
+ g_screen_log_level = log_level;
+}
+
+void log_to_uart(const char *message) {
+ /* TODO: add UART logging */
+}
+
+void print_to_screen(ScreenLogLevel screenLogLevel, char *message) {
+ /* don't print to screen if below log level */
+ if(g_screen_log_level == SCREEN_LOG_LEVEL_NONE || screenLogLevel > g_screen_log_level) return;
+
+ //video_puts(buf);
+ printf(message);
+}
+
+/**
+ * vprintk - logs a message to the console
+ *
+ * This text will not be colored or prefixed but logged to UART
+ * UART is TODO
+ */
+void vprint(ScreenLogLevel screenLogLevel, const char *fmt, va_list args)
+{
+ char buf[PRINT_MESSAGE_MAX_LENGTH];
+ vsnprintf(buf, PRINT_MESSAGE_MAX_LENGTH, fmt, args);
+
+ /* log to UART */
+ log_to_uart(buf);
+
+ print_to_screen(screenLogLevel, buf);
+}
+
+/**
+ * print - logs a message and prints it to screen based on its screenLogLevel
+ *
+ * If the level is below g_screen_log_level it will not be shown but logged to UART
+ * UART is TODO
+ */
+void print(ScreenLogLevel screenLogLevel, const char * fmt, ...)
+{
+ char typebuf[] = "[%s] %s";
+ char buf[PRINT_MESSAGE_MAX_LENGTH] = {};
+ char message[PRINT_MESSAGE_MAX_LENGTH] = {};
+
+ /* apply prefix and append message format */
+ /* TODO: add coloring to the output */
+ /* TODO: make splash disappear if level > MANDATORY */
+ switch(screenLogLevel)
+ {
+ case SCREEN_LOG_LEVEL_ERROR:
+ snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "ERROR", fmt);
+ break;
+ case SCREEN_LOG_LEVEL_WARNING:
+ snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "WARNING", fmt);
+ break;
+ case SCREEN_LOG_LEVEL_MANDATORY:
+ snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, "%s", fmt);
+ break;
+ case SCREEN_LOG_LEVEL_INFO:
+ snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "INFO", fmt);
+ break;
+ case SCREEN_LOG_LEVEL_DEBUG:
+ snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "DEBUG", fmt);
+ break;
+ default:
+ break;
+ }
+
+ /* input arguments */
+ va_list args;
+ va_start(args, fmt);
+ vsnprintf(message, PRINT_MESSAGE_MAX_LENGTH, buf, args);
+ va_end(args);
+
+ /* log to UART */
+ log_to_uart(message);
+
+ print_to_screen(screenLogLevel, message);
+}
\ No newline at end of file
diff --git a/fusee/fusee-secondary/src/print.h b/fusee/fusee-secondary/src/log.h
similarity index 57%
rename from fusee/fusee-secondary/src/print.h
rename to fusee/fusee-secondary/src/log.h
index 9e06eff0e..5be2964c9 100644
--- a/fusee/fusee-secondary/src/print.h
+++ b/fusee/fusee-secondary/src/log.h
@@ -19,20 +19,24 @@
#define PRINT_MESSAGE_MAX_LENGTH 512
-typedef enum {
- PRINT_LOG_DEBUG = 0,
- PRINT_LOG_INFO,
- PRINT_LOG_MANDATORY,
- PRINT_LOG_WARNING,
- PRINT_LOG_ERROR
-} PrintLogLevel;
-
-#include
+//#include
#include "../../fusee-primary/src/lib/vsprintf.h"
-extern PrintLogLevel g_print_log_level;
+typedef enum {
+ SCREEN_LOG_LEVEL_NONE = 0,
+ SCREEN_LOG_LEVEL_ERROR = 1,
+ SCREEN_LOG_LEVEL_WARNING = 2,
+ SCREEN_LOG_LEVEL_MANDATORY = 3, /* no log prefix */
+ SCREEN_LOG_LEVEL_INFO = 4,
+ SCREEN_LOG_LEVEL_DEBUG = 5
+} ScreenLogLevel;
-//void vprintk(const char *fmt, va_list args);
-void print(PrintLogLevel printLogLevel, const char* fmt, ...);
+/* TODO: make this configurable by BCT.ini */
+extern ScreenLogLevel g_screen_log_level;
+
+void log_set_log_level(ScreenLogLevel screen_log_level);
+void log_to_uart(const char *message);
+void vprint(ScreenLogLevel screenLogLevel, const char *fmt, va_list args);
+void print(ScreenLogLevel screenLogLevel, const char* fmt, ...);
#endif
\ No newline at end of file
diff --git a/fusee/fusee-secondary/src/print.c b/fusee/fusee-secondary/src/print.c
deleted file mode 100644
index 0cf3f2a90..000000000
--- a/fusee/fusee-secondary/src/print.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2018 Atmosphère-NX
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-#include "print.h"
-
-#include "display/video_fb.h"
-
-PrintLogLevel g_print_log_level = PRINT_LOG_DEBUG;
-
-void vprintk(const char *fmt, va_list args)
-{
- char buf[PRINT_MESSAGE_MAX_LENGTH];
- vsnprintf(buf, PRINT_MESSAGE_MAX_LENGTH, fmt, args);
- video_puts(buf);
-}
-
-void printk(const char *fmt, ...)
-{
- va_list list;
- va_start(list, fmt);
- vprintk(fmt, list);
- va_end(list);
-}
-
-/**
- * print - logs a message based on its message_level
- *
- * If the level is below g_message_level it will not be shown
- * but logged to UART (UART is TO DO)
- */
-void print(PrintLogLevel printLogLevel, const char * fmt, ...)
-{
- char typebuf[] = "[%s] %s";
- char buf[PRINT_MESSAGE_MAX_LENGTH] = {};
-
- /* apply prefix and append message format */
- /* TODO: add coloring to the output */
- switch(printLogLevel)
- {
- case PRINT_LOG_DEBUG:
- snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "DEBUG", fmt);
- break;
- case PRINT_LOG_INFO:
- snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "INFO", fmt);
- break;
- case PRINT_LOG_MANDATORY:
- snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, "%s", fmt);
- break;
- case PRINT_LOG_WARNING:
- snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "WARNING", fmt);
- break;
- case PRINT_LOG_ERROR:
- snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "ERROR", fmt);
- break;
- default:
- break;
- }
-
- /* input arguments for UART logging */
- va_list args;
- va_start(args, fmt);
- vsnprintf(buf, PRINT_MESSAGE_MAX_LENGTH, buf, args);
- va_end(args);
-
- /* TODO: implement SD and/or UART logging */
-
- /* don't print to screen if below log level */
- if (printLogLevel < g_print_log_level) return;
-
- printk(buf);
-}
\ No newline at end of file