diff --git a/fusee/fusee-secondary/src/exception_handlers.c b/fusee/fusee-secondary/src/exception_handlers.c index e3a74a8bb..16e8c7492 100644 --- a/fusee/fusee-secondary/src/exception_handlers.c +++ b/fusee/fusee-secondary/src/exception_handlers.c @@ -61,21 +61,23 @@ void exception_handler_main(uint32_t *registers, unsigned int exception_type) { code_dump_size = safecpy(code_dump, (const void *)instr_addr, CODE_DUMP_SIZE); stack_dump_size = safecpy(stack_dump, (const void *)registers[13], STACK_DUMP_SIZE); - print(SCREEN_LOG_LEVEL_ERROR, "\nException type: %s\n", exception_names[exception_type]); - print(SCREEN_LOG_LEVEL_ERROR, "\nRegisters:\n\n"); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "\nException type: %s\n", + exception_names[exception_type]); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "\nRegisters:\n\n"); /* Print r0 to pc. */ for (int i = 0; i < 16; i += 2) { - print(SCREEN_LOG_LEVEL_ERROR, "%-7s%08"PRIX32" %-7s%08"PRIX32"\n", register_names[i], registers[i], register_names[i+1], registers[i+1]); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "%-7s%08"PRIX32" %-7s%08"PRIX32"\n", + register_names[i], registers[i], register_names[i+1], registers[i+1]); } /* Print cpsr. */ - print(SCREEN_LOG_LEVEL_ERROR, "%-7s%08"PRIX32"\n", register_names[16], registers[16]); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "%-7s%08"PRIX32"\n", register_names[16], registers[16]); - print(SCREEN_LOG_LEVEL_ERROR, "\nCode dump:\n"); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "\nCode dump:\n"); hexdump(code_dump, code_dump_size, instr_addr); - print(SCREEN_LOG_LEVEL_ERROR, "\nStack dump:\n"); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "\nStack dump:\n"); hexdump(stack_dump, stack_dump_size, registers[13]); - print(SCREEN_LOG_LEVEL_ERROR, "\n"); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "\n"); fatal_error("An exception occurred!\n"); } diff --git a/fusee/fusee-secondary/src/log.c b/fusee/fusee-secondary/src/log.c index 9a451cf2c..49e989508 100644 --- a/fusee/fusee-secondary/src/log.c +++ b/fusee/fusee-secondary/src/log.c @@ -56,21 +56,11 @@ void vprint(ScreenLogLevel screen_log_level, const char *fmt, va_list args) print_to_screen(screen_log_level, buf); } -/** - * print - logs a message and prints it to screen based on its screen_log_level - * - * If the level is below g_screen_log_level it will not be shown but logged to UART - * UART is TODO - */ -void print(ScreenLogLevel screen_log_level, const char * fmt, ...) -{ +void add_prefix(ScreenLogLevel screen_log_level, const char *fmt, char *buf) { 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(screen_log_level) { case SCREEN_LOG_LEVEL_ERROR: @@ -91,6 +81,32 @@ void print(ScreenLogLevel screen_log_level, const char * fmt, ...) default: break; } +} + +/** + * print - logs a message and prints it to screen based on its screen_log_level + * + * If the level is below g_screen_log_level it will not be shown but logged to UART + * Use SCREEN_LOG_LEVEL_NO_PREFIX if you don't want a prefix to be added + * UART is TODO + */ +void print(ScreenLogLevel screen_log_level, const char * fmt, ...) +{ + char buf[PRINT_MESSAGE_MAX_LENGTH] = {}; + char message[PRINT_MESSAGE_MAX_LENGTH] = {}; + + /* TODO: make splash disappear if level > MANDATORY */ + + /* make prefix free messages with log_level possible */ + if(screen_log_level & SCREEN_LOG_LEVEL_NO_PREFIX) { + /* remove the NO_PREFIX flag so the enum can be recognized later on */ + screen_log_level &= ~SCREEN_LOG_LEVEL_NO_PREFIX; + + snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, "%s", fmt); + } + else { + add_prefix(screen_log_level, fmt, buf); + } /* input arguments */ va_list args; diff --git a/fusee/fusee-secondary/src/log.h b/fusee/fusee-secondary/src/log.h index ee2333fb3..73b7d86dd 100644 --- a/fusee/fusee-secondary/src/log.h +++ b/fusee/fusee-secondary/src/log.h @@ -27,7 +27,9 @@ typedef enum { SCREEN_LOG_LEVEL_WARNING = 2, SCREEN_LOG_LEVEL_MANDATORY = 3, /* no log prefix */ SCREEN_LOG_LEVEL_INFO = 4, - SCREEN_LOG_LEVEL_DEBUG = 5 + SCREEN_LOG_LEVEL_DEBUG = 5, + + SCREEN_LOG_LEVEL_NO_PREFIX = 0x100 /* OR this to your LOG_LEVEL to prevent prefix creation */ } ScreenLogLevel; /* TODO: make this configurable by BCT.ini */ diff --git a/fusee/fusee-secondary/src/utils.c b/fusee/fusee-secondary/src/utils.c index 0ceacd95e..60bf63920 100644 --- a/fusee/fusee-secondary/src/utils.c +++ b/fusee/fusee-secondary/src/utils.c @@ -97,7 +97,7 @@ __attribute__((noreturn)) void fatal_error(const char *fmt, ...) { va_start(args, fmt); vprint(SCREEN_LOG_LEVEL_ERROR, fmt, args); va_end(args); - print(SCREEN_LOG_LEVEL_ERROR, "\n Press POWER to reboot.\n"); + print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX, "\n Press POWER to reboot.\n"); wait_for_button_and_reboot(); }