2005-05-24 14:26:23 +00:00
|
|
|
/***************************************************************************
|
|
|
|
* __________ __ ___.
|
|
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
|
|
* \/ \/ \/ \/ \/
|
|
|
|
* $Id$
|
|
|
|
*
|
|
|
|
* Copyright (C) 2005 Daniel Stenberg
|
|
|
|
*
|
2008-06-28 18:10:04 +00:00
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
|
|
|
* of the License, or (at your option) any later version.
|
2005-05-24 14:26:23 +00:00
|
|
|
*
|
|
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
|
|
* KIND, either express or implied.
|
|
|
|
*
|
|
|
|
****************************************************************************/
|
|
|
|
#include "config.h"
|
2005-05-30 13:00:43 +00:00
|
|
|
|
|
|
|
#ifdef ROCKBOX_HAS_LOGF
|
2005-06-01 13:07:37 +00:00
|
|
|
#include <file.h>
|
|
|
|
#include <sprintf.h>
|
2005-05-24 14:26:23 +00:00
|
|
|
#include <timefuncs.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <kernel.h>
|
2006-08-15 12:27:07 +00:00
|
|
|
#include <action.h>
|
2005-05-24 14:26:23 +00:00
|
|
|
|
|
|
|
#include <lcd.h>
|
|
|
|
#include "menu.h"
|
|
|
|
#include "logf.h"
|
2007-09-10 19:29:53 +00:00
|
|
|
#include "settings.h"
|
2008-04-28 10:22:05 +00:00
|
|
|
#include "logfdisp.h"
|
2005-05-24 14:26:23 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_LCD_BITMAP
|
|
|
|
bool logfdisplay(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
int w, h;
|
|
|
|
int lines;
|
2005-06-30 15:14:08 +00:00
|
|
|
int columns;
|
2005-05-24 14:26:23 +00:00
|
|
|
int i;
|
|
|
|
|
|
|
|
bool lcd = false; /* fixed atm */
|
|
|
|
int index;
|
|
|
|
|
|
|
|
lcd_getstringsize("A", &w, &h);
|
|
|
|
lines = (lcd?
|
|
|
|
#ifdef HAVE_REMOTE_LCD
|
|
|
|
LCD_REMOTE_HEIGHT
|
|
|
|
#else
|
|
|
|
0
|
|
|
|
#endif
|
|
|
|
:LCD_HEIGHT)/h;
|
2005-06-30 15:14:08 +00:00
|
|
|
columns = (lcd?
|
|
|
|
#ifdef HAVE_REMOTE_LCD
|
|
|
|
LCD_REMOTE_WIDTH
|
|
|
|
#else
|
|
|
|
0
|
|
|
|
#endif
|
|
|
|
:LCD_WIDTH)/w;
|
2006-04-11 22:19:47 +00:00
|
|
|
|
|
|
|
if (columns > MAX_LOGF_ENTRY)
|
|
|
|
columns = MAX_LOGF_ENTRY;
|
2005-06-30 15:14:08 +00:00
|
|
|
|
2005-05-24 14:26:23 +00:00
|
|
|
if(!lines)
|
|
|
|
return false;
|
|
|
|
|
|
|
|
lcd_clear_display();
|
|
|
|
|
|
|
|
do {
|
|
|
|
index = logfindex;
|
|
|
|
for(i = lines-1; i>=0; i--) {
|
2005-06-30 15:14:08 +00:00
|
|
|
unsigned char buffer[columns + 1];
|
2005-05-24 14:26:23 +00:00
|
|
|
|
|
|
|
if(--index < 0) {
|
|
|
|
if(logfwrap)
|
|
|
|
index = MAX_LOGF_LINES-1;
|
|
|
|
else
|
|
|
|
break; /* done */
|
|
|
|
}
|
|
|
|
|
2005-06-30 15:14:08 +00:00
|
|
|
memcpy(buffer, logfbuffer[index], columns);
|
|
|
|
buffer[columns]=0;
|
2005-05-24 14:26:23 +00:00
|
|
|
lcd_puts(0, i, buffer);
|
|
|
|
}
|
|
|
|
lcd_update();
|
2006-08-15 12:27:07 +00:00
|
|
|
} while(!action_userabort(HZ));
|
2005-05-24 14:26:23 +00:00
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
2005-05-30 13:00:43 +00:00
|
|
|
#else /* HAVE_LCD_BITMAP */
|
|
|
|
bool logfdisplay(void)
|
|
|
|
|
|
|
|
{
|
|
|
|
/* TODO: implement a browser for charcell bitmaps */
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
#endif /* HAVE_LCD_BITMAP */
|
|
|
|
|
2005-06-01 13:07:37 +00:00
|
|
|
/* Store the logf log to logf.txt in the .rockbox directory. The order of the
|
|
|
|
* entries will be "reversed" so that the most recently logged entry is on the
|
|
|
|
* top of the file */
|
|
|
|
bool logfdump(void)
|
|
|
|
{
|
|
|
|
int fd;
|
|
|
|
|
|
|
|
if(!logfindex && !logfwrap)
|
|
|
|
/* nothing is logged just yet */
|
|
|
|
return false;
|
|
|
|
|
2007-09-10 09:46:36 +00:00
|
|
|
fd = open(ROCKBOX_DIR "/logf.txt", O_CREAT|O_WRONLY|O_TRUNC);
|
2005-06-01 13:07:37 +00:00
|
|
|
if(-1 != fd) {
|
2005-06-01 13:21:20 +00:00
|
|
|
unsigned char buffer[MAX_LOGF_ENTRY +1];
|
2005-06-01 13:07:37 +00:00
|
|
|
int index = logfindex-1;
|
|
|
|
int stop = logfindex;
|
|
|
|
|
|
|
|
|
|
|
|
while(index != stop) {
|
|
|
|
if(index < 0) {
|
|
|
|
if(logfwrap)
|
|
|
|
index = MAX_LOGF_LINES-1;
|
|
|
|
else
|
|
|
|
break; /* done */
|
|
|
|
}
|
|
|
|
|
2005-06-01 13:21:20 +00:00
|
|
|
memcpy(buffer, logfbuffer[index], MAX_LOGF_ENTRY);
|
|
|
|
buffer[MAX_LOGF_ENTRY]=0;
|
2005-06-01 13:07:37 +00:00
|
|
|
fdprintf(fd, "%s\n", buffer);
|
|
|
|
index--;
|
|
|
|
}
|
|
|
|
close(fd);
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2005-05-30 13:00:43 +00:00
|
|
|
#endif /* ROCKBOX_HAS_LOGF */
|