diff options
| -rw-r--r-- | common/cmd_bmp.c | 118 | ||||
| -rw-r--r-- | include/bmp_layout.h | 77 | ||||
| -rw-r--r-- | include/cmd_bmp.h | 44 | 
3 files changed, 239 insertions, 0 deletions
| diff --git a/common/cmd_bmp.c b/common/cmd_bmp.c new file mode 100644 index 000000000..c6a16a46c --- /dev/null +++ b/common/cmd_bmp.c @@ -0,0 +1,118 @@ +/* + * (C) Copyright 2002 + * Dtlev Zundel, DENX Software Engineering, dzu@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * BMP handling routines + */ + +#include <common.h> +#include <bmp_layout.h> +#include <command.h> + +#if (CONFIG_COMMANDS & CFG_CMD_BMP) + +static int bmp_info (ulong addr); +static int bmp_display (ulong addr); + +/* + * Subroutine:  do_bmp + * + * Description: Handler for 'bmp' command.. + * + * Inputs:	argv[1] contains the subcommand + * + * Return:      None + * + */ +int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	ulong addr; + +	switch (argc) { +	case 2:		/* use load_addr as default address */ +		addr = load_addr; +		break; +	case 3:		/* use argument */ +		addr = simple_strtoul(argv[2], NULL, 16); +		break; +	default: +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	/* Allow for short names +	 * Adjust length if more sub-commands get added +	 */ +	if (strncmp(argv[1],"info",1) == 0) { +		return (bmp_info(addr)); +	} else if (strncmp(argv[1],"display",1) == 0) { +		return (bmp_display(addr)); +	} else { +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} +} + +/* + * Subroutine:  bmp_info + * + * Description: Show information about bmp file in memory + * + * Inputs:	addr		address of the bmp file + * + * Return:      None + * + */ +static int bmp_info(ulong addr) +{ +	bmp_image_t *bmp=(bmp_image_t *)addr; +	if (!((bmp->header.signature[0]=='B') && +	      (bmp->header.signature[1]=='M'))) { +		printf("There is no valid bmp file at the given address\n"); +		return(1); +	} +	printf("Image size    : %d x %d\n", le32_to_cpu(bmp->header.width), +	       le32_to_cpu(bmp->header.height)); +	printf("Bits per pixel: %d\n", le16_to_cpu(bmp->header.bit_count)); +	printf("Compression   : %d\n", le32_to_cpu(bmp->header.compression)); +	return(0); +} + +/* + * Subroutine:  bmp_display + * + * Description: Display bmp file located in memory + * + * Inputs:	addr		address of the bmp file + * + * Return:      None + * + */ +static int bmp_display(ulong addr) +{ +	extern int lcd_display_bitmap (ulong); + +	return (lcd_display_bitmap (addr)); +} + +#endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) */ diff --git a/include/bmp_layout.h b/include/bmp_layout.h new file mode 100644 index 000000000..7285a264d --- /dev/null +++ b/include/bmp_layout.h @@ -0,0 +1,77 @@ +/* (C) Copyright 2002 + * Detlev Zundel, DENX Software Engineering, dzu@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/************************************************************************/ +/* ** Layout of a bmp file						*/ +/************************************************************************/ + +#ifndef _BMP_H_ +#define _BMP_H_ + +typedef struct bmp_color_table_entry { +  __u8 blue; +  __u8 green; +  __u8 red; +  __u8 reserved; +} __attribute__((packed)) bmp_color_table_entry_t; + +/* When accessing these fields, remember that they are stored in little +   endian format, so use linux macros, e.g. le32_to_cpu(width)          */ + +typedef	struct bmp_header { +  /* Header */ +  char signature[2]; +  __u32 file_size; +  __u32 reserved; +  __u32 data_offset; +  /* InfoHeader */ +  __u32 size; +  __u32 width; +  __u32 height; +  __u16 planes; +  __u16 bit_count; +  __u32 compression; +  __u32 image_size; +  __u32 x_pixels_per_m; +  __u32 y_pixels_per_m; +  __u32 colors_used; +  __u32 colors_important; +  /* ColorTable */ +   +}  __attribute__((packed)) bmp_header_t; + +typedef struct bmp_image { +  bmp_header_t header; +  /* We use a zero sized array just as a placeholder for variable +     sized array */ +  bmp_color_table_entry_t color_table[0]; +} bmp_image_t; + +/* Data in the bmp_image is aligned to this length */ +#define BMP_DATA_ALIGN 4 + +/* Constants for the compression field */ +#define BMP_BI_RGB  0 +#define BMP_BI_RLE8 1 +#define BMP_BI_RLE4 2 + +#endif /* _BMP_H_ */ diff --git a/include/cmd_bmp.h b/include/cmd_bmp.h new file mode 100644 index 000000000..1f7157845 --- /dev/null +++ b/include/cmd_bmp.h @@ -0,0 +1,44 @@ +/* (C) Copyright 2002 + * Detlev Zundel, DENX Software Engineering, dzu@denx.de. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Bitmap display support + */ +#ifndef	_CMD_BMP_H +#define	_CMD_BMP_H + +#include <common.h> +#include <command.h> + + +#if (CONFIG_COMMANDS & CFG_CMD_BMP) + +#define CMD_TBL_BMP	MK_CMD_TBL_ENTRY(				\ +	"bmp", 3,	3,	1,	do_bmp,				\ +	"bmp     - manipulate BMP image data\n",			\ +	"\nbmp info <imageAddr>    - display image info\n"		\ +	"bmp display <imageAddr> - display image\n"			\ +), +int do_bmp (cmd_tbl_t *cmdtp,  int flag, int argc, char *argv[]); + +#else +#define CMD_TBL_BMP +#endif + +#endif	/* _CMD_BMP_H */ |