Fix remote screen check in graphic equalizer, so that it can be used on logf-enabled...
[Rockbox.git] / firmware / logf.c
blobfc57bd85bfeb504e5799022faed532de41f0a5fb
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2005 by Daniel Stenberg
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
21 * logf() logs MAX_LOGF_ENTRY (21) bytes per entry in a circular buffer. Each
22 * logged string is space- padded for easier and faster output on screen. Just
23 * output MAX_LOGF_ENTRY characters on each line. MAX_LOGF_ENTRY bytes fit
24 * nicely on the iRiver remote LCD (128 pixels with an 8x6 pixels font).
27 #include <string.h>
28 #include <stdio.h>
29 #include <stdarg.h>
30 #include <sprintf.h>
31 #include "config.h"
32 #include "lcd-remote.h"
33 #include "logf.h"
34 #include "serial.h"
36 /* Only provide all this if asked to */
37 #ifdef ROCKBOX_HAS_LOGF
39 unsigned char logfbuffer[MAX_LOGF_LINES][MAX_LOGF_ENTRY];
40 int logfindex;
41 bool logfwrap;
43 #ifdef HAVE_REMOTE_LCD
44 static void displayremote(void)
46 /* TODO: we should have a debug option that enables/disables this! */
47 int w, h;
48 int lines;
49 int columns;
50 int i;
51 int index;
53 lcd_remote_getstringsize("A", &w, &h);
54 lines = LCD_REMOTE_HEIGHT/h;
55 columns = LCD_REMOTE_WIDTH/w;
56 lcd_remote_setmargins(0, 0);
57 lcd_remote_clear_display();
59 index = logfindex;
60 for(i = lines-1; i>=0; i--) {
61 unsigned char buffer[columns+1];
63 if(--index < 0) {
64 if(logfwrap)
65 index = MAX_LOGF_LINES-1;
66 else
67 break; /* done */
70 memcpy(buffer, logfbuffer[index], columns);
71 buffer[columns]=0;
72 lcd_remote_puts(0, i, buffer);
74 lcd_remote_update();
76 #else
77 #define displayremote()
78 #endif
80 void logf(const char *format, ...)
82 int len;
83 unsigned char *ptr;
84 va_list ap;
85 va_start(ap, format);
87 if(logfindex >= MAX_LOGF_LINES) {
88 /* wrap */
89 logfwrap = true;
90 logfindex = 0;
92 ptr = logfbuffer[logfindex];
93 len = vsnprintf(ptr, MAX_LOGF_ENTRY, format, ap);
94 #ifdef HAVE_SERIAL
95 serial_tx(ptr);
96 serial_tx("\r\n");
97 #endif
98 va_end(ap);
99 if(len < MAX_LOGF_ENTRY)
100 /* pad with spaces up to the MAX_LOGF_ENTRY byte border */
101 memset(ptr+len, ' ', MAX_LOGF_ENTRY-len);
103 logfindex++; /* leave it where we write the next time */
105 displayremote();
108 #endif