Put the display colours for monochrome and greyscale targets into the target config files, and use them both for the simulator UI and screendumps. The Clip now shows the split display properly in screendumps and simulator. A side effect is that screendumps of ordinary monochrome targets are now 4-bit BMP files (saves an alternate code path, and might be more compatible with some gfx programs). * Simplify the simulation of split display, and also simplify greylib simulation. The simulator now always calculates 129 shades (2*128 for a Clip sim), and just uses 2 (or 4) of those for native display simulation. * Centralised the simulator LCD dimension definition.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19950 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2009-02-09 00:32:59 +00:00
parent 94537f954e
commit 0d935ce75e
38 changed files with 519 additions and 573 deletions

View file

@ -344,19 +344,20 @@ int fast_readline(int fd, char *buf, int buf_size, void *parameters,
#if LCD_DEPTH == 16
#define BMP_COMPRESSION 3 /* BI_BITFIELDS */
#define BMP_NUMCOLORS 3
#else
#else /* LCD_DEPTH != 16 */
#define BMP_COMPRESSION 0 /* BI_RGB */
#if LCD_DEPTH <= 8
#define BMP_NUMCOLORS (1 << LCD_DEPTH)
#ifdef HAVE_LCD_SPLIT
#define BMP_NUMCOLORS (2 << LCD_DEPTH)
#else
#define BMP_NUMCOLORS (1 << LCD_DEPTH)
#endif
#else /* LCD_DEPTH > 8 */
#define BMP_NUMCOLORS 0
#endif
#endif
#endif /* LCD_DEPTH > 8 */
#endif /* LCD_DEPTH != 16 */
#if LCD_DEPTH == 1
#define BMP_BPP 1
#define BMP_LINESIZE ((LCD_WIDTH/8 + 3) & ~3)
#elif LCD_DEPTH <= 4
#if LCD_DEPTH <= 4
#define BMP_BPP 4
#define BMP_LINESIZE ((LCD_WIDTH/2 + 3) & ~3)
#elif LCD_DEPTH <= 8
@ -386,7 +387,7 @@ static const unsigned char bmpheader[] =
0x28, 0x00, 0x00, 0x00, /* Size of (2nd) header */
LE32_CONST(LCD_WIDTH), /* Width in pixels */
LE32_CONST(LCD_HEIGHT), /* Height in pixels */
LE32_CONST(LCD_HEIGHT+LCD_SPLIT_LINES), /* Height in pixels */
0x01, 0x00, /* Number of planes (always 1) */
LE16_CONST(BMP_BPP), /* Bits per pixel 1/4/8/16/24 */
LE32_CONST(BMP_COMPRESSION),/* Compression mode */
@ -397,22 +398,26 @@ static const unsigned char bmpheader[] =
LE32_CONST(BMP_NUMCOLORS), /* Number of important colours */
#if LCD_DEPTH == 1
#ifdef MROBE_100
2, 2, 94, 0x00, /* Colour #0 */
3, 6, 241, 0x00 /* Colour #1 */
#else
0x90, 0xee, 0x90, 0x00, /* Colour #0 */
0x00, 0x00, 0x00, 0x00 /* Colour #1 */
#ifdef HAVE_NEGATIVE_LCD
BMP_COLOR(LCD_BL_DARKCOLOR),
BMP_COLOR(LCD_BL_BRIGHTCOLOR),
#ifdef HAVE_LCD_SPLIT
BMP_COLOR(LCD_BL_DARKCOLOR_2),
BMP_COLOR(LCD_BL_BRIGHTCOLOR_2),
#endif
#else /* positive display */
BMP_COLOR(LCD_BL_BRIGHTCOLOR),
BMP_COLOR(LCD_BL_DARKCOLOR),
#endif /* positive display */
#elif LCD_DEPTH == 2
0xe6, 0xd8, 0xad, 0x00, /* Colour #0 */
0x99, 0x90, 0x73, 0x00, /* Colour #1 */
0x4c, 0x48, 0x39, 0x00, /* Colour #2 */
0x00, 0x00, 0x00, 0x00 /* Colour #3 */
BMP_COLOR(LCD_BL_BRIGHTCOLOR),
BMP_COLOR_MIX(LCD_BL_BRIGHTCOLOR, LCD_BL_DARKCOLOR, 1, 3),
BMP_COLOR_MIX(LCD_BL_BRIGHTCOLOR, LCD_BL_DARKCOLOR, 2, 3),
BMP_COLOR(LCD_BL_DARKCOLOR),
#elif LCD_DEPTH == 16
0x00, 0xf8, 0x00, 0x00, /* red bitfield mask */
0xe0, 0x07, 0x00, 0x00, /* green bitfield mask */
0x1f, 0x00, 0x00, 0x00 /* blue bitfield mask */
0x1f, 0x00, 0x00, 0x00, /* blue bitfield mask */
#endif
};
@ -461,30 +466,33 @@ void screen_dump(void)
for (by = LCD_FBHEIGHT - 1; by >= 0; by--)
{
unsigned char *src = &lcd_framebuffer[by][0];
unsigned char *dst = &line_block[0][0];
unsigned char *dst = &line_block[7][0];
memset(line_block, 0, sizeof(line_block));
for (bx = LCD_WIDTH/8; bx > 0; bx--)
#ifdef HAVE_LCD_SPLIT
if (by == (LCD_SPLIT_POS/8 - 1))
write(fh, line_block, LCD_SPLIT_LINES * sizeof(line_block[0]));
#endif
for (bx = LCD_WIDTH/2; bx > 0; bx--)
{
unsigned dst_mask = 0x80;
int ix;
unsigned char *dst_blk = dst++;
unsigned src_byte0 = *src++ << 4;
unsigned src_byte1 = *src++;
int iy;
for (ix = 8; ix > 0; ix--)
for (iy = 8; iy > 0; iy--)
{
unsigned char *dst_blk = dst;
unsigned src_byte = *src++;
int iy;
for (iy = 8; iy > 0; iy--)
{
if (src_byte & 0x80)
*dst_blk |= dst_mask;
src_byte <<= 1;
dst_blk += BMP_LINESIZE;
}
dst_mask >>= 1;
*dst_blk = (src_byte0 & 0x10)
| (src_byte1 & 0x01)
#ifdef HAVE_LCD_SPLIT
| (by < (LCD_SPLIT_POS/8) ? 0x22 : 0)
#endif
;
src_byte0 >>= 1;
src_byte1 >>= 1;
dst_blk -= BMP_LINESIZE;
}
dst++;
}
write(fh, line_block, sizeof(line_block));

View file

@ -93,6 +93,18 @@ void screen_dump(void);
void screen_dump_set_hook(void (*hook)(int fh));
#endif
/* Make BMP colour map entries from R, G, B triples, without and with blending.
* Not within HAVE_LCD_BITMAP because it is also used for the Player sim */
#define RED_CMP(c) (((c) >> 16) & 0xff)
#define GREEN_CMP(c) (((c) >> 8) & 0xff)
#define BLUE_CMP(c) ((c) & 0xff)
#define BMP_COLOR(c) BLUE_CMP(c), GREEN_CMP(c), RED_CMP(c), 0
#define BMP_COLOR_MIX(c1, c2, num, den) \
(BLUE_CMP(c2) - BLUE_CMP(c1)) * (num) / (den) + BLUE_CMP(c1), \
(GREEN_CMP(c2) - GREEN_CMP(c1)) * (num) / (den) + GREEN_CMP(c1), \
(RED_CMP(c2) - RED_CMP(c1)) * (num) / (den) + RED_CMP(c1), 0
bool settings_parseline(char* line, char** name, char** value);
long default_event_handler_ex(long event, void (*callback)(void *), void *parameter);
long default_event_handler(long event);

View file

@ -61,7 +61,7 @@
static unsigned char pluginbuf[PLUGIN_BUFFER_SIZE];
void *sim_plugin_load(char *plugin, void **pd);
void sim_plugin_close(void *pd);
void sim_lcd_ex_init(int shades, unsigned long (*getpixel)(int, int));
void sim_lcd_ex_init(unsigned long (*getpixel)(int, int));
void sim_lcd_ex_update_rect(int x, int y, int width, int height);
#else
#define sim_plugin_close(x)

View file

@ -126,12 +126,12 @@ void* plugin_get_buffer(size_t *buffer_size);
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 141
#define PLUGIN_API_VERSION 142
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */
#define PLUGIN_MIN_API_VERSION 141
#define PLUGIN_MIN_API_VERSION 142
/* plugin return codes */
enum plugin_status {
@ -474,7 +474,7 @@ struct plugin_api {
#ifdef SIMULATOR
/* special simulator hooks */
#if defined(HAVE_LCD_BITMAP) && LCD_DEPTH < 8
void (*sim_lcd_ex_init)(int shades, unsigned long (*getpixel)(int, int));
void (*sim_lcd_ex_init)(unsigned long (*getpixel)(int, int));
void (*sim_lcd_ex_update_rect)(int x, int y, int width, int height);
#endif
#endif

View file

@ -355,6 +355,7 @@ static inline void _deferred_update(void)
* coordinates! */
static unsigned long _grey_get_pixel(int x, int y)
{
long val;
int xg = x - _grey_info.x;
int yg = y - _grey_info.y;
#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
@ -364,7 +365,11 @@ static unsigned long _grey_get_pixel(int x, int y)
+ (xg << _GREY_BSHIFT) + (~yg & _GREY_BMASK);
#endif
return _grey_info.values[idx] + (1 << LCD_DEPTH);
val = _grey_info.values[idx];
#ifdef HAVE_LCD_SPLIT
val -= val >> 7;
#endif
return val;
}
#else /* !SIMULATOR */
@ -634,9 +639,9 @@ void grey_show(bool enable)
{
_grey_info.flags |= _GREY_RUNNING;
#ifdef SIMULATOR
rb->sim_lcd_ex_init(129, _grey_get_pixel);
rb->sim_lcd_ex_init(_grey_get_pixel);
rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
_grey_info.width, _grey_info.height);
_grey_info.width, _grey_info.height);
#else /* !SIMULATOR */
#ifdef NEED_BOOST
rb->cpu_boost(true);
@ -655,7 +660,7 @@ void grey_show(bool enable)
else if (!enable && (_grey_info.flags & _GREY_RUNNING))
{
#ifdef SIMULATOR
rb->sim_lcd_ex_init(0, NULL);
rb->sim_lcd_ex_init(NULL);
#else /* !SIMULATOR */
rb->timer_unregister();
#if NUM_CORES > 1 /* Make sure the ISR has finished before calling lcd_update() */
@ -702,9 +707,14 @@ void grey_deferred_lcd_update(void)
/*** Screenshot ***/
#define BMP_FIXEDCOLORS (1 << LCD_DEPTH)
#define BMP_VARCOLORS 129
#define BMP_NUMCOLORS (BMP_FIXEDCOLORS + BMP_VARCOLORS)
#ifdef HAVE_LCD_SPLIT
#define GRADIENT_MAX 127
#define BMP_NUMCOLORS 256
#else
#define GRADIENT_MAX 128
#define BMP_NUMCOLORS 129
#endif
#define BMP_BPP 8
#define BMP_LINESIZE ((LCD_WIDTH + 3) & ~3)
#define BMP_HEADERSIZE (54 + 4 * BMP_NUMCOLORS)
@ -723,7 +733,7 @@ static const unsigned char bmpheader[] =
0x28, 0x00, 0x00, 0x00, /* Size of (2nd) header */
LE32_CONST(LCD_WIDTH), /* Width in pixels */
LE32_CONST(LCD_HEIGHT), /* Height in pixels */
LE32_CONST(LCD_HEIGHT+LCD_SPLIT_LINES), /* Height in pixels */
0x01, 0x00, /* Number of planes (always 1) */
LE16_CONST(BMP_BPP), /* Bits per pixel 1/4/8/16/24 */
0x00, 0x00, 0x00, 0x00, /* Compression mode, 0 = none */
@ -732,36 +742,11 @@ static const unsigned char bmpheader[] =
0xc4, 0x0e, 0x00, 0x00, /* Vertical resolution (pixels/meter) */
LE32_CONST(BMP_NUMCOLORS), /* Number of used colours */
LE32_CONST(BMP_NUMCOLORS), /* Number of important colours */
/* Fixed colours */
#if LCD_DEPTH == 1
0x90, 0xee, 0x90, 0x00, /* Colour #0 */
0x00, 0x00, 0x00, 0x00 /* Colour #1 */
#elif LCD_DEPTH == 2
0xe6, 0xd8, 0xad, 0x00, /* Colour #0 */
0x99, 0x90, 0x73, 0x00, /* Colour #1 */
0x4c, 0x48, 0x39, 0x00, /* Colour #2 */
0x00, 0x00, 0x00, 0x00 /* Colour #3 */
#endif
};
#if LCD_DEPTH == 1
#ifdef MROBE_100
#define BMP_RED 241
#define BMP_GREEN 6
#define BMP_BLUE 3
#define BMP_RED_BASE 94
#define BMP_GREEN_BASE 2
#define BMP_BLUE_BASE 2
#else
#define BMP_RED 0x90
#define BMP_GREEN 0xee
#define BMP_BLUE 0x90
#endif
#elif LCD_DEPTH == 2
#define BMP_RED 0xad
#define BMP_GREEN 0xd8
#define BMP_BLUE 0xe6
#if LCD_DEPTH == 2
/* Only defined for positive, non-split LCD for now */
static const unsigned char colorindex[4] = {128, 85, 43, 0};
#endif
/* Hook function for core screen_dump() to save the current display
@ -772,6 +757,7 @@ static void grey_screendump_hook(int fd)
int x, y, gx, gy;
#if LCD_PIXELFORMAT == VERTICAL_PACKING
#if LCD_DEPTH == 1
unsigned val;
unsigned mask;
#elif LCD_DEPTH == 2
int shift;
@ -782,37 +768,57 @@ static void grey_screendump_hook(int fd)
#endif /* LCD_PIXELFORMAT */
fb_data *lcdptr;
unsigned char *clut_entry;
unsigned char linebuf[MAX(4*BMP_VARCOLORS,BMP_LINESIZE)];
unsigned char linebuf[MAX(4*BMP_NUMCOLORS,BMP_LINESIZE)];
rb->write(fd, bmpheader, sizeof(bmpheader)); /* write header */
/* build clut */
rb->memset(linebuf, 0, 4*BMP_VARCOLORS);
rb->memset(linebuf, 0, 4*BMP_NUMCOLORS);
clut_entry = linebuf;
for (i = 0; i <= 128; i++)
for (i = 0; i <= GRADIENT_MAX; i++)
{
#ifdef MROBE_100
*clut_entry++ = (_GREY_MULUQ(BMP_BLUE-BMP_BLUE_BASE, i) >> 7) +
BMP_BLUE_BASE;
*clut_entry++ = (_GREY_MULUQ(BMP_GREEN-BMP_GREEN_BASE, i) >> 7) +
BMP_GREEN_BASE;
*clut_entry++ = (_GREY_MULUQ(BMP_RED-BMP_RED_BASE, i) >> 7) +
BMP_RED_BASE;
#else
*clut_entry++ = _GREY_MULUQ(BMP_BLUE, i) >> 7;
*clut_entry++ = _GREY_MULUQ(BMP_GREEN, i) >> 7;
*clut_entry++ = _GREY_MULUQ(BMP_RED, i) >> 7;
#endif
*clut_entry++ = (_GREY_MULUQ(BLUE_CMP(LCD_BL_BRIGHTCOLOR)
-BLUE_CMP(LCD_BL_DARKCOLOR), i) >> 7)
+ BLUE_CMP(LCD_BL_DARKCOLOR);
*clut_entry++ = (_GREY_MULUQ(GREEN_CMP(LCD_BL_BRIGHTCOLOR)
-GREEN_CMP(LCD_BL_DARKCOLOR), i) >> 7)
+ GREEN_CMP(LCD_BL_DARKCOLOR);
*clut_entry++ = (_GREY_MULUQ(RED_CMP(LCD_BL_BRIGHTCOLOR)
-RED_CMP(LCD_BL_DARKCOLOR), i) >> 7)
+ RED_CMP(LCD_BL_DARKCOLOR);
clut_entry++;
}
rb->write(fd, linebuf, 4*BMP_VARCOLORS);
#ifdef HAVE_LCD_SPLIT
for (i = 0; i <= GRADIENT_MAX; i++)
{
*clut_entry++ = (_GREY_MULUQ(BLUE_CMP(LCD_BL_BRIGHTCOLOR_2)
-BLUE_CMP(LCD_BL_DARKCOLOR_2), i) >> 7)
+ BLUE_CMP(LCD_BL_DARKCOLOR_2);
*clut_entry++ = (_GREY_MULUQ(GREEN_CMP(LCD_BL_BRIGHTCOLOR_2)
-GREEN_CMP(LCD_BL_DARKCOLOR_2), i) >> 7)
+ GREEN_CMP(LCD_BL_DARKCOLOR_2);
*clut_entry++ = (_GREY_MULUQ(RED_CMP(LCD_BL_BRIGHTCOLOR_2)
-RED_CMP(LCD_BL_DARKCOLOR_2), i) >> 7)
+ RED_CMP(LCD_BL_DARKCOLOR_2);
clut_entry++;
}
#endif
rb->write(fd, linebuf, 4*BMP_NUMCOLORS);
/* BMP image goes bottom -> top */
for (y = LCD_HEIGHT - 1; y >= 0; y--)
{
rb->memset(linebuf, 0, BMP_LINESIZE);
#if defined(HAVE_LCD_SPLIT) && (LCD_SPLIT_LINES == 2)
if (y == LCD_SPLIT_POS - 1)
{
rb->write(fd, linebuf, BMP_LINESIZE);
rb->write(fd, linebuf, BMP_LINESIZE);
}
#endif
gy = y - _grey_info.y;
#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
#if LCD_DEPTH == 2
@ -828,15 +834,15 @@ static void grey_screendump_hook(int fd)
unsigned char *src = _grey_info.values
+ _GREY_MULUQ(_grey_info.width, gy) + gx;
for (i = 0; i < 4; i++)
linebuf[x + i] = BMP_FIXEDCOLORS + *src++;
linebuf[x + i] = *src++;
}
else
{
unsigned data = *lcdptr;
linebuf[x] = (data >> 6) & 3;
linebuf[x + 1] = (data >> 4) & 3;
linebuf[x + 2] = (data >> 2) & 3;
linebuf[x + 3] = data & 3;
linebuf[x] = colorindex[(data >> 6) & 3];
linebuf[x + 1] = colorindex[(data >> 4) & 3];
linebuf[x + 2] = colorindex[(data >> 2) & 3];
linebuf[x + 3] = colorindex[data & 3];
}
lcdptr++;
}
@ -853,16 +859,27 @@ static void grey_screendump_hook(int fd)
if (((unsigned)gy < (unsigned)_grey_info.height)
&& ((unsigned)gx < (unsigned)_grey_info.width))
{
linebuf[x] = BMP_FIXEDCOLORS
+ _grey_info.values[_GREY_MULUQ(_grey_info.width,
gy & ~_GREY_BMASK)
+ (gx << _GREY_BSHIFT)
+ (~gy & _GREY_BMASK)];
val = _grey_info.values[_GREY_MULUQ(_grey_info.width,
gy & ~_GREY_BMASK)
+ (gx << _GREY_BSHIFT)
+ (~gy & _GREY_BMASK)];
#ifdef HAVE_LCD_SPLIT
val -= val >> 7;
#endif
}
else
{
linebuf[x] = (*lcdptr & mask) ? 1 : 0;
#ifdef HAVE_NEGATIVE_LCD
val = (*lcdptr & mask) ? GRADIENT_MAX : 0;
#else
val = (*lcdptr & mask) ? 0 : GRADIENT_MAX;
#endif
}
#ifdef HAVE_LCD_SPLIT
if (y < LCD_SPLIT_POS)
val |= 0x80;
#endif
linebuf[x] = val;
lcdptr++;
}
#elif LCD_DEPTH == 2
@ -876,15 +893,14 @@ static void grey_screendump_hook(int fd)
if (((unsigned)gy < (unsigned)_grey_info.height)
&& ((unsigned)gx < (unsigned)_grey_info.width))
{
linebuf[x] = BMP_FIXEDCOLORS
+ _grey_info.values[_GREY_MULUQ(_grey_info.width,
linebuf[x] = _grey_info.values[_GREY_MULUQ(_grey_info.width,
gy & ~_GREY_BMASK)
+ (gx << _GREY_BSHIFT)
+ (~gy & _GREY_BMASK)];
}
else
{
linebuf[x] = (*lcdptr >> shift) & 3;
linebuf[x] = colorindex[(*lcdptr >> shift) & 3];
}
lcdptr++;
}
@ -901,8 +917,7 @@ static void grey_screendump_hook(int fd)
if (((unsigned)gy < (unsigned)_grey_info.height)
&& ((unsigned)gx < (unsigned)_grey_info.width))
{
linebuf[x] = BMP_FIXEDCOLORS
+ _grey_info.values[_GREY_MULUQ(_grey_info.width,
linebuf[x] = _grey_info.values[_GREY_MULUQ(_grey_info.width,
gy & ~_GREY_BMASK)
+ (gx << _GREY_BSHIFT)
+ (~gy & _GREY_BMASK)];
@ -910,7 +925,7 @@ static void grey_screendump_hook(int fd)
else
{
data = (*lcdptr >> shift) & 0x0101;
linebuf[x] = ((data >> 7) | data) & 3;
linebuf[x] = colorindex[((data >> 7) | data) & 3];
}
lcdptr++;
}

View file

@ -45,7 +45,24 @@
#define LCD_WIDTH 128
#define LCD_HEIGHT 64
#define LCD_DEPTH 1
#define LCD_PIXELFORMAT VERTICAL_PACKING
#define HAVE_NEGATIVE_LCD /* bright on dark */
#define HAVE_LCD_SPLIT /* split display */
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x000000
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x0de2e5
#define LCD_DARKCOLOR_2 0x000000
#define LCD_BRIGHTCOLOR_2 0x000000
#define LCD_BL_DARKCOLOR_2 0x000000
#define LCD_BL_BRIGHTCOLOR_2 0xffe60f
#define LCD_SPLIT_POS 16
#define LCD_SPLIT_LINES 2
/* define this if you have LCD enable function */
#define HAVE_LCD_ENABLE

View file

@ -39,6 +39,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x7ee57e
/* define this if you have a Recorder style 10-key keyboard */
#define CONFIG_KEYPAD RECORDER_PAD

View file

@ -44,6 +44,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x7e917e
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xadd8e6
/* remote LCD */
#define LCD_REMOTE_WIDTH 128
#define LCD_REMOTE_HEIGHT 64
@ -51,6 +57,12 @@
#define LCD_REMOTE_PIXELFORMAT VERTICAL_PACKING
/* Remote display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_REMOTE_DARKCOLOR 0x000000
#define LCD_REMOTE_BRIGHTCOLOR 0x5a915a
#define LCD_REMOTE_BL_DARKCOLOR 0x000000
#define LCD_REMOTE_BL_BRIGHTCOLOR 0x82b4fa
#define CONFIG_KEYPAD IRIVER_H100_PAD
#define CONFIG_REMOTE_KEYPAD H100_REMOTE

View file

@ -39,6 +39,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x7e917e
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xadd8e6
/* remote LCD */
#define LCD_REMOTE_WIDTH 128
#define LCD_REMOTE_HEIGHT 64
@ -46,6 +52,12 @@
#define LCD_REMOTE_PIXELFORMAT VERTICAL_PACKING
/* Remote display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_REMOTE_DARKCOLOR 0x000000
#define LCD_REMOTE_BRIGHTCOLOR 0x5a915a
#define LCD_REMOTE_BL_DARKCOLOR 0x000000
#define LCD_REMOTE_BL_BRIGHTCOLOR 0x82b4fa
#define CONFIG_KEYPAD IRIVER_H100_PAD
#define CONFIG_REMOTE_KEYPAD H100_REMOTE

View file

@ -45,6 +45,12 @@
#define LCD_REMOTE_PIXELFORMAT VERTICAL_PACKING
/* Remote display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_REMOTE_DARKCOLOR 0x000000
#define LCD_REMOTE_BRIGHTCOLOR 0x5a915a
#define LCD_REMOTE_BL_DARKCOLOR 0x000000
#define LCD_REMOTE_BL_BRIGHTCOLOR 0x82b4fa
#define CONFIG_KEYPAD IRIVER_H300_PAD
#define CONFIG_REMOTE_KEYPAD H300_REMOTE

View file

@ -52,6 +52,12 @@
#define LCD_PIXELFORMAT VERTICAL_INTERLEAVED
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x7e917e
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x82b4fa
/* define this if only the remote has an LCD */
#define HAVE_REMOTE_LCD_AS_MAIN

View file

@ -52,6 +52,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x648764
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xdfd8ff
/* remote LCD */
#define LCD_REMOTE_WIDTH 128
#define LCD_REMOTE_HEIGHT 96
@ -59,6 +65,12 @@
#define LCD_REMOTE_PIXELFORMAT VERTICAL_INTERLEAVED
/* Remote display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_REMOTE_DARKCOLOR 0x000000
#define LCD_REMOTE_BRIGHTCOLOR 0x5a915a
#define LCD_REMOTE_BL_DARKCOLOR 0x000000
#define LCD_REMOTE_BL_BRIGHTCOLOR 0x82b4fa
#define CONFIG_KEYPAD IAUDIO_X5M5_PAD
#define AB_REPEAT_ENABLE 1

View file

@ -61,6 +61,12 @@
#define LCD_REMOTE_PIXELFORMAT VERTICAL_INTERLEAVED
/* Remote display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_REMOTE_DARKCOLOR 0x000000
#define LCD_REMOTE_BRIGHTCOLOR 0x5a915a
#define LCD_REMOTE_BL_DARKCOLOR 0x000000
#define LCD_REMOTE_BL_BRIGHTCOLOR 0x82b4fa
#ifndef BOOTLOADER
/* Define this if your LCD can be enabled/disabled */
#define HAVE_LCD_ENABLE

View file

@ -29,6 +29,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5e6854
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x3ca0e6
#define CONFIG_KEYPAD IRIVER_IFP7XX_PAD
#define CONFIG_STORAGE STORAGE_NAND

View file

@ -51,6 +51,12 @@
#define LCD_PIXELFORMAT HORIZONTAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x648764
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xdfd8ff
/* define this if you can flip your LCD */
#define HAVE_LCD_FLIP

View file

@ -52,6 +52,12 @@
#define LCD_PIXELFORMAT HORIZONTAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xadd8e6
/* define this if you can flip your LCD */
#define HAVE_LCD_FLIP

View file

@ -52,6 +52,12 @@
#define LCD_DEPTH 2 /* 4 colours - 2bpp */
#define LCD_PIXELFORMAT HORIZONTAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xadd8e6
#define HAVE_LCD_CONTRAST
/* LCD contrast */

View file

@ -51,6 +51,12 @@
#define LCD_PIXELFORMAT HORIZONTAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x648764
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xdfd8ff
#define HAVE_LCD_CONTRAST
/* LCD contrast */

View file

@ -51,6 +51,12 @@
#define LCD_PIXELFORMAT HORIZONTAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x648764
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0xdfd8ff
#define HAVE_LCD_CONTRAST
/* LCD contrast */

View file

@ -55,6 +55,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x82b4fa
/* define this to indicate your device's keypad */
#define CONFIG_KEYPAD LOGIK_DAX_PAD

View file

@ -49,6 +49,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_BARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5e6854
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x3ca0e6
/* define this to indicate your device's keypad */
#define CONFIG_KEYPAD SANSA_M200_PAD

View file

@ -58,6 +58,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_BARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5e6854
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x3ca0e6
/* define this to indicate your device's keypad */
#define CONFIG_KEYPAD SANSA_M200_PAD

View file

@ -27,7 +27,15 @@
#define LCD_WIDTH 160
#define LCD_HEIGHT 128
#define LCD_DEPTH 1
#define LCD_PIXELFORMAT VERTICAL_PACKING
#define LCD_PIXELFORMAT VERTICAL_PACKING
#define HAVE_NEGATIVE_LCD /* bright on dark */
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x323232
#define LCD_BL_DARKCOLOR 0x5e0202
#define LCD_BL_BRIGHTCOLOR 0xf10603
/* define this if you can flip your LCD */
#define HAVE_LCD_FLIP

View file

@ -29,6 +29,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x82b4fa
/* define this if you have an Ondio style 6-key keyboard */
#define CONFIG_KEYPAD ONDIO_PAD

View file

@ -22,6 +22,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x82b4fa
/* define this if you have an Ondio style 6-key keyboard */
#define CONFIG_KEYPAD ONDIO_PAD

View file

@ -15,6 +15,12 @@
#define SIM_LCD_WIDTH 132 /* pixels */
#define SIM_LCD_HEIGHT 64 /* pixels */
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x7ee57e
/* define this if you have the Player's keyboard */
#define CONFIG_KEYPAD PLAYER_PAD

View file

@ -39,6 +39,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x7ee57e
/* define this if you have the Recorder's 10-key keyboard */
#define CONFIG_KEYPAD RECORDER_PAD

View file

@ -39,6 +39,12 @@
#define LCD_PIXELFORMAT VERTICAL_PACKING
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x5a915a
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x7ee57e
/* define this if you have a Recorder style 10-key keyboard */
#define CONFIG_KEYPAD RECORDER_PAD

View file

@ -412,6 +412,28 @@
#define LCD_PIXEL_ASPECT_WIDTH 1
#endif
/* Used for split displays (Sansa Clip). Set to 0 otherwise */
#ifndef LCD_SPLIT_LINES
#define LCD_SPLIT_LINES 0
#endif
/* Simulator LCD dimensions. Set to standard dimensions if undefined */
#ifndef SIM_LCD_WIDTH
#define SIM_LCD_WIDTH LCD_WIDTH
#endif
#ifndef SIM_LCD_HEIGHT
#define SIM_LCD_HEIGHT (LCD_HEIGHT + LCD_SPLIT_LINES)
#endif
#ifdef HAVE_REMOTE_LCD
#ifndef SIM_REMOTE_WIDTH
#define SIM_REMOTE_WIDTH LCD_REMOTE_WIDTH
#endif
#ifndef SIM_REMOTE_HEIGHT
#define SIM_REMOTE_HEIGHT LCD_REMOTE_HEIGHT
#endif
#endif /* HAVE_REMOTE_LCD */
/* define this in the target config.h to use a different size */
#ifndef CONFIG_DEFAULT_ICON_HEIGHT
#define CONFIG_DEFAULT_ICON_HEIGHT 8

View file

@ -1295,7 +1295,7 @@ void mouse_tick_task(void)
x -= UI_LCD_POSX;
y -= UI_LCD_POSY;
if(x<0 || y<0 || x>UI_LCD_WIDTH || y>UI_LCD_HEIGHT)
if(x<0 || y<0 || x>SIM_LCD_WIDTH || y>SIM_LCD_HEIGHT)
return;
}

View file

@ -22,45 +22,74 @@
#include "debug.h"
#include "uisdl.h"
#include "lcd-sdl.h"
#include "misc.h"
SDL_Surface* lcd_surface;
#ifdef UI_LCD_SPLIT
SDL_Surface* lcd_real_surface; /* the surface which represents the real screen */
#endif
int lcd_backlight_val;
#if LCD_DEPTH <= 8
#ifdef HAVE_BACKLIGHT
SDL_Color lcd_backlight_color_zero = {UI_LCD_BGCOLORLIGHT, 0};
SDL_Color lcd_backlight_color_max = {UI_LCD_FGCOLORLIGHT, 0};
#ifdef UI_LCD_SPLIT
SDL_Color lcd_backlight_color_split= {UI_LCD_SPLIT_FGCOLORLIGHT, 0};
#endif
#endif
SDL_Color lcd_color_zero = {UI_LCD_BGCOLOR, 0};
SDL_Color lcd_color_max = {UI_LCD_FGCOLOR, 0};
#ifdef UI_LCD_SPLIT
SDL_Color lcd_color_split= {UI_LCD_SPLIT_FGCOLOR, 0};
SDL_Color lcd_bl_color_dark = {RED_CMP(LCD_BL_DARKCOLOR),
GREEN_CMP(LCD_BL_DARKCOLOR),
BLUE_CMP(LCD_BL_DARKCOLOR), 0};
SDL_Color lcd_bl_color_bright = {RED_CMP(LCD_BL_BRIGHTCOLOR),
GREEN_CMP(LCD_BL_BRIGHTCOLOR),
BLUE_CMP(LCD_BL_BRIGHTCOLOR), 0};
#ifdef HAVE_LCD_SPLIT
SDL_Color lcd_bl_color2_dark = {RED_CMP(LCD_BL_DARKCOLOR_2),
GREEN_CMP(LCD_BL_DARKCOLOR_2),
BLUE_CMP(LCD_BL_DARKCOLOR_2), 0};
SDL_Color lcd_bl_color2_bright = {RED_CMP(LCD_BL_BRIGHTCOLOR_2),
GREEN_CMP(LCD_BL_BRIGHTCOLOR_2),
BLUE_CMP(LCD_BL_BRIGHTCOLOR_2), 0};
#endif
#endif /* HAVE_BACKLIGHT */
SDL_Color lcd_color_dark = {RED_CMP(LCD_DARKCOLOR),
GREEN_CMP(LCD_DARKCOLOR),
BLUE_CMP(LCD_DARKCOLOR), 0};
SDL_Color lcd_color_bright = {RED_CMP(LCD_BRIGHTCOLOR),
GREEN_CMP(LCD_BRIGHTCOLOR),
BLUE_CMP(LCD_BRIGHTCOLOR), 0};
#ifdef HAVE_LCD_SPLIT
SDL_Color lcd_color2_dark = {RED_CMP(LCD_DARKCOLOR_2),
GREEN_CMP(LCD_DARKCOLOR_2),
BLUE_CMP(LCD_DARKCOLOR_2), 0};
SDL_Color lcd_color2_bright = {RED_CMP(LCD_BRIGHTCOLOR_2),
GREEN_CMP(LCD_BRIGHTCOLOR_2),
BLUE_CMP(LCD_BRIGHTCOLOR_2), 0};
#endif
#ifdef HAVE_LCD_SPLIT
#define GRADIENT_MAX 127
#else
#define GRADIENT_MAX 128
#endif
#endif /* LCD_DEPTH <= 8 */
#if LCD_DEPTH < 8
int lcd_ex_shades = 0;
unsigned long (*lcd_ex_getpixel)(int, int) = NULL;
#endif /* LCD_DEPTH < 8 */
#if LCD_DEPTH == 2
/* Only defined for positive, non-split LCD for now */
static const unsigned char colorindex[4] = {128, 85, 43, 0};
#endif
static unsigned long get_lcd_pixel(int x, int y)
{
#if LCD_DEPTH == 1
return ((lcd_framebuffer[y/8][x] >> (y & 7)) & 1);
#ifdef HAVE_NEGATIVE_LCD
return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? GRADIENT_MAX : 0;
#else
return (lcd_framebuffer[y/8][x] & (1 << (y & 7))) ? 0 : GRADIENT_MAX;
#endif
#elif LCD_DEPTH == 2
#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
return ((lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3);
return colorindex[(lcd_framebuffer[y][x/4] >> (2 * (~x & 3))) & 3];
#elif LCD_PIXELFORMAT == VERTICAL_PACKING
return ((lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3);
return colorindex[(lcd_framebuffer[y/4][x] >> (2 * (y & 3))) & 3];
#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED
unsigned bits = (lcd_framebuffer[y/8][x] >> (y & 7)) & 0x0101;
return (bits | (bits >> 7)) & 3;
return colorindex[(bits | (bits >> 7)) & 3];
#endif
#elif LCD_DEPTH == 16
#if LCD_PIXELFORMAT == RGB565SWAPPED
@ -80,148 +109,77 @@ void lcd_update(void)
void lcd_update_rect(int x_start, int y_start, int width, int height)
{
sdl_update_rect(lcd_surface, x_start, y_start, width, height, LCD_WIDTH,
LCD_HEIGHT, get_lcd_pixel);
sdl_gui_update(lcd_surface, IFSPLIT(lcd_real_surface,) x_start, y_start,
width, height, LCD_WIDTH, LCD_HEIGHT,
sdl_update_rect(lcd_surface, x_start, y_start, width, height,
LCD_WIDTH, LCD_HEIGHT, get_lcd_pixel);
sdl_gui_update(lcd_surface, x_start, y_start, width,
height + LCD_SPLIT_LINES, SIM_LCD_WIDTH, SIM_LCD_HEIGHT,
background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0);
}
#ifdef HAVE_BACKLIGHT
void sim_backlight(int value)
{
lcd_backlight_val = value;
#if LCD_DEPTH <= 8
if (value > 0) {
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max, &lcd_backlight_color_zero,
&lcd_backlight_color_split, 0, (1<<LCD_DEPTH));
#else
sdl_set_gradient(lcd_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max, 0, (1<<LCD_DEPTH));
sdl_set_gradient(lcd_surface, &lcd_bl_color_dark,
&lcd_bl_color_bright, 0, GRADIENT_MAX+1);
#ifdef HAVE_LCD_SPLIT
sdl_set_gradient(lcd_surface, &lcd_bl_color2_dark,
&lcd_bl_color2_bright, GRADIENT_MAX+1, GRADIENT_MAX+1);
#endif
} else {
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_color_zero, &lcd_color_max,
&lcd_color_zero, &lcd_color_split, 0, (1<<LCD_DEPTH));
#else
sdl_set_gradient(lcd_surface, &lcd_color_zero, &lcd_color_max, 0,
(1<<LCD_DEPTH));
sdl_set_gradient(lcd_surface, &lcd_color_dark,
&lcd_color_bright, 0, GRADIENT_MAX+1);
#ifdef HAVE_LCD_SPLIT
sdl_set_gradient(lcd_surface, &lcd_color2_dark,
&lcd_color2_bright, GRADIENT_MAX+1, GRADIENT_MAX+1);
#endif
}
#if LCD_DEPTH < 8
if (lcd_ex_shades) {
if (value > 0) {
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_backlight_color_max,
&lcd_backlight_color_zero, &lcd_backlight_color_split,
&lcd_backlight_color_zero,
(1<<LCD_DEPTH), lcd_ex_shades);
#elif defined MROBE_100
/* quick fix, a proper fix needs to compare brightnesses */
sdl_set_gradient(lcd_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max, (1<<LCD_DEPTH), lcd_ex_shades);
#else
sdl_set_gradient(lcd_surface, &lcd_backlight_color_max,
&lcd_backlight_color_zero, (1<<LCD_DEPTH), lcd_ex_shades);
#endif
} else {
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_color_max, &lcd_color_zero,
&lcd_color_split, &lcd_color_zero, (1<<LCD_DEPTH),
lcd_ex_shades);
#elif defined MROBE_100
/* quick fix, a proper fix needs to compare brightnesses */
sdl_set_gradient(lcd_surface, &lcd_color_zero, &lcd_color_max,
(1<<LCD_DEPTH), lcd_ex_shades);
#else
sdl_set_gradient(lcd_surface, &lcd_color_max, &lcd_color_zero,
(1<<LCD_DEPTH), lcd_ex_shades);
#endif
}
}
#endif
sdl_gui_update(lcd_surface, IFSPLIT(lcd_real_surface,) 0, 0, LCD_WIDTH,
LCD_HEIGHT, LCD_WIDTH, LCD_HEIGHT,
sdl_gui_update(lcd_surface, 0, 0, SIM_LCD_WIDTH, SIM_LCD_HEIGHT,
SIM_LCD_WIDTH, SIM_LCD_HEIGHT,
background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0);
#endif
#endif /* LCD_DEPTH <= 8 */
}
#endif
#endif /* HAVE_BACKLIGHT */
/* initialise simulator lcd driver */
void sim_lcd_init(void)
{
#if LCD_DEPTH == 16
lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, LCD_WIDTH * display_zoom,
LCD_HEIGHT * display_zoom, LCD_DEPTH, 0, 0, 0, 0);
lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
SIM_LCD_WIDTH * display_zoom,
SIM_LCD_HEIGHT * display_zoom,
LCD_DEPTH, 0, 0, 0, 0);
#else
lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE, LCD_WIDTH * display_zoom,
LCD_HEIGHT * display_zoom, 8, 0, 0, 0, 0);
#ifdef UI_LCD_SPLIT
lcd_real_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
LCD_WIDTH * display_zoom,
(LCD_HEIGHT+UI_LCD_SPLIT_BLACK_LINES) * display_zoom, 8, 0, 0, 0, 0);
#endif
lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
SIM_LCD_WIDTH * display_zoom,
SIM_LCD_HEIGHT * display_zoom,
8, 0, 0, 0, 0);
#endif
#if LCD_DEPTH <= 8
#ifdef HAVE_BACKLIGHT
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max, &lcd_backlight_color_zero,
&lcd_backlight_color_split, 0, (1<<LCD_DEPTH));
#else
sdl_set_gradient(lcd_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max, 0, (1<<LCD_DEPTH));
#endif
#else
sdl_set_gradient(lcd_surface, &lcd_color_zero, &lcd_color_max, 0,
(1<<LCD_DEPTH));
sdl_set_gradient(lcd_surface, &lcd_bl_color_dark,
&lcd_bl_color_bright, 0, GRADIENT_MAX+1);
#ifdef HAVE_LCD_SPLIT
sdl_set_gradient(lcd_surface, &lcd_bl_color2_dark,
&lcd_bl_color2_bright, GRADIENT_MAX+1, GRADIENT_MAX+1);
#endif
#else /* !HAVE_BACKLIGHT */
sdl_set_gradient(lcd_surface, &lcd_color_dark,
&lcd_color_bright, 0, GRADIENT_MAX+1);
#ifdef HAVE_LCD_SPLIT
sdl_set_gradient(lcd_surface, &lcd_color2_dark,
&lcd_color2_bright, GRADIENT_MAX+1, GRADIENT_MAX+1);
#endif
#endif /* !HAVE_BACKLIGHT */
#endif /* LCD_DEPTH < 8 */
}
#if LCD_DEPTH < 8
void sim_lcd_ex_init(int shades, unsigned long (*getpixel)(int, int))
void sim_lcd_ex_init(unsigned long (*getpixel)(int, int))
{
lcd_ex_shades = shades;
lcd_ex_getpixel = getpixel;
if (shades) {
#ifdef HAVE_BACKLIGHT
if (lcd_backlight_val > 0) {
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_backlight_color_max,
&lcd_backlight_color_zero, &lcd_backlight_color_split,
&lcd_backlight_color_zero, (1<<LCD_DEPTH), shades);
#elif defined MROBE_100
/* quick fix, a proper fix needs to compare brightnesses */
sdl_set_gradient(lcd_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max, (1<<LCD_DEPTH), shades);
#else
sdl_set_gradient(lcd_surface, &lcd_backlight_color_max,
&lcd_backlight_color_zero, (1<<LCD_DEPTH), shades);
#endif
}
else
#endif
{
#ifdef UI_LCD_SPLIT
sdl_set_gradient(lcd_real_surface, &lcd_color_max, &lcd_color_zero,
&lcd_color_split, &lcd_color_zero, (1<<LCD_DEPTH), shades);
#elif defined MROBE_100
/* quick fix, a proper fix needs to compare brightnesses */
sdl_set_gradient(lcd_surface, &lcd_color_zero, &lcd_color_max,
(1<<LCD_DEPTH), shades);
#else
sdl_set_gradient(lcd_surface, &lcd_color_max, &lcd_color_zero,
(1<<LCD_DEPTH), shades);
#endif
}
}
}
void sim_lcd_ex_update_rect(int x_start, int y_start, int width, int height)
@ -229,10 +187,10 @@ void sim_lcd_ex_update_rect(int x_start, int y_start, int width, int height)
if (lcd_ex_getpixel) {
sdl_update_rect(lcd_surface, x_start, y_start, width, height,
LCD_WIDTH, LCD_HEIGHT, lcd_ex_getpixel);
sdl_gui_update(lcd_surface, IFSPLIT(lcd_real_surface,) x_start, y_start,
width, height, LCD_WIDTH, LCD_HEIGHT,
sdl_gui_update(lcd_surface, x_start, y_start, width,
height + LCD_SPLIT_LINES, SIM_LCD_WIDTH, SIM_LCD_HEIGHT,
background ? UI_LCD_POSX : 0,
background? UI_LCD_POSY : 0);
background ? UI_LCD_POSY : 0);
}
}
#endif

View file

@ -27,7 +27,7 @@
void sim_lcd_init(void);
#if LCD_DEPTH < 8
void sim_lcd_ex_init(int shades, unsigned long (*getpixel)(int, int));
void sim_lcd_ex_init(unsigned long (*getpixel)(int, int));
void sim_lcd_ex_update_rect(int x, int y, int width, int height);
#endif

View file

@ -35,10 +35,19 @@
extern int sim_creat(const char *name);
SDL_Surface* lcd_surface;
SDL_Color lcd_color_zero = {UI_LCD_BGCOLOR, 0};
SDL_Color lcd_backlight_color_zero = {UI_LCD_BGCOLORLIGHT, 0};
SDL_Color lcd_color_max = {UI_LCD_FGCOLOR, 0};
SDL_Color lcd_backlight_color_max = {UI_LCD_FGCOLORLIGHT, 0};
SDL_Color lcd_bl_color_dark = {RED_CMP(LCD_BL_DARKCOLOR),
GREEN_CMP(LCD_BL_DARKCOLOR),
BLUE_CMP(LCD_BL_DARKCOLOR), 0};
SDL_Color lcd_bl_color_bright = {RED_CMP(LCD_BL_BRIGHTCOLOR),
GREEN_CMP(LCD_BL_BRIGHTCOLOR),
BLUE_CMP(LCD_BL_BRIGHTCOLOR), 0};
SDL_Color lcd_color_dark = {RED_CMP(LCD_DARKCOLOR),
GREEN_CMP(LCD_DARKCOLOR),
BLUE_CMP(LCD_DARKCOLOR), 0};
SDL_Color lcd_color_bright = {RED_CMP(LCD_BRIGHTCOLOR),
GREEN_CMP(LCD_BRIGHTCOLOR),
BLUE_CMP(LCD_BRIGHTCOLOR), 0};
static unsigned long get_lcd_pixel(int x, int y)
@ -78,12 +87,11 @@ void lcd_update(void)
void sim_backlight(int value)
{
if (value > 0) {
sdl_set_gradient(lcd_surface, &lcd_backlight_color_zero,
&lcd_backlight_color_max,
0, (1<<LCD_DEPTH));
sdl_set_gradient(lcd_surface, &lcd_bl_color_bright,
&lcd_bl_color_dark, 0, (1<<LCD_DEPTH));
} else {
sdl_set_gradient(lcd_surface, &lcd_color_zero, &lcd_color_max,
0, (1<<LCD_DEPTH));
sdl_set_gradient(lcd_surface, &lcd_color_bright,
&lcd_color_dark, 0, (1<<LCD_DEPTH));
}
sim_lcd_update_rect(0, 0, SIM_LCD_WIDTH, SIM_LCD_HEIGHT);
@ -98,8 +106,8 @@ void sim_lcd_init(void)
SIM_LCD_HEIGHT * display_zoom,
8, 0, 0, 0, 0);
sdl_set_gradient(lcd_surface, &lcd_backlight_color_zero, &lcd_color_max,
0, (1<<LCD_DEPTH));
sdl_set_gradient(lcd_surface, &lcd_bl_color_bright,
&lcd_bl_color_dark, 0, (1<<LCD_DEPTH));
}
#define BMP_COMPRESSION 0 /* BI_RGB */
@ -133,8 +141,8 @@ static const unsigned char bmpheader[] =
LE32_CONST(BMP_NUMCOLORS), /* Number of used colours */
LE32_CONST(BMP_NUMCOLORS), /* Number of important colours */
0x90, 0xee, 0x90, 0x00, /* Colour #0 */
0x00, 0x00, 0x00, 0x00 /* Colour #1 */
BMP_COLOR(LCD_BL_BRIGHTCOLOR),
BMP_COLOR(LCD_BL_DARKCOLOR)
};
void screen_dump(void)

View file

@ -22,20 +22,38 @@
#include "uisdl.h"
#include "lcd-sdl.h"
#include "lcd-remote-bitmap.h"
#include "misc.h"
SDL_Surface *remote_surface;
SDL_Color remote_color_zero = {UI_REMOTE_BGCOLOR, 0};
SDL_Color remote_backlight_color_zero = {UI_REMOTE_BGCOLORLIGHT, 0};
SDL_Color remote_color_max = {0, 0, 0, 0};
SDL_Color remote_bl_color_dark = {RED_CMP(LCD_REMOTE_BL_DARKCOLOR),
GREEN_CMP(LCD_REMOTE_BL_DARKCOLOR),
BLUE_CMP(LCD_REMOTE_BL_DARKCOLOR), 0};
SDL_Color remote_bl_color_bright = {RED_CMP(LCD_REMOTE_BL_BRIGHTCOLOR),
GREEN_CMP(LCD_REMOTE_BL_BRIGHTCOLOR),
BLUE_CMP(LCD_REMOTE_BL_BRIGHTCOLOR), 0};
SDL_Color remote_color_dark = {RED_CMP(LCD_REMOTE_DARKCOLOR),
GREEN_CMP(LCD_REMOTE_DARKCOLOR),
BLUE_CMP(LCD_REMOTE_DARKCOLOR), 0};
SDL_Color remote_color_bright = {RED_CMP(LCD_REMOTE_BRIGHTCOLOR),
GREEN_CMP(LCD_REMOTE_BRIGHTCOLOR),
BLUE_CMP(LCD_REMOTE_BRIGHTCOLOR), 0};
static unsigned long get_lcd_remote_pixel(int x, int y) {
#define GRADIENT_MAX 128
#if LCD_REMOTE_DEPTH == 2
/* Only defined for positive, non-split LCD for now */
static const unsigned char colorindex[4] = {128, 85, 43, 0};
#endif
static unsigned long get_lcd_remote_pixel(int x, int y)
{
#if LCD_REMOTE_DEPTH == 1
return (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 1;
return lcd_remote_framebuffer[y/8][x] & (1 << (y & 7)) ? 0 : GRADIENT_MAX;
#elif LCD_REMOTE_DEPTH == 2
#if LCD_REMOTE_PIXELFORMAT == VERTICAL_INTERLEAVED
unsigned bits = (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 0x0101;
return (bits | (bits >> 7)) & 3;
return colorindex[(bits | (bits >> 7)) & 3];
#endif
#endif
}
@ -57,11 +75,11 @@ void lcd_remote_update_rect(int x_start, int y_start, int width, int height)
void sim_remote_backlight(int value)
{
if (value > 0) {
sdl_set_gradient(remote_surface, &remote_backlight_color_zero,
&remote_color_max, 0, (1<<LCD_REMOTE_DEPTH));
sdl_set_gradient(remote_surface, &remote_bl_color_dark,
&remote_bl_color_bright, 0, GRADIENT_MAX+1);
} else {
sdl_set_gradient(remote_surface, &remote_color_zero, &remote_color_max,
0, (1<<LCD_REMOTE_DEPTH));
sdl_set_gradient(remote_surface, &remote_color_dark,
&remote_color_bright, 0, GRADIENT_MAX+1);
}
sdl_gui_update(remote_surface, 0, 0, LCD_REMOTE_WIDTH, LCD_REMOTE_HEIGHT,
@ -74,10 +92,11 @@ void sim_remote_backlight(int value)
void sim_lcd_remote_init(void)
{
remote_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
LCD_REMOTE_WIDTH * display_zoom, LCD_REMOTE_HEIGHT * display_zoom,
8, 0, 0, 0, 0);
LCD_REMOTE_WIDTH * display_zoom,
LCD_REMOTE_HEIGHT * display_zoom,
8, 0, 0, 0, 0);
sdl_set_gradient(remote_surface, &remote_backlight_color_zero,
&remote_color_max, 0, (1<<LCD_REMOTE_DEPTH));
sdl_set_gradient(remote_surface, &remote_bl_color_dark,
&remote_bl_color_bright, 0, GRADIENT_MAX+1);
}

View file

@ -21,11 +21,9 @@
#include "lcd-sdl.h"
#include "uisdl.h"
#include "system.h" /* for MIN() and MAX() */
int display_zoom = 1;
#ifdef UI_LCD_SPLIT
static int gradient_steps = 0;
#endif
void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width,
int height, int max_x, int max_y,
@ -51,18 +49,30 @@ void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width,
for (x = x_start; x < xmax; x++) {
dest.x = x * display_zoom;
#ifdef HAVE_LCD_SPLIT
for (y = y_start; y < MIN(ymax, LCD_SPLIT_POS); y++) {
dest.y = y * display_zoom;
SDL_FillRect(surface, &dest, (Uint32)(getpixel(x, y) | 0x80));
}
for (y = MAX(y_start, LCD_SPLIT_POS); y < ymax; y++) {
dest.y = (y + LCD_SPLIT_LINES) * display_zoom ;
SDL_FillRect(surface, &dest, (Uint32)getpixel(x, y));
}
#else
for (y = y_start; y < ymax; y++) {
dest.y = y * display_zoom;
SDL_FillRect(surface, &dest, (Uint32)getpixel(x, y));
}
#endif
}
SDL_UnlockSurface(surface);
}
void sdl_gui_update(SDL_Surface *surface, IFSPLIT(SDL_Surface *real_surface,)
int x_start, int y_start, int width,
void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width,
int height, int max_x, int max_y, int ui_x, int ui_y)
{
int xmax, ymax;
@ -80,73 +90,17 @@ void sdl_gui_update(SDL_Surface *surface, IFSPLIT(SDL_Surface *real_surface,)
SDL_Rect dest= {(ui_x + x_start) * display_zoom, (ui_y + y_start) * display_zoom,
xmax * display_zoom, ymax * display_zoom};
#ifdef UI_LCD_SPLIT
/* fix real screen coordinates */
if(ymax >= UI_LCD_SPLIT_LINES)
src.h += UI_LCD_SPLIT_BLACK_LINES * display_zoom;
SDL_LockSurface(surface);
SDL_LockSurface(real_surface);
int pixel, npixels;
#if LCD_DEPTH != 1
#error "Split screen only works for monochrome displays !"
#endif
npixels = display_zoom * display_zoom * UI_LCD_SPLIT_LINES * surface->pitch;
const unsigned char * pixels_src = (const unsigned char*)surface->pixels;
unsigned char * pixels_dst = (unsigned char*)real_surface->pixels;
const int start_pixel = UI_LCD_SPLIT_LINES * surface->pitch * display_zoom;
const int stop_pixel = (UI_LCD_SPLIT_LINES+UI_LCD_SPLIT_BLACK_LINES)
* surface->pitch * display_zoom;
/* draw top pixels, change the color */
for (pixel = 0; pixel < npixels ; pixel++)
{
int pix = pixels_src[pixel] + gradient_steps;
if(pix > 255) pix = 255;
pixels_dst[pixel] = pix;
}
/* copy bottom pixels */
memcpy(&pixels_dst[stop_pixel], &pixels_src[start_pixel],
(UI_LCD_HEIGHT - UI_LCD_SPLIT_LINES) * surface->pitch * display_zoom);
/* separation lines are off */
for (pixel = start_pixel; pixel < stop_pixel ; pixel++)
pixels_dst[pixel] = 0;
SDL_UnlockSurface(surface);
SDL_UnlockSurface(real_surface);
SDL_BlitSurface(real_surface, &src, gui_surface, &dest);
#else
SDL_BlitSurface(surface, &src, gui_surface, &dest);
#endif
SDL_Flip(gui_surface);
}
/* set a range of bitmap indices to a gradient from startcolour to endcolour */
void sdl_set_gradient(SDL_Surface *surface, SDL_Color *start, SDL_Color *end,
IFSPLIT(SDL_Color *split_start,)
IFSPLIT(SDL_Color *split_end ,) int first, int steps)
int first, int steps)
{
int i;
#ifdef UI_LCD_SPLIT
int tot_steps = steps * 2;
if (tot_steps > 256)
tot_steps = 256;
gradient_steps = steps;
#else
#define tot_steps steps
#endif
SDL_Color palette[tot_steps];
SDL_Color palette[steps];
for (i = 0; i < steps; i++) {
palette[i].r = start->r + (end->r - start->r) * i / (steps - 1);
@ -154,14 +108,6 @@ void sdl_set_gradient(SDL_Surface *surface, SDL_Color *start, SDL_Color *end,
palette[i].b = start->b + (end->b - start->b) * i / (steps - 1);
}
#ifdef UI_LCD_SPLIT /* extra color */
for (i = steps ; i < tot_steps; i++) {
palette[i].r = split_start->r + (split_end->r - split_start->r) * (i - steps) / (tot_steps - steps - 1);
palette[i].g = split_start->g + (split_end->g - split_start->g) * (i - steps) / (tot_steps - steps - 1);
palette[i].b = split_start->b + (split_end->b - split_start->b) * (i - steps) / (tot_steps - steps - 1);
}
#endif
SDL_SetPalette(surface, SDL_LOGPAL|SDL_PHYSPAL, palette, first, tot_steps);
SDL_SetPalette(surface, SDL_LOGPAL|SDL_PHYSPAL, palette, first, steps);
}

View file

@ -25,13 +25,6 @@
#include "lcd.h"
#include "SDL.h"
#include "uisdl.h"
#ifdef UI_LCD_SPLIT
#define IFSPLIT(x,y) x,y
#else
#define IFSPLIT(x,y)
#endif
/* Default display zoom level */
extern int display_zoom;
@ -39,13 +32,11 @@ void sdl_update_rect(SDL_Surface *surface, int x_start, int y_start, int width,
int height, int max_x, int max_y,
unsigned long (*getpixel)(int, int));
void sdl_gui_update(SDL_Surface *surface, IFSPLIT(SDL_Surface *real_surface,)
int x_start, int y_start, int width,
void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width,
int height, int max_x, int max_y, int ui_x, int ui_y);
void sdl_set_gradient(SDL_Surface *surface, SDL_Color *start, SDL_Color *end,
IFSPLIT( SDL_Color *split_start ,)
IFSPLIT( SDL_Color *split_end ,) int first, int steps);
int first, int steps);
#endif /* #ifndef __LCDSDL_H__ */

View file

@ -130,15 +130,11 @@ bool gui_startup(void)
height = UI_HEIGHT;
} else {
#ifdef HAVE_REMOTE_LCD
width = UI_LCD_WIDTH > UI_REMOTE_WIDTH ? UI_LCD_WIDTH : UI_REMOTE_WIDTH;
height = UI_LCD_HEIGHT + UI_REMOTE_HEIGHT;
width = SIM_LCD_WIDTH > SIM_REMOTE_WIDTH ? SIM_LCD_WIDTH : SIM_REMOTE_WIDTH;
height = SIM_LCD_HEIGHT + SIM_REMOTE_HEIGHT;
#else
width = UI_LCD_WIDTH;
height = UI_LCD_HEIGHT
#ifdef UI_LCD_SPLIT
+ UI_LCD_SPLIT_BLACK_LINES
#endif
;
width = SIM_LCD_WIDTH;
height = SIM_LCD_HEIGHT;
#endif
}

View file

@ -31,208 +31,114 @@
#define UI_TITLE "Jukebox Recorder"
#define UI_WIDTH 270 /* width of GUI window */
#define UI_HEIGHT 406 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 126, 229, 126 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 80 /* x position of lcd */
#define UI_LCD_POSY 104 /* y position of lcd (96 for real aspect) */
#define UI_LCD_WIDTH 112
#define UI_LCD_HEIGHT 64 /* (80 for real aspect) */
#define UI_LCD_POSY 104 /* y position of lcd */
#elif defined(ARCHOS_PLAYER)
#define UI_TITLE "Jukebox Player"
#define UI_WIDTH 284 /* width of GUI window */
#define UI_HEIGHT 420 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 126, 229, 126 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 75 /* x position of lcd */
#define UI_LCD_POSY 116 /* y position of lcd */
#define UI_LCD_WIDTH 132
#define UI_LCD_HEIGHT 64
#elif defined(ARCHOS_FMRECORDER) || defined(ARCHOS_RECORDERV2)
#define UI_TITLE "Jukebox FM Recorder"
#define UI_WIDTH 285 /* width of GUI window */
#define UI_HEIGHT 414 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 126, 229, 126 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 87 /* x position of lcd */
#define UI_LCD_POSY 77 /* y position of lcd (69 for real aspect) */
#define UI_LCD_WIDTH 112
#define UI_LCD_HEIGHT 64 /* (80 for real aspect) */
#define UI_LCD_POSY 77 /* y position of lcd */
#elif defined(ARCHOS_ONDIOSP) || defined(ARCHOS_ONDIOFM)
#define UI_TITLE "Ondio"
#define UI_WIDTH 155 /* width of GUI window */
#define UI_HEIGHT 334 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 130, 180, 250 /* bkgnd color of LCD (backlight mod) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 21 /* x position of lcd */
#define UI_LCD_POSY 82 /* y position of lcd (74 for real aspect) */
#define UI_LCD_WIDTH 112
#define UI_LCD_HEIGHT 64 /* (80 for real aspect) */
#define UI_LCD_POSY 82 /* y position of lcd */
#elif defined(IRIVER_H120) || defined(IRIVER_H100)
#define UI_TITLE "iriver H1x0"
#define UI_WIDTH 379 /* width of GUI window */
#define UI_HEIGHT 508 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 173, 216, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 109 /* x position of lcd */
#define UI_LCD_POSY 23 /* y position of lcd */
#define UI_LCD_WIDTH 160
#define UI_LCD_HEIGHT 128
#define UI_REMOTE_BGCOLOR 90, 145, 90 /* bkgnd of remote lcd (no bklight) */
#define UI_REMOTE_BGCOLORLIGHT 130, 180, 250 /* bkgnd of remote lcd (bklight) */
#define UI_REMOTE_FGCOLOR 0, 0, 0 /* foreground color of remote LCD (no backlight) */
#define UI_REMOTE_FGCOLORLIGHT 0, 0, 0 /* foreground color of remote LCD (backlight) */
#define UI_REMOTE_POSX 50 /* x position of remote lcd */
#define UI_REMOTE_POSY 403 /* y position of remote lcd */
#define UI_REMOTE_WIDTH 128
#define UI_REMOTE_HEIGHT 64
#elif defined(IRIVER_H300)
#define UI_TITLE "iriver H300"
#define UI_WIDTH 288 /* width of GUI window */
#define UI_HEIGHT 581 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 26 /* x position of lcd */
#define UI_LCD_POSY 36 /* y position of lcd */
#define UI_LCD_WIDTH 220
#define UI_LCD_HEIGHT 176
#define UI_REMOTE_BGCOLOR 90, 145, 90 /* bkgnd of remote lcd (no bklight) */
#define UI_REMOTE_BGCOLORLIGHT 130, 180, 250 /* bkgnd of remote lcd (bklight) */
#define UI_REMOTE_POSX 12 /* x position of remote lcd */
#define UI_REMOTE_POSY 478 /* y position of remote lcd */
#define UI_REMOTE_WIDTH 128
#define UI_REMOTE_HEIGHT 64
#elif defined(IPOD_1G2G)
#define UI_TITLE "iPod 1G/2G"
#define UI_WIDTH 224 /* width of GUI window */
#define UI_HEIGHT 382 /* height of GUI window */
#define UI_LCD_BGCOLOR 100, 135, 100 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 223, 216, 255 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 32 /* x position of lcd */
#define UI_LCD_POSY 12 /* y position of lcd */
#define UI_LCD_WIDTH 160
#define UI_LCD_HEIGHT 128
#elif defined(IPOD_3G)
#define UI_TITLE "iPod 3G"
#define UI_WIDTH 218 /* width of GUI window */
#define UI_HEIGHT 389 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 173, 216, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 29 /* x position of lcd */
#define UI_LCD_POSY 16 /* y position of lcd */
#define UI_LCD_WIDTH 160
#define UI_LCD_HEIGHT 128
#elif defined(IPOD_4G)
#define UI_TITLE "iPod 4G"
#define UI_WIDTH 196 /* width of GUI window */
#define UI_HEIGHT 370 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 173, 216, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 19 /* x position of lcd */
#define UI_LCD_POSY 14 /* y position of lcd */
#define UI_LCD_WIDTH 160
#define UI_LCD_HEIGHT 128
#elif defined(IPOD_MINI) || defined(IPOD_MINI2G)
#define UI_TITLE "iPod mini"
#define UI_WIDTH 191 /* width of GUI window */
#define UI_HEIGHT 365 /* height of GUI window */
#define UI_LCD_BGCOLOR 100, 135, 100 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 223, 216, 255 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 24 /* x position of lcd */
#define UI_LCD_POSY 17 /* y position of lcd */
#define UI_LCD_WIDTH 138
#define UI_LCD_HEIGHT 110
#elif defined(IPOD_COLOR)
#define UI_TITLE "iPod Color"
#define UI_WIDTH 261 /* width of GUI window */
#define UI_HEIGHT 493 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 21 /* x position of lcd */
#define UI_LCD_POSY 16 /* y position of lcd */
#define UI_LCD_WIDTH 220
#define UI_LCD_HEIGHT 176
#elif defined(IPOD_NANO)
#define UI_TITLE "iPod Nano"
#define UI_WIDTH 199 /* width of GUI window */
#define UI_HEIGHT 421 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 13 /* x position of lcd */
#define UI_LCD_POSY 14 /* y position of lcd */
#define UI_LCD_WIDTH 176
#define UI_LCD_HEIGHT 132
#elif defined(IPOD_VIDEO)
#define UI_TITLE "iPod Video"
#define UI_WIDTH 350 /* width of GUI window */
#define UI_HEIGHT 591 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 14 /* x position of lcd */
#define UI_LCD_POSY 12 /* y position of lcd */
#define UI_LCD_WIDTH 320
#define UI_LCD_HEIGHT 240
#elif defined(IAUDIO_X5)
#define UI_TITLE "iAudio X5"
#define UI_WIDTH 300 /* width of GUI window */
#define UI_HEIGHT 558 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 55 /* x position of lcd */
#define UI_LCD_POSY 61 /* y position of lcd (74 for real aspect) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#define UI_REMOTE_BGCOLOR 90, 145, 90 /* bkgnd of remote lcd (no bklight) */
#define UI_REMOTE_BGCOLORLIGHT 130, 180, 250 /* bkgnd of remote lcd (bklight) */
#define UI_LCD_POSY 61 /* y position of lcd */
#define UI_REMOTE_POSX 12 /* x position of remote lcd */
#define UI_REMOTE_POSY 462 /* y position of remote lcd */
#define UI_REMOTE_WIDTH 128
#define UI_REMOTE_HEIGHT 96
#elif defined(IAUDIO_M5)
#define UI_TITLE "iAudio M5"
#define UI_WIDTH 374 /* width of GUI window */
#define UI_HEIGHT 650 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 82 /* x position of lcd */
#define UI_LCD_POSY 74 /* y position of lcd (74 for real aspect) */
#define UI_LCD_BGCOLOR 100, 135, 100 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 223, 216, 255 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#define UI_REMOTE_BGCOLOR 90, 145, 90 /* bkgnd of remote lcd (no bklight) */
#define UI_REMOTE_BGCOLORLIGHT 130, 180, 250 /* bkgnd of remote lcd (bklight) */
#define UI_LCD_POSY 74 /* y position of lcd */
#define UI_REMOTE_POSX 59 /* x position of remote lcd */
#define UI_REMOTE_POSY 509 /* y position of remote lcd */
#define UI_REMOTE_WIDTH 128
#define UI_REMOTE_HEIGHT 96
#elif defined(IAUDIO_M3)
#define UI_TITLE "iAudio M3"
@ -240,68 +146,43 @@
#define UI_HEIGHT 501 /* height of GUI window */
#define UI_LCD_POSX 92 /* x position of lcd */
#define UI_LCD_POSY 348 /* y position of lcd */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no bklight) */
#define UI_LCD_BGCOLORLIGHT 130, 180, 250 /* bkgnd color of LCD (bklight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#elif defined(GIGABEAT_F)
#define UI_TITLE "Toshiba Gigabeat"
#define UI_WIDTH 401 /* width of GUI window */
#define UI_HEIGHT 655 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 48 /* x position of lcd */
#define UI_LCD_POSY 60 /* y position of lcd */
#define UI_LCD_WIDTH 240
#define UI_LCD_HEIGHT 320
#elif defined(GIGABEAT_S)
#define UI_TITLE "Toshiba Gigabeat"
#define UI_WIDTH 450 /* width of GUI window */
#define UI_HEIGHT 688 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 96 /* x position of lcd */
#define UI_LCD_POSY 90 /* y position of lcd */
#define UI_LCD_WIDTH 240
#define UI_LCD_HEIGHT 320
#elif defined(MROBE_500)
#define UI_TITLE "Olympus M:Robe 500"
#define UI_WIDTH 401 /* width of GUI window */
#define UI_HEIGHT 655 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 48 /* x position of lcd */
#define UI_LCD_POSY 60 /* y position of lcd */
#define UI_LCD_WIDTH LCD_WIDTH
#define UI_LCD_HEIGHT LCD_HEIGHT
#define UI_REMOTE_BGCOLOR 90, 145, 90 /* bkgnd of remote lcd (no bklight) */
#define UI_REMOTE_BGCOLORLIGHT 130, 180, 250 /* bkgnd of remote lcd (bklight) */
#define UI_REMOTE_POSX 50 /* x position of remote lcd */
#define UI_REMOTE_POSY 403 /* y position of remote lcd */
#define UI_REMOTE_WIDTH 79
#define UI_REMOTE_HEIGHT 16
#elif defined(IRIVER_H10)
#define UI_TITLE "iriver H10 20Gb"
#define UI_WIDTH 392 /* width of GUI window */
#define UI_HEIGHT 391 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 111 /* x position of lcd */
#define UI_LCD_POSY 30 /* y position of lcd (74 for real aspect) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#define UI_LCD_POSY 30 /* y position of lcd */
#elif defined(IRIVER_H10_5GB)
#define UI_TITLE "iriver H10 5/6Gb"
#define UI_WIDTH 353 /* width of GUI window */
#define UI_HEIGHT 460 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 112 /* x position of lcd */
#define UI_LCD_POSY 45 /* y position of lcd (74 for real aspect) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#define UI_LCD_POSY 45 /* y position of lcd */
#elif defined(SANSA_E200) || defined(SANSA_E200V2)
#ifdef SANSA_E200
@ -311,35 +192,23 @@
#endif
#define UI_WIDTH 260 /* width of GUI window */
#define UI_HEIGHT 502 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 42 /* x position of lcd */
#define UI_LCD_POSY 37 /* y position of lcd (74 for real aspect) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#define UI_LCD_POSY 37 /* y position of lcd */
#elif defined(SANSA_C200)
#define UI_TITLE "Sansa c200"
#define UI_WIDTH 350 /* width of GUI window */
#define UI_HEIGHT 152 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 42 /* x position of lcd */
#define UI_LCD_POSY 35 /* y position of lcd (74 for real aspect) */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#define UI_LCD_POSY 35 /* y position of lcd */
#elif defined(IRIVER_IFP7XX)
#define UI_TITLE "iriver iFP7xx"
#define UI_WIDTH 425 /* width of GUI window */
#define UI_HEIGHT 183 /* height of GUI window */
#define UI_LCD_BGCOLOR 94, 104, 84 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 60, 160, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 115 /* x position of lcd */
#define UI_LCD_POSY 54 /* y position of lcd */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#elif defined(ARCHOS_AV300)
#define UI_TITLE "Archos AV300"
/* We are temporarily using a 2bpp LCD driver and dummy bitmap */
@ -347,25 +216,13 @@
#define UI_HEIGHT 340 /* height of GUI window */
#define UI_LCD_POSX 50 /* x position of lcd */
#define UI_LCD_POSY 50 /* y position of lcd */
#define UI_LCD_WIDTH 320
#define UI_LCD_HEIGHT 240
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 173, 216, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#elif defined(MROBE_100)
#define UI_TITLE "Olympus M:Robe 100"
#define UI_WIDTH 247 /* width of GUI window */
#define UI_HEIGHT 416 /* height of GUI window */
#define UI_LCD_BGCOLOR 0, 0, 0 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 94, 2, 2 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 50, 50, 50 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 241, 6, 3 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 43 /* x position of lcd */
#define UI_LCD_POSY 25 /* y position of lcd */
#define UI_LCD_WIDTH 160
#define UI_LCD_HEIGHT 128
#elif defined(COWON_D2)
#define UI_TITLE "Cowon D2"
@ -373,25 +230,13 @@
#define UI_HEIGHT 368 /* height of GUI window */
#define UI_LCD_POSX 58 /* x position of lcd */
#define UI_LCD_POSY 67 /* y position of lcd */
#define UI_LCD_WIDTH 320
#define UI_LCD_HEIGHT 240
#define UI_LCD_BGCOLOR 32, 32, 32 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 192, 192, 192 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#elif defined(IAUDIO_7)
#define UI_TITLE "iAudio7"
#define UI_WIDTH 494 /* width of GUI window */
#define UI_HEIGHT 214 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 173, 216, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 131 /* x position of lcd */
#define UI_LCD_POSY 38 /* y position of lcd */
#define UI_LCD_WIDTH 160
#define UI_LCD_HEIGHT 128
#elif defined(CREATIVE_ZVM) || defined(CREATIVE_ZVM60GB)
#ifdef CREATIVE_ZVM
@ -403,12 +248,6 @@
#define UI_HEIGHT 643 /* height of GUI window */
#define UI_LCD_POSX 31 /* x position of lcd */
#define UI_LCD_POSY 62 /* y position of lcd */
#define UI_LCD_WIDTH 320
#define UI_LCD_HEIGHT 240
#define UI_LCD_BGCOLOR 32, 32, 32 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 192, 192, 192 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#elif defined(CREATIVE_ZV)
#define UI_TITLE "Creative Zen Vision"
@ -416,12 +255,6 @@
#define UI_HEIGHT 643 /* height of GUI window */
#define UI_LCD_POSX 129 /* x position of lcd */
#define UI_LCD_POSY 85 /* y position of lcd */
#define UI_LCD_WIDTH 640
#define UI_LCD_HEIGHT 480
#define UI_LCD_BGCOLOR 32, 32, 32 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 192, 192, 192 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#elif defined(MEIZU_M6SL)
#define UI_TITLE "Meizu M6"
@ -429,22 +262,13 @@
#define UI_HEIGHT 322 /* height of GUI window */
#define UI_LCD_POSX 39 /* x position of lcd */
#define UI_LCD_POSY 38 /* y position of lcd */
#define UI_LCD_WIDTH 320
#define UI_LCD_HEIGHT 240
#define UI_LCD_BGCOLOR 32, 32, 32 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 192, 192, 192 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#elif defined(SANSA_FUZE)
#define UI_TITLE "Sansa Fuze"
#define UI_WIDTH 279 /* width of GUI window */
#define UI_HEIGHT 449 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 30 /* x position of lcd */
#define UI_LCD_POSY 31 /* y position of lcd */
#define UI_LCD_WIDTH LCD_WIDTH
#define UI_LCD_HEIGHT LCD_HEIGHT
#elif defined(SANSA_CLIP)
#define UI_TITLE "Sansa Clip"
@ -452,42 +276,20 @@
#define UI_HEIGHT 325 /* height of GUI window */
#define UI_LCD_POSX 38 /* x position of lcd */
#define UI_LCD_POSY 38 /* y position of lcd */
#define UI_LCD_WIDTH 128
#define UI_LCD_HEIGHT 64
#define UI_LCD_BGCOLOR 0, 0, 0 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 0, 0, 0 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 13, 226, 229 /* foreground color of LCD (backlight) */
#define UI_LCD_SPLIT /* The screen is split in 2 areas */
#define UI_LCD_SPLIT_LINES 16 /* the top 16 lines have a different color */
#define UI_LCD_SPLIT_BLACK_LINES 2 /* The 2 areas are separated by 2 empty lines */
/* Colors for the top part of the screen */
#define UI_LCD_SPLIT_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_SPLIT_FGCOLORLIGHT 255, 230, 15 /* foreground color of LCD (backlight) */
#elif defined(PHILIPS_HDD1630)
#define UI_TITLE "Philips GoGear HDD1630"
#define UI_WIDTH 407 /* width of GUI window */
#define UI_HEIGHT 391 /* height of GUI window */
/* high-colour */
#define UI_LCD_POSX 143 /* x position of lcd */
#define UI_LCD_POSY 27 /* y position of lcd */
#define UI_LCD_WIDTH LCD_WIDTH
#define UI_LCD_HEIGHT LCD_HEIGHT
#elif defined(SANSA_M200V4)
#define UI_TITLE "sansa m200v4"
#define UI_WIDTH 350 /* width of GUI window */
#define UI_HEIGHT 168 /* height of GUI window */
#define UI_LCD_BGCOLOR 94, 104, 84 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 60, 160, 230 /* bkgnd color of LCD (backlight) */
#define UI_LCD_FGCOLOR 0, 0, 0 /* foreground color of LCD (no backlight) */
#define UI_LCD_FGCOLORLIGHT 0, 0, 0 /* foreground color of LCD (backlight) */
#define UI_LCD_POSX 42 /* x position of lcd */
#define UI_LCD_POSY 55 /* y position of lcd */
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
#else