X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=common%2Fcmd_bmp.c;h=5a52edde31dff8c4083baa449302ffab1b906cb4;hb=32057717e06a4e703fdf3774671cea14554de76b;hp=e60f18b15b5cbb8a92fe00295dfd67d716cdb2ad;hpb=62c3ae7c6ef215b1afa614abdf61acf077752207;p=oweals%2Fu-boot.git diff --git a/common/cmd_bmp.c b/common/cmd_bmp.c index e60f18b15b..5a52edde31 100644 --- a/common/cmd_bmp.c +++ b/common/cmd_bmp.c @@ -26,15 +26,14 @@ */ #include +#include #include #include #include #include +#include static int bmp_info (ulong addr); -static int bmp_display (ulong addr, int x, int y); - -int gunzip(void *, int, unsigned char *, unsigned long *); /* * Allocate and decompress a BMP image using gunzip(). @@ -46,7 +45,7 @@ int gunzip(void *, int, unsigned char *, unsigned long *); * didn't contain a valid BMP signature. */ #ifdef CONFIG_VIDEO_BMP_GZIP -static bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp) +bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp) { void *dst; unsigned long len; @@ -80,17 +79,69 @@ static bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp) return NULL; } - puts("Gzipped BMP image detected!\n"); + debug("Gzipped BMP image detected!\n"); return bmp; } #else -static bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp) +bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp) { return NULL; } #endif +static int do_bmp_info(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) +{ + ulong addr; + + switch (argc) { + case 1: /* use load_addr as default address */ + addr = load_addr; + break; + case 2: /* use argument */ + addr = simple_strtoul(argv[1], NULL, 16); + break; + default: + return CMD_RET_USAGE; + } + + return (bmp_info(addr)); +} + +static int do_bmp_display(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[]) +{ + ulong addr; + int x = 0, y = 0; + + switch (argc) { + case 1: /* use load_addr as default address */ + addr = load_addr; + break; + case 2: /* use argument */ + addr = simple_strtoul(argv[1], NULL, 16); + break; + case 4: + addr = simple_strtoul(argv[1], NULL, 16); + x = simple_strtoul(argv[2], NULL, 10); + y = simple_strtoul(argv[3], NULL, 10); + break; + default: + return CMD_RET_USAGE; + } + + return (bmp_display(addr, x, y)); +} + +static cmd_tbl_t cmd_bmp_sub[] = { + U_BOOT_CMD_MKENT(info, 3, 0, do_bmp_info, "", ""), + U_BOOT_CMD_MKENT(display, 5, 0, do_bmp_display, "", ""), +}; + +#ifdef CONFIG_NEEDS_MANUAL_RELOC +void bmp_reloc(void) { + fixup_cmdtable(cmd_bmp_sub, ARRAY_SIZE(cmd_bmp_sub)); +} +#endif /* * Subroutine: do_bmp @@ -102,46 +153,27 @@ static bmp_image_t *gunzip_bmp(unsigned long addr, unsigned long *lenp) * Return: None * */ -int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +static int do_bmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - ulong addr; - int x = 0, y = 0; + cmd_tbl_t *c; - 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; - case 5: - addr = simple_strtoul(argv[2], NULL, 16); - x = simple_strtoul(argv[3], NULL, 10); - y = simple_strtoul(argv[4], NULL, 10); - break; - default: - cmd_usage(cmdtp); - return 1; - } + /* Strip off leading 'bmp' command argument */ + argc--; + argv++; - /* 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, x, y)); - } else { - cmd_usage(cmdtp); - return 1; - } + c = find_cmd_tbl(argv[0], &cmd_bmp_sub[0], ARRAY_SIZE(cmd_bmp_sub)); + + if (c) + return c->cmd(cmdtp, flag, argc, argv); + else + return CMD_RET_USAGE; } U_BOOT_CMD( bmp, 5, 1, do_bmp, - "bmp - manipulate BMP image data\n", + "manipulate BMP image data", "info - display image info\n" - "bmp display [x y] - display image at x,y\n" + "bmp display [x y] - display image at x,y" ); /* @@ -189,7 +221,7 @@ static int bmp_info(ulong addr) * Return: None * */ -static int bmp_display(ulong addr, int x, int y) +int bmp_display(ulong addr, int x, int y) { int ret; bmp_image_t *bmp = (bmp_image_t *)addr; @@ -205,13 +237,9 @@ static int bmp_display(ulong addr, int x, int y) } #if defined(CONFIG_LCD) - extern int lcd_display_bitmap (ulong, int, int); - - ret = lcd_display_bitmap ((unsigned long)bmp, x, y); + ret = lcd_display_bitmap((ulong)bmp, x, y); #elif defined(CONFIG_VIDEO) - extern int video_display_bitmap (ulong, int, int); - - ret = video_display_bitmap ((unsigned long)bmp, x, y); + ret = video_display_bitmap((unsigned long)bmp, x, y); #else # error bmp_display() requires CONFIG_LCD or CONFIG_VIDEO #endif