* Patches by Pantelis Antoniou, 30 Mar 2004:
[pandora-u-boot.git] / common / cmd_bmp.c
1 /*
2  * (C) Copyright 2002
3  * Detlev Zundel, DENX Software Engineering, dzu@denx.de.
4  *
5  * See file CREDITS for list of people who contributed to this
6  * project.
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation; either version 2 of
11  * the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21  * MA 02111-1307 USA
22  */
23
24 /*
25  * BMP handling routines
26  */
27
28 #include <common.h>
29 #include <bmp_layout.h>
30 #include <command.h>
31
32 #if (CONFIG_COMMANDS & CFG_CMD_BMP)
33
34 static int bmp_info (ulong addr);
35 static int bmp_display (ulong addr, int x, int y);
36
37 /*
38  * Subroutine:  do_bmp
39  *
40  * Description: Handler for 'bmp' command..
41  *
42  * Inputs:      argv[1] contains the subcommand
43  *
44  * Return:      None
45  *
46  */
47 int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
48 {
49         ulong addr;
50         int x = 0, y = 0;
51
52         switch (argc) {
53         case 2:         /* use load_addr as default address */
54                 addr = load_addr;
55                 break;
56         case 3:         /* use argument */
57                 addr = simple_strtoul(argv[2], NULL, 16);
58                 break;
59         case 5:
60                 addr = simple_strtoul(argv[2], NULL, 16);
61                 x = simple_strtoul(argv[3], NULL, 10);
62                 y = simple_strtoul(argv[4], NULL, 10);
63                 break;
64         default:
65                 printf ("Usage:\n%s\n", cmdtp->usage);
66                 return 1;
67         }
68
69         /* Allow for short names
70          * Adjust length if more sub-commands get added
71          */
72         if (strncmp(argv[1],"info",1) == 0) {
73                 return (bmp_info(addr));
74         } else if (strncmp(argv[1],"display",1) == 0) {
75             return (bmp_display(addr, x, y));
76         } else {
77                 printf ("Usage:\n%s\n", cmdtp->usage);
78                 return 1;
79         }
80 }
81
82 U_BOOT_CMD(
83         bmp,    5,      1,      do_bmp,
84         "bmp     - manipulate BMP image data\n",
85         "info <imageAddr>          - display image info\n"
86         "bmp display <imageAddr> [x y] - display image at x,y\n"
87 );
88
89 /*
90  * Subroutine:  bmp_info
91  *
92  * Description: Show information about bmp file in memory
93  *
94  * Inputs:      addr            address of the bmp file
95  *
96  * Return:      None
97  *
98  */
99 static int bmp_info(ulong addr)
100 {
101         bmp_image_t *bmp=(bmp_image_t *)addr;
102         if (!((bmp->header.signature[0]=='B') &&
103               (bmp->header.signature[1]=='M'))) {
104                 printf("There is no valid bmp file at the given address\n");
105                 return(1);
106         }
107         printf("Image size    : %d x %d\n", le32_to_cpu(bmp->header.width),
108                le32_to_cpu(bmp->header.height));
109         printf("Bits per pixel: %d\n", le16_to_cpu(bmp->header.bit_count));
110         printf("Compression   : %d\n", le32_to_cpu(bmp->header.compression));
111         return(0);
112 }
113
114 /*
115  * Subroutine:  bmp_display
116  *
117  * Description: Display bmp file located in memory
118  *
119  * Inputs:      addr            address of the bmp file
120  *
121  * Return:      None
122  *
123  */
124 static int bmp_display(ulong addr, int x, int y)
125 {
126 #ifdef CONFIG_LCD
127     extern int lcd_display_bitmap (ulong, int, int);
128
129         return (lcd_display_bitmap (addr, x, y));
130 #endif
131 #ifdef CONFIG_VIDEO
132         extern int video_display_bitmap (ulong, int, int);
133         return (video_display_bitmap (addr, x, y));
134 #endif
135 }
136
137 #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) */