Index: apps/main.c =================================================================== --- apps/main.c +++ apps/main.c @@ -116,6 +116,12 @@ #include "system-sdl.h" #endif +// #define LOGF_ENABLE + +#ifdef LOGF_ENABLE +#include "logf.h" +#endif + /*#define AUTOROCK*/ /* define this to check for "autostart.rock" on boot */ const char appsversion[]=APPSVERSION; @@ -378,6 +384,9 @@ static void init(void) #ifdef CPU_ARM enable_fiq(); #endif +#ifdef LOGF_ENABLE + logf_file_open(LOGF_FILENAME); +#endif lcd_init(); #ifdef HAVE_REMOTE_LCD lcd_remote_init(); index: apps/misc.c =================================================================== --- apps/misc.c +++ apps/misc.c @@ -90,6 +90,12 @@ #endif #endif +// #define LOGF_ENABLE + +#ifdef LOGF_ENABLE +#include "logf.h" +#endif + /* Format a large-range value for output, using the appropriate unit so that * the displayed value is in the range 1 <= display < 1000 (1024 for "binary" * units) if possible, and 3 significant digits are shown. If a buffer is @@ -394,6 +400,9 @@ static bool clean_shutdown(void (*callback)(void *), void *parameter) dircache_disable(); #endif +#ifdef LOGF_ENABLE + logf_file_close(); +#endif shutdown_hw(); } #endif Index: apps/settings.h =================================================================== --- apps/settings.h +++ apps/settings.h @@ -79,6 +79,7 @@ struct opt_items { #define VIEWERS_CONFIG ROCKBOX_DIR "/viewers.config" #define CONFIGFILE ROCKBOX_DIR "/config.cfg" #define FIXEDSETTINGSFILE ROCKBOX_DIR "/fixed.cfg" +#define LOGF_FILENAME ROCKBOX_DIR "/logf.log" #define MAX_FILENAME 32 Index: firmware/export/logf.h =================================================================== --- firmware/export/logf.h +++ firmware/export/logf.h @@ -39,6 +39,10 @@ extern unsigned char logfbuffer[MAX_LOGF_LINES][MAX_LOGF_ENTRY+1]; extern int logfindex; extern bool logfwrap; + +int logf_file_open(const char* fname); +void logf_file_close(void); +void logf_puts(char* s); #endif /* __PCTOOL__ */ #define logf _logf Index: firmware/logf.c =================================================================== --- firmware/logf.c +++ firmware/logf.c @@ -55,6 +55,9 @@ /* Only provide all this if asked to */ #ifdef ROCKBOX_HAS_LOGF +static int logf_id = -1; +static char logf_path[512]; + #ifndef __PCTOOL__ unsigned char logfbuffer[MAX_LOGF_LINES][MAX_LOGF_ENTRY+1]; int logfindex; @@ -131,6 +134,8 @@ void _logf(const char *format, ...) va_end(ap); len = strlen(buf); + logf_puts(buf); + #ifdef HAVE_SERIAL serial_tx(buf); serial_tx("\r\n"); @@ -165,6 +170,44 @@ void _logf(const char *format, ...) displayremote(); } + +int logf_file_open(const char *fname) +{ + if (logf_id < 0) + { + if (fname != logf_path) + strcpy(logf_path, fname); + logf_id = open(logf_path, O_WRONLY | O_CREAT | O_APPEND); + + if(logf_id >= 0) + logf("logf file %s open.", fname); + } + + return 0; +} + +void logf_file_close(void) +{ + if(logf_id >= 0) + { + logf_puts("testing_end"); + close(logf_id); + logf_id = -1; + } +} + +void logf_puts(char *s) +{ + if (logf_id < 0) + logf_file_open(logf_path); + + if (logf_id >= 0) + { + write(logf_id, s, strlen(s)); + write(logf_id, "\n", 1); + } +} + #endif #endif