]> git.sur5r.net Git - u-boot/blob - common/cmd_bmp.c
Update make target for ARM supported boards.
[u-boot] / 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 #include <asm/byteorder.h>
32
33 #if (CONFIG_COMMANDS & CFG_CMD_BMP)
34
35 static int bmp_info (ulong addr);
36 static int bmp_display (ulong addr, int x, int y);
37
38 /*
39  * Subroutine:  do_bmp
40  *
41  * Description: Handler for 'bmp' command..
42  *
43  * Inputs:      argv[1] contains the subcommand
44  *
45  * Return:      None
46  *
47  */
48 int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
49 {
50         ulong addr;
51         int x = 0, y = 0;
52
53         switch (argc) {
54         case 2:         /* use load_addr as default address */
55                 addr = load_addr;
56                 break;
57         case 3:         /* use argument */
58                 addr = simple_strtoul(argv[2], NULL, 16);
59                 break;
60         case 5:
61                 addr = simple_strtoul(argv[2], NULL, 16);
62                 x = simple_strtoul(argv[3], NULL, 10);
63                 y = simple_strtoul(argv[4], NULL, 10);
64                 break;
65         default:
66                 printf ("Usage:\n%s\n", cmdtp->usage);
67                 return 1;
68         }
69
70         /* Allow for short names
71          * Adjust length if more sub-commands get added
72          */
73         if (strncmp(argv[1],"info",1) == 0) {
74                 return (bmp_info(addr));
75         } else if (strncmp(argv[1],"display",1) == 0) {
76             return (bmp_display(addr, x, y));
77         } else {
78                 printf ("Usage:\n%s\n", cmdtp->usage);
79                 return 1;
80         }
81 }
82
83 U_BOOT_CMD(
84         bmp,    5,      1,      do_bmp,
85         "bmp     - manipulate BMP image data\n",
86         "info <imageAddr>          - display image info\n"
87         "bmp display <imageAddr> [x y] - display image at x,y\n"
88 );
89
90 /*
91  * Subroutine:  bmp_info
92  *
93  * Description: Show information about bmp file in memory
94  *
95  * Inputs:      addr            address of the bmp file
96  *
97  * Return:      None
98  *
99  */
100 static int bmp_info(ulong addr)
101 {
102         bmp_image_t *bmp=(bmp_image_t *)addr;
103         if (!((bmp->header.signature[0]=='B') &&
104               (bmp->header.signature[1]=='M'))) {
105                 printf("There is no valid bmp file at the given address\n");
106                 return(1);
107         }
108         printf("Image size    : %d x %d\n", le32_to_cpu(bmp->header.width),
109                le32_to_cpu(bmp->header.height));
110         printf("Bits per pixel: %d\n", le16_to_cpu(bmp->header.bit_count));
111         printf("Compression   : %d\n", le32_to_cpu(bmp->header.compression));
112         return(0);
113 }
114
115 /*
116  * Subroutine:  bmp_display
117  *
118  * Description: Display bmp file located in memory
119  *
120  * Inputs:      addr            address of the bmp file
121  *
122  * Return:      None
123  *
124  */
125 static int bmp_display(ulong addr, int x, int y)
126 {
127 #if defined(CONFIG_LCD)
128         extern int lcd_display_bitmap (ulong, int, int);
129
130         return (lcd_display_bitmap (addr, x, y));
131 #elif defined(CONFIG_VIDEO)
132         extern int video_display_bitmap (ulong, int, int);
133         return (video_display_bitmap (addr, x, y));
134 #else
135 # error bmp_display() requires CONFIG_LCD or CONFIG_VIDEO
136 #endif
137 }
138
139 #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) */