iriver: LCD flip for H1x0 remote, some code cleanup.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6739 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2005-06-17 21:43:00 +00:00
parent ba7dccf15a
commit bd1bb5f009
4 changed files with 60 additions and 13 deletions

View file

@ -264,6 +264,7 @@ static const struct bit_entry rtc_bits[] =
{1, S_O(remote_invert), false, "remote invert", off_on },
{5, S_O(remote_backlight_timeout), 5, "remote backlight timeout",
"off,on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90" },
{1, S_O(remote_flip_display), false, "remote flip display", off_on },
#endif
/* Current sum of bits: 259 (worst case) */
@ -394,7 +395,7 @@ static const struct bit_entry hd_bits[] =
#endif
/* new stuff to be added at the end */
/* Sum of all bit sizes must not grow beyond 0xB8*8 = 1472 */
};
@ -757,10 +758,11 @@ void settings_apply(void)
lcd_set_contrast(global_settings.contrast);
lcd_scroll_speed(global_settings.scroll_speed);
#ifdef HAVE_REMOTE_LCD
lcd_remote_set_contrast(global_settings.remote_contrast);
lcd_remote_set_invert_display(global_settings.remote_invert);
lcd_remote_set_contrast(global_settings.remote_contrast);
lcd_remote_set_invert_display(global_settings.remote_invert);
lcd_remote_set_flip(global_settings.remote_flip_display);
remote_backlight_set_timeout(global_settings.remote_backlight_timeout);
#endif
#endif
backlight_set_timeout(global_settings.backlight_timeout);
backlight_set_on_when_charging(global_settings.backlight_on_when_charging);
ata_spindown(global_settings.disk_spindown);

View file

@ -101,6 +101,17 @@ static bool remote_invert(void)
lcd_remote_set_invert_display);
return rc;
}
static bool remote_flip_display(void)
{
bool rc = set_bool( str(LANG_FLIP_DISPLAY),
&global_settings.remote_flip_display);
lcd_remote_set_flip(global_settings.remote_flip_display);
lcd_remote_update();
return rc;
}
#endif
#ifdef CONFIG_BACKLIGHT
@ -1262,8 +1273,8 @@ static bool lcd_remote_settings_menu(void)
{ ID2P(LANG_BACKLIGHT), remote_backlight_timer },
{ ID2P(LANG_CONTRAST), remote_contrast },
{ ID2P(LANG_INVERT), remote_invert },
/* { ID2P(LANG_FLIP_DISPLAY), remote_flip_display },
{ ID2P(LANG_INVERT_CURSOR), invert_cursor },*/
{ ID2P(LANG_FLIP_DISPLAY), remote_flip_display },
/* { ID2P(LANG_INVERT_CURSOR), invert_cursor },*/
};
m=menu_init( items, sizeof(items) / sizeof(*items), NULL,

View file

@ -38,6 +38,9 @@ static const unsigned char ones[8] = {
static int curfont = FONT_SYSFIXED;
static int xmargin = 0;
static int ymargin = 0;
#ifndef SIMULATOR
static int xoffset; /* needed for flip */
#endif
unsigned char lcd_remote_framebuffer[LCD_REMOTE_HEIGHT/8][LCD_REMOTE_WIDTH]
#ifndef SIMULATOR
@ -70,6 +73,7 @@ static bool remote_initialized = false;
/* cached settings values, for hotplug init */
static bool cached_invert = false;
static bool cached_flip = false;
static int cached_contrast = 32;
static int cached_roll = 0;
@ -206,7 +210,7 @@ void lcd_remote_write_command_ex(int cmd, int data)
#define LCD_REMOTE_CNTL_DISPLAY_ON_OFF 0xae
#define LCD_REMOTE_CNTL_ENTIRE_ON_OFF 0xa4
#define LCD_REMOTE_CNTL_REVERSE_ON_OFF 0xa6
#define LCD_REMOTE_CTNL_NOP 0xe3
#define LCD_REMOTE_CNTL_NOP 0xe3
#define LCD_REMOTE_CNTL_POWER_CONTROL 0x2b
#define LCD_REMOTE_CNTL_SELECT_REGULATOR 0x20
#define LCD_REMOTE_CNTL_SELECT_BIAS 0xa2
@ -214,6 +218,9 @@ void lcd_remote_write_command_ex(int cmd, int data)
#define LCD_REMOTE_CNTL_INIT_LINE 0x40
#define LCD_REMOTE_CNTL_SET_PAGE_ADDRESS 0xB0
#define LCD_REMOTE_CNTL_HIGHCOL 0x10 /* Upper column address */
#define LCD_REMOTE_CNTL_LOWCOL 0x00 /* Lower column address */
void lcd_remote_powersave(bool on)
{
if (remote_initialized)
@ -237,6 +244,30 @@ void lcd_remote_set_invert_display(bool yesno)
lcd_remote_write_command(LCD_REMOTE_CNTL_REVERSE_ON_OFF | yesno);
}
/* turn the display upside down (call lcd_remote_update() afterwards) */
void lcd_remote_set_flip(bool yesno)
{
cached_flip = yesno;
if (yesno)
{
xoffset = 0;
if (remote_initialized)
{
lcd_remote_write_command(LCD_REMOTE_CNTL_ADC_NORMAL);
lcd_remote_write_command(LCD_REMOTE_CNTL_SHL_NORMAL);
}
}
else
{
xoffset = 132 - LCD_REMOTE_WIDTH;
if (remote_initialized)
{
lcd_remote_write_command(LCD_REMOTE_CNTL_ADC_REVERSE);
lcd_remote_write_command(LCD_REMOTE_CNTL_SHL_REVERSE);
}
}
}
int lcd_remote_default_contrast(void)
{
return 32;
@ -394,8 +425,6 @@ void lcd_remote_clear_display(void)
static void remote_lcd_init(void)
{
lcd_remote_write_command(LCD_REMOTE_CNTL_ADC_REVERSE);
lcd_remote_write_command(LCD_REMOTE_CNTL_SHL_REVERSE);
lcd_remote_write_command(LCD_REMOTE_CNTL_SELECT_BIAS | 0x0);
lcd_remote_write_command(LCD_REMOTE_CNTL_POWER_CONTROL | 0x5);
@ -416,6 +445,7 @@ static void remote_lcd_init(void)
remote_initialized = true;
lcd_remote_set_flip(cached_flip);
lcd_remote_set_contrast(cached_contrast);
lcd_remote_set_invert_display(cached_invert);
lcd_remote_roll(cached_roll);
@ -490,7 +520,8 @@ void lcd_remote_update (void)
for (y = 0; y < LCD_REMOTE_HEIGHT / 8; y++)
{
lcd_remote_write_command(LCD_REMOTE_CNTL_SET_PAGE_ADDRESS | y);
lcd_remote_write_command_ex(0x10, 0x04);
lcd_remote_write_command(LCD_REMOTE_CNTL_HIGHCOL | ((xoffset>>4) & 0xf));
lcd_remote_write_command(LCD_REMOTE_CNTL_LOWCOL | (xoffset & 0xf));
lcd_remote_write_data(lcd_remote_framebuffer[y], LCD_REMOTE_WIDTH);
}
}
@ -522,8 +553,11 @@ void lcd_remote_update_rect (int x_start, int y,
for (; y <= ymax; y++)
{
lcd_remote_write_command(LCD_REMOTE_CNTL_SET_PAGE_ADDRESS | y);
lcd_remote_write_command_ex(0x10, 0x00);
lcd_remote_write_data(&lcd_remote_framebuffer[y][x_start], width);
lcd_remote_write_command(LCD_REMOTE_CNTL_HIGHCOL
| (((x_start+xoffset)>>4) & 0xf));
lcd_remote_write_command(LCD_REMOTE_CNTL_LOWCOL
| ((x_start+xoffset) & 0xf));
lcd_remote_write_data(&lcd_remote_framebuffer[y][x_start], width);
}
}

View file

@ -79,7 +79,7 @@ extern void lcd_remote_clearpixel(int x, int y);
extern void lcd_remote_invertpixel(int x, int y);
extern void lcd_remote_roll(int pixels);
extern void lcd_remote_set_invert_display(bool yesno);
//extern void lcd_set_flip(bool yesno);
extern void lcd_remote_set_flip(bool yesno);
extern void lcd_remote_bidir_scroll(int threshold);
extern void lcd_remote_scroll_step(int pixels);
extern void lcd_remote_setfont(int font);