X5 remote LCD drawing. This will break target linking atm - lcd_remote_update[_rect]() are not yet implemented.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10347 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-07-28 07:35:45 +00:00
parent cb36fec392
commit 05ddd9a44e
16 changed files with 1182 additions and 38 deletions

View file

@ -73,6 +73,10 @@
#define SLIDER_OK BUTTON_SELECT
#define SLIDER_CANCEL BUTTON_PLAY
/* FIXME: chosen at will to make it compile */
#define SLIDER_RC_OK BUTTON_RC_PLAY
#define SLIDER_RC_CANCEL BUTTON_RC_REC
#endif
static const int max_val[3] = {LCD_MAX_RED,LCD_MAX_GREEN,LCD_MAX_BLUE};

View file

@ -454,6 +454,14 @@ static const struct plugin_api rockbox_api = {
font_get_bits,
font_load,
#endif
#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
lcd_remote_set_foreground,
lcd_remote_get_foreground,
lcd_remote_set_background,
lcd_remote_get_background,
lcd_remote_bitmap_part,
lcd_remote_bitmap,
#endif
};
int plugin_load(const char* plugin, void* parameter)

View file

@ -104,7 +104,7 @@
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 24
#define PLUGIN_API_VERSION 25
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
@ -221,7 +221,7 @@ struct plugin_api {
void (*lcd_remote_puts_style)(int x, int y, const unsigned char *str, int style);
void (*lcd_remote_puts_scroll_style)(int x, int y, const unsigned char* string,
int style);
unsigned char* lcd_remote_framebuffer;
fb_remote_data* lcd_remote_framebuffer;
void (*lcd_remote_update)(void);
void (*lcd_remote_update_rect)(int x, int y, int width, int height);
@ -529,6 +529,16 @@ struct plugin_api {
const unsigned char *(*font_get_bits)( struct font *pf, unsigned short char_code );
struct font* (*font_load)(const char *path);
#endif
#if defined(HAVE_REMOTE_LCD) && (LCD_REMOTE_DEPTH > 1)
void (*lcd_remote_set_foreground)(unsigned foreground);
unsigned (*lcd_remote_get_foreground)(void);
void (*lcd_remote_set_background)(unsigned foreground);
unsigned (*lcd_remote_get_background)(void);
void (*lcd_remote_bitmap_part)(const fb_remote_data *src, int src_x, int src_y,
int stride, int x, int y, int width, int height);
void (*lcd_remote_bitmap)(const fb_remote_data *src, int x, int y, int width,
int height);
#endif
};
/* plugin header */

View file

@ -140,8 +140,8 @@ static void snow_move(void)
#ifdef HAVE_REMOTE_LCD
if (particles[i][0] <= LCD_REMOTE_WIDTH
&& particles[i][1] <= LCD_REMOTE_HEIGHT) {
rb->lcd_remote_bitmap(flake,particles[i][0],particles[i][1],
FLAKE_WIDTH,FLAKE_WIDTH);
rb->lcd_remote_mono_bitmap(flake,particles[i][0],particles[i][1],
FLAKE_WIDTH,FLAKE_WIDTH);
}
#endif
}

View file

@ -30,20 +30,30 @@ static int fontwidth, fontheight;
#if CONFIG_KEYPAD == PLAYER_PAD
#define STATS_STOP BUTTON_STOP
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
(CONFIG_KEYPAD == IPOD_3G_PAD)
#elif (CONFIG_KEYPAD == RECORDER_PAD) \
|| (CONFIG_KEYPAD == ONDIO_PAD)
#define STATS_STOP BUTTON_OFF
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) \
|| (CONFIG_KEYPAD == IRIVER_H300_PAD)
#define STATS_STOP BUTTON_OFF
#define STATS_STOP_REMOTE BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) \
|| (CONFIG_KEYPAD == IPOD_3G_PAD)
#define STATS_STOP BUTTON_MENU
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
#define STATS_STOP BUTTON_PLAY
#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
#define STATS_STOP BUTTON_POWER
#define STATS_STOP_REMOTE BUTTON_RC_PLAY
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define STATS_STOP BUTTON_A
#else
#define STATS_STOP BUTTON_OFF
#endif
#ifdef HAVE_REMOTE_LCD
#define STATS_STOP_REMOTE BUTTON_RC_STOP
#endif
/* TODO: Better get the exts from the filetypes var in tree.c */

View file

@ -80,6 +80,13 @@ drivers/lcd-h100.c
drivers/lcd-16bit.c
#endif
#endif
#ifdef HAVE_REMOTE_LCD
#if LCD_REMOTE_DEPTH == 1
drivers/lcd-h100-remote.c
#elif LCD_REMOTE_DEPTH == 2
drivers/lcd-remote-2bit-vi.c
#endif
#endif
#if CONFIG_LCD==LCD_IPODNANO || CONFIG_LCD==LCD_IPODCOLOR || CONFIG_LCD == LCD_IPOD2BPP
drivers/lcd-ipod.c
#endif
@ -178,9 +185,6 @@ usb.c
bitswap.S
descramble.S
#endif
#ifdef HAVE_REMOTE_LCD
drivers/lcd-h100-remote.c
#endif
#if defined(HAVE_UDA1380) && !defined(SIMULATOR)
drivers/uda1380.c
#elif defined(HAVE_WM8975) && !defined(SIMULATOR)

File diff suppressed because it is too large Load diff

View file

@ -27,17 +27,18 @@
/* remote LCD */
#define LCD_REMOTE_WIDTH 128
#define LCD_REMOTE_HEIGHT 64
#define LCD_REMOTE_DEPTH 1
#define LCD_REMOTE_HEIGHT 96
#define LCD_REMOTE_DEPTH 2
#define LCD_REMOTE_PIXELFORMAT VERTICAL_INTERLEAVED
#define CONFIG_KEYPAD IAUDIO_X5_PAD
/* Define this if you do software codec */
#define CONFIG_CODEC SWCODEC
/* Define this if you have an remote lcd
/* Define this if you have an remote lcd */
#define HAVE_REMOTE_LCD
*/
#define CONFIG_LCD LCD_X5

View file

@ -92,6 +92,8 @@
/* LCD_PIXELFORMAT */
#define HORIZONTAL_PACKING 1
#define VERTICAL_PACKING 2
#define HORIZONTAL_INTERLEAVED 3
#define VERTICAL_INTERLEAVED 4
#define RGB565 565
#define RGB565SWAPPED 3553

View file

@ -326,6 +326,12 @@ int transform_bitmap(const struct RGBQUAD *src, int width, int height,
dst_h = height;
dst_d = 8;
break;
case 7: /* greyscale X5 remote 4-grey */
dst_w = width;
dst_h = (height + 7) / 8;
dst_d = 16;
break;
default: /* unknown */
debugf("error - Undefined destination format\n");
@ -405,6 +411,17 @@ int transform_bitmap(const struct RGBQUAD *src, int width, int height,
(~brightness(src[row * width + col]) & 0xC0) >> (2 * (col & 3));
}
break;
case 7: /* greyscale X5 remote 4-grey */
for (row = 0; row < height; row++)
for (col = 0; col < width; col++)
{
unsigned short data = (~brightness(src[row * width + col]) & 0xC0) >> 6;
data = (data | (data << 7)) & 0x0101;
(*dest)[(row/8) * dst_w + col] |= data << (row & 7);
}
break;
}
return 0;
@ -514,10 +531,11 @@ void print_usage(void)
"\t 0 Archos recorder, Ondio, Gmini 120/SP, Iriver H1x0 mono\n"
"\t 1 Archos player graphics library\n"
"\t 2 Iriver H1x0 4-grey\n"
"\t 3 Canonical 8-bit grayscale\n"
"\t 3 Canonical 8-bit greyscale\n"
"\t 4 16-bit packed 5-6-5 RGB (iriver H300)\n"
"\t 5 16-bit packed and byte-swapped 5-6-5 RGB (iPod)\n"
"\t 6 Greayscale iPod 4-grey\n"
"\t 6 Greyscale iPod 4-grey\n"
"\t 7 Greyscale X5 remote 4-grey\n"
, APPLICATION_NAME);
printf("build date: " __DATE__ "\n\n");
}

2
tools/configure vendored
View file

@ -705,7 +705,7 @@ toolsdir='\$(ROOTDIR)/tools'
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 7"
output="rockbox.iaudio"
appextra="recorder:gui"
archosrom=""

View file

@ -6,7 +6,7 @@ lcd-bitmap.c
lcd-charcell.c
#endif
#ifdef HAVE_REMOTE_LCD
lcd-remote.c
lcd-remote-bitmap.c
#endif
lcd-sdl.c
sound.c

View file

@ -19,7 +19,7 @@
#include "uisdl.h"
#include "lcd-sdl.h"
#include "lcd-remote.h"
#include "lcd-remote-bitmap.h"
SDL_Surface *remote_surface;
@ -27,10 +27,15 @@ 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};
extern unsigned char lcd_remote_framebuffer[LCD_REMOTE_HEIGHT/8][LCD_REMOTE_WIDTH];
static unsigned long get_lcd_remote_pixel(int x, int y) {
return ((lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 1);
#if LCD_REMOTE_DEPTH == 1
return (lcd_remote_framebuffer[y/8][x] >> (y & 7)) & 1;
#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;
#endif
#endif
}
void lcd_remote_update (void)

View file

@ -21,6 +21,7 @@
#define __LCDREMOTE_H__
#include "lcd.h"
#include "lcd-remote.h"
#include "SDL.h"
void sim_lcd_remote_init(void);

View file

@ -31,7 +31,7 @@
#include "lcd-charcell.h"
#endif
#ifdef HAVE_REMOTE_LCD
#include "lcd-remote.h"
#include "lcd-remote-bitmap.h"
#endif
#include "thread-sdl.h"
#include "SDL_mutex.h"

View file

@ -176,22 +176,18 @@
#elif defined(IAUDIO_X5)
#define UI_TITLE "iAudio X5"
#define UI_WIDTH 300 /* width of GUI window */
#define UI_HEIGHT 462 /* height of GUI window */
#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
#define UI_LCD_BGCOLORLIGHT 230, 160, 60 /* bkgnd color of LCD (backlight) */
#define UI_LCD_BLACK 0, 0, 0 /* black */
#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_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
#define UI_REMOTE_BGCOLORLIGHT 250, 180, 130 /* bkgnd of remote lcd (bklight) */
#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 462 /* y position of remote lcd */
#define UI_REMOTE_WIDTH 128
#define UI_REMOTE_HEIGHT 96
#elif defined(GIGABEAT_F)
#define UI_TITLE "Toshiba Gigabeat"