Animated charging screen for player

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5452 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2004-11-21 00:17:59 +00:00
parent b3e31b9d04
commit 2996d17736

View file

@ -244,10 +244,69 @@ void charging_display_info(bool animate)
lcd_update(); lcd_update();
} }
#else /* not HAVE_LCD_BITMAP */ #else /* not HAVE_LCD_BITMAP */
static unsigned char logo_chars[5];
static const unsigned char logo_pattern[] = {
0x07, 0x04, 0x1c, 0x14, 0x1c, 0x04, 0x07, /* char 1 */
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, /* char 2 */
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, /* char 3 */
0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1f, /* char 4 */
};
static void logo_lock_patterns(bool on)
{
int i;
if (on)
{
for (i = 0; i < 4; i++)
logo_chars[i] = lcd_get_locked_pattern();
logo_chars[4] = '\0';
}
else
{
for (i = 0; i < 4; i++)
lcd_unlock_pattern(logo_chars[i]);
}
}
void charging_display_info(bool animate) void charging_display_info(bool animate)
{ {
/* ToDo for Player */ int battery_voltage;
(void)animate; unsigned i, ypos;
static unsigned phase = 3;
char buf[28];
battery_voltage = (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR)
/ 10000;
snprintf(buf, sizeof(buf), "%s %d.%02dV", logo_chars,
battery_voltage / 100, battery_voltage % 100);
lcd_puts(0, 1, buf);
memcpy(buf, logo_pattern, 28); /* copy logo patterns */
if (!animate) /* build the screen */
{
lcd_double_height(false);
lcd_puts(0, 0, "[Charging]");
}
else /* animate the logo */
{
for (i = 3; i < MIN(19, phase); i++)
{
if ((i - phase) % 5 == 0)
{ /* draw a "bubble" here */
ypos = (phase + i/5) % 9; /* "bounce" effect */
if (ypos > 4)
ypos = 8 - ypos;
buf[5 - ypos + 7 * (i/5)] |= 0x10 >> (i%5);
}
}
phase++;
}
for (i = 0; i < 4; i++)
lcd_define_pattern(logo_chars[i], buf + 7 * i);
} }
#endif #endif
@ -274,13 +333,11 @@ int charging_screen(void)
backlight_set_on_when_charging(global_settings.backlight_on_when_charging); backlight_set_on_when_charging(global_settings.backlight_on_when_charging);
status_draw(true); status_draw(true);
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_CHARCELLS
charging_display_info(false); logo_lock_patterns(true);
#else
lcd_double_height(false);
lcd_puts(0, 1, "[charging]");
#endif #endif
charging_display_info(false);
do do
{ {
status_draw(false); status_draw(false);
@ -303,6 +360,9 @@ int charging_screen(void)
} }
} while (!rc); } while (!rc);
#ifdef HAVE_LCD_CHARCELLS
logo_lock_patterns(false);
#endif
return rc; return rc;
} }
#endif /* HAVE_CHARGING */ #endif /* HAVE_CHARGING */