[U-Boot] [PATCH RESEND] Added support for splash screen positioning

Matthias Fuchs matthias.fuchs at esd.eu
Mon Jul 13 11:07:13 CEST 2009


On Thursday 09 July 2009 16:07, Matthias Weisser wrote:
> This patch adds support splash image positioning by adding an
> additional variable "splashpos" to the environment. Please see
> README for details.
> 
> Signed-off-by: Matthias Weisser <matthias.weisser at graf-syteco.de>

Works fine!

Acked-by: Matthias Fuchs <matthias.fuchs at esd.eu>
> ---
>  README                      |   19 +++++++++++++++++++
>  common/lcd.c                |   39 +++++++++++++++++++++++++++++++++++++--
>  drivers/video/cfb_console.c |   36 +++++++++++++++++++++++++++++++++++-
>  3 files changed, 91 insertions(+), 3 deletions(-)
> 
> diff --git a/README b/README
> index 561c100..bbc9e06
> --- a/README
> +++ b/README
> @@ -1074,6 +1074,25 @@ The following options need to be configured:
>  		allows for a "silent" boot where a splash screen is
>  		loaded very quickly after power-on.
>  
> +		CONFIG_SPLASH_SCREEN_ALIGN
> +
> +		If this option is set the splash image can be freely positioned
> +		on the screen. Environment variable "splashpos=x,y" specifies
> +		the position. If a positive number is given it is used as
> +		number of pixel from left/top. If a negativ number is given it
> +		is used as number of pixel from right/bottom. You can also
> +		specify 'm' for centering the image.
> +
> +		Example:
> +		setenv splashpos=m,m
> +			=> Image at center of screen
> +
> +		setenv splashpos=30,20
> +			=> Image at x = 20 and y = 30
> +
> +		setenv splashpos=-10,m
> +			=> Image at x = dspWidth - bmpWidth - 9 and y = center
> +
>  - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
>  
>  		If this option is set, additionally to standard BMP
> diff --git a/common/lcd.c b/common/lcd.c
> index 74a5c77..b9a698d
> --- a/common/lcd.c
> +++ b/common/lcd.c
> @@ -620,6 +620,11 @@ void bitmap_plot (int x, int y)
>   * Display the BMP file located at address bmp_image.
>   * Only uncompressed.
>   */
> +
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +#define BMP_ALIGN_CENTER	0x7FFF
> +#endif
> +
>  int lcd_display_bitmap(ulong bmp_image, int x, int y)
>  {
>  #if !defined(CONFIG_MCC200)
> @@ -731,6 +736,19 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
>  #endif
>  
>  	padded_line = (width&0x3) ? ((width&~0x3)+4) : (width);
> +
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +	if (x == BMP_ALIGN_CENTER)
> +		x = max(0, (pwidth - width) / 2);
> +	else if (x < 0)
> +		x = max(0, pwidth - width + x + 1);
> +
> +	if (y == BMP_ALIGN_CENTER)
> +		y = max(0, (panel_info.vl_row - height) / 2);
> +	else if (y < 0)
> +		y = max(0, panel_info.vl_row - height + y + 1);
> +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
> +
>  	if ((x + width)>pwidth)
>  		width = pwidth - x;
>  	if ((y + height)>panel_info.vl_row)
> @@ -809,9 +827,26 @@ static void *lcd_logo (void)
>  	static int do_splash = 1;
>  
>  	if (do_splash && (s = getenv("splashimage")) != NULL) {
> -		addr = simple_strtoul(s, NULL, 16);
> +		int x = 0, y = 0;
>  		do_splash = 0;
>  
> +		addr = simple_strtoul (s, NULL, 16);
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +		if ((s = getenv ("splashpos")) != NULL) {
> +			if (s[0] == 'm')
> +				x = BMP_ALIGN_CENTER;
> +			else
> +				x = simple_strtol (s, NULL, 0);
> +
> +			if ((s = strchr (s + 1, ',')) != NULL) {
> +				if (s[1] == 'm')
> +					y = BMP_ALIGN_CENTER;
> +				else
> +					y = simple_strtol (s + 1, NULL, 0);
> +			}
> +		}
> +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
> +
>  #ifdef CONFIG_VIDEO_BMP_GZIP
>  		bmp_image_t *bmp = (bmp_image_t *)addr;
>  		unsigned long len;
> @@ -822,7 +857,7 @@ static void *lcd_logo (void)
>  		}
>  #endif
>  
> -		if (lcd_display_bitmap (addr, 0, 0) == 0) {
> +		if (lcd_display_bitmap (addr, x, y) == 0) {
>  			return ((void *)lcd_base);
>  		}
>  	}
> diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
> index bcafb27..6adce19
> --- a/drivers/video/cfb_console.c
> +++ b/drivers/video/cfb_console.c
> @@ -193,6 +193,11 @@ CONFIG_VIDEO_HW_CURSOR:	     - Uses the hardware cursor capability of the
>  #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
>  #include <watchdog.h>
>  #include <bmp_layout.h>
> +
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +#define BMP_ALIGN_CENTER	0x7FFF
> +#endif
> +
>  #endif
>  
>  /*****************************************************************************/
> @@ -877,6 +882,18 @@ int video_display_bitmap (ulong bmp_image, int x, int y)
>  
>  	padded_line = (((width * bpp + 7) / 8) + 3) & ~0x3;
>  
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +	if (x == BMP_ALIGN_CENTER)
> +		x = max(0, (VIDEO_VISIBLE_COLS - width) / 2);
> +	else if (x < 0)
> +		x = max(0, VIDEO_VISIBLE_COLS - width + x + 1);
> +
> +	if (y == BMP_ALIGN_CENTER)
> +		y = max(0, (VIDEO_VISIBLE_ROWS - height) / 2);
> +	else if (y < 0)
> +		y = max(0, VIDEO_VISIBLE_ROWS - height + y + 1);
> +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
> +
>  	if ((x + width) > VIDEO_VISIBLE_COLS)
>  		width = VIDEO_VISIBLE_COLS - x;
>  	if ((y + height) > VIDEO_VISIBLE_ROWS)
> @@ -1188,9 +1205,26 @@ static void *video_logo (void)
>  	ulong addr;
>  
>  	if ((s = getenv ("splashimage")) != NULL) {
> +		int x = 0, y = 0;
> +
>  		addr = simple_strtoul (s, NULL, 16);
> +#ifdef CONFIG_SPLASH_SCREEN_ALIGN
> +		if ((s = getenv ("splashpos")) != NULL) {
> +			if (s[0] == 'm')
> +				x = BMP_ALIGN_CENTER;
> +			else
> +				x = simple_strtol (s, NULL, 0);
> +
> +			if ((s = strchr (s + 1, ',')) != NULL) {
> +				if (s[1] == 'm')
> +					y = BMP_ALIGN_CENTER;
> +				else
> +					y = simple_strtol (s + 1, NULL, 0);
> +			}
> +		}
> +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
>  
> -		if (video_display_bitmap (addr, 0, 0) == 0) {
> +		if (video_display_bitmap (addr, x, y) == 0) {
>  			return ((void *) (video_fb_address));
>  		}
>  	}

-- 
-------------------------------------------------------------------------
Dipl.-Ing. Matthias Fuchs
Head of System Design

esd electronic system design gmbh
Vahrenwalder Str. 207 - 30165 Hannover - GERMANY
Phone: +49-511-37298-0 - Fax: +49-511-37298-68
Please visit our homepage http://www.esd.eu
Quality Products - Made in Germany
-------------------------------------------------------------------------
Geschäftsführer: Klaus Detering, Dr. Werner Schulze
Amtsgericht Hannover HRB 51373 - VAT-ID DE 115672832
-------------------------------------------------------------------------


More information about the U-Boot mailing list