Index: apps/codecs.c =================================================================== --- apps/codecs.c (revision 19624) +++ apps/codecs.c (working copy) @@ -52,9 +52,6 @@ #include "splash.h" #include "general.h" -#define LOGF_ENABLE -#include "logf.h" - #ifdef SIMULATOR #if CONFIG_CODEC == SWCODEC unsigned char codecbuf[CODEC_SIZE]; @@ -128,7 +125,7 @@ debugf, #endif #ifdef ROCKBOX_HAS_LOGF - logf, + _logf, #endif (qsort_func)qsort, Index: apps/codecs.h =================================================================== --- apps/codecs.h (revision 19624) +++ apps/codecs.h (working copy) @@ -50,6 +50,9 @@ #endif #include "settings.h" +#define LOGF_ENABLE +#include "logf.h" + #ifdef CODEC #if defined(DEBUG) || defined(SIMULATOR) #undef DEBUGF @@ -63,10 +66,22 @@ #ifdef ROCKBOX_HAS_LOGF #undef LOGF -#define LOGF ci->logf +#define LOGF(f,...) ci->logf(f,##__VA_ARGS__) +#define WARNF(f,...) ci->warnf(f,##__VA_ARGS__) +#define ERRORF(f,...) ci->errorf(f,##__VA_ARGS__) +#if !defined(DEBUG) && !defined(SIMULATOR) +#undef DEBUGF +#define DEBUGF(f,...) ci->debugf(f,##__VA_ARGS__) +#endif #else #define LOGF(...) +#define WARNF(...) +#define ERRORF(...) +#if !defined(DEBUG) && !defined(SIMULATOR) +#undef DEBUGF +#define DEBUGF(...) #endif +#endif #endif @@ -199,7 +214,7 @@ void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2); #endif #ifdef ROCKBOX_HAS_LOGF - void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2); + void (*_logf)(int level, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3); #endif /* Tremor requires qsort */ Index: apps/plugins/mpegplayer/alloc.c =================================================================== --- apps/plugins/mpegplayer/alloc.c (revision 19624) +++ apps/plugins/mpegplayer/alloc.c (working copy) @@ -39,7 +39,7 @@ static unsigned char *mpeg2_mallocbuf SHAREDBSS_ATTR; static unsigned char *mpeg2_bufallocbuf SHAREDBSS_ATTR; -#if defined(DEBUG) || defined(SIMULATOR) +#if defined(DEBUG) || defined(ROCKBOX_HAS_LOGF) || defined(SIMULATOR) const char * mpeg_get_reason_str(int reason) { const char *str; Index: apps/plugins/mpegplayer/video_thread.c =================================================================== --- apps/plugins/mpegplayer/video_thread.c (revision 19624) +++ apps/plugins/mpegplayer/video_thread.c (working copy) @@ -89,7 +89,7 @@ td->last_showfps = *rb->current_tick; } -#if defined(DEBUG) || defined(SIMULATOR) +#if defined(DEBUG) || defined(ROCKBOX_HAS_LOGF) || defined(SIMULATOR) static unsigned char pic_coding_type_char(unsigned type) { switch (type) Index: apps/plugin.c =================================================================== --- apps/plugin.c (revision 19624) +++ apps/plugin.c (working copy) @@ -34,7 +34,6 @@ #include "mp3data.h" #include "powermgmt.h" #include "splash.h" -#include "logf.h" #include "option_select.h" #include "talk.h" #include "version.h" Index: apps/plugin.h =================================================================== --- apps/plugin.h (revision 19624) +++ apps/plugin.h (working copy) @@ -102,6 +102,9 @@ #include "yesno.h" +#define LOGF_ENABLE +#include "logf.h" + #ifdef PLUGIN #if defined(DEBUG) || defined(SIMULATOR) @@ -115,11 +118,22 @@ #endif #ifdef ROCKBOX_HAS_LOGF -#undef LOGF -#define LOGF rb->logf +#define LOGF(f,...) rb->logf(f,##__VA_ARGS__) +#define WARNF(f,...) rb->warnf(f,##__VA_ARGS__) +#define ERRORF(f,...) rb->errorf(f,##__VA_ARGS__) +#if !defined(DEBUG) && !defined(SIMULATOR) +#undef DEBUGF +#define DEBUGF(f,...) rb->debugf(f,##__VA_ARGS__) +#endif #else #define LOGF(...) +#define WARNF(...) +#define ERRORF(...) +#if !defined(DEBUG) && !defined(SIMULATOR) +#undef DEBUGF +#define DEBUGF(...) #endif +#endif #endif @@ -686,7 +700,7 @@ void (*debugf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2); #endif #ifdef ROCKBOX_HAS_LOGF - void (*logf)(const char *fmt, ...) ATTRIBUTE_PRINTF(1, 2); + void (*_logf)(int level, const char *fmt, ...) ATTRIBUTE_PRINTF(2, 3); #endif struct user_settings* global_settings; struct system_status *global_status; Index: apps/codecs/libfaad/common.h =================================================================== --- apps/codecs/libfaad/common.h (revision 19624) +++ apps/codecs/libfaad/common.h (working copy) @@ -41,6 +41,9 @@ #undef DEBUGF #define DEBUGF ci->debugf #else +#ifdef DEBUGF +#undef DEBUGF +#endif #define DEBUGF(...) #endif Index: apps/codecs/libm4a/demux.c =================================================================== --- apps/codecs/libm4a/demux.c (revision 19624) +++ apps/codecs/libm4a/demux.c (working copy) @@ -43,6 +43,9 @@ #endif #define DEBUGF qtmovie->stream->ci->debugf #else +#ifdef DEBUGF +#undef DEBUGF +#endif #define DEBUGF(...) #endif Index: firmware/export/logf.h =================================================================== --- firmware/export/logf.h (revision 19624) +++ firmware/export/logf.h (working copy) @@ -37,13 +37,42 @@ extern bool logfwrap; #endif /* __PCTOOL__ */ -#define logf _logf -void _logf(const char *format, ...) ATTRIBUTE_PRINTF(1, 2); +#define MIN_LOG_LEVEL 0 +#define LOG_LEVEL_DEBUG 1 +#define LOG_LEVEL_INFO 2 +#define LOG_LEVEL_WARN 3 +#define LOG_LEVEL_ERROR 4 +#define MAX_LOG_LEVEL 5 +#ifdef __PCTOOL__ +#define LOG_PREFIX_DEBUG "DEBUG: " +#define LOG_PREFIX_WARN "WARNING: " +#define LOG_PREFIX_ERROR "ERROR: " +#else +#define LOG_PREFIX_DEBUG "D " +#define LOG_PREFIX_WARN "W " +#define LOG_PREFIX_ERROR "E " +#endif + +#define logf(f,...) _logf(LOG_LEVEL_INFO,f,##__VA_ARGS__) +#define warnf(f,...) _logf(LOG_LEVEL_WARN,LOG_PREFIX_WARN f,##__VA_ARGS__) +#define errorf(f,...) _logf(LOG_LEVEL_ERROR,LOG_PREFIX_ERROR f,##__VA_ARGS__) + +#ifndef DEBUG +#define debugf(f,...) _logf(LOG_LEVEL_DEBUG,LOG_PREFIX_DEBUG f,##__VA_ARGS__) +#endif + +void _logf(int level, const char *format, ...) ATTRIBUTE_PRINTF(2, 3); + +void set_output_log_level(int level); +int get_output_log_level(void); + #else /* !ROCKBOX_HAS_LOGF */ /* built without logf() support enabled, replace logf() by DEBUGF() */ -#define logf(f,args...) DEBUGF(f"\n",##args) +#define logf(f,...) DEBUGF("I "f"\n",##__VA_ARGS__) +#define warnf(f,...) DEBUGF("W "f"\n",##__VA_ARGS__) +#define errorf(f,...) DEBUGF("E "f"\n",##__VA_ARGS__) #endif /* !ROCKBOX_HAS_LOGF */ @@ -52,5 +81,13 @@ /* Allow fine tuning (per file) of the logf output */ #ifndef LOGF_ENABLE #undef logf +#undef warnf +#undef errorf #define logf(...) +#define warnf(...) +#define errorf(...) +#ifndef DEBUG +#undef debugf +#define debugf(...) #endif +#endif Index: firmware/logf.c =================================================================== --- firmware/logf.c (revision 19624) +++ firmware/logf.c (working copy) @@ -42,6 +42,8 @@ /* Only provide all this if asked to */ #ifdef ROCKBOX_HAS_LOGF +static int log_level = MIN_LOG_LEVEL; + #ifndef __PCTOOL__ unsigned char logfbuffer[MAX_LOGF_LINES][MAX_LOGF_ENTRY]; int logfindex; @@ -85,21 +87,30 @@ #endif #ifdef __PCTOOL__ -void _logf(const char *format, ...) +void _logf(int level, const char *format, ...) { char buf[1024]; va_list ap; + + if (level < log_level) + return; + va_start(ap, format); - vsnprintf(buf, sizeof buf, format, ap); - printf("DEBUG: %s\n", buf); + va_end(ap); + + printf("%s\n", buf); } #else -void _logf(const char *format, ...) +void _logf(int level, const char *format, ...) { int len; unsigned char *ptr; va_list ap; + + if (level < log_level) + return; + va_start(ap, format); if(logfindex >= MAX_LOGF_LINES) { @@ -129,4 +140,14 @@ } #endif +void set_output_log_level(int level) +{ + log_level = level; +} + +int get_output_log_level(void) +{ + return log_level; +} + #endif