1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * (C) Copyright 2002
4 * Detlev Zundel, DENX Software Engineering, dzu@denx.de.
5 */
6
7/*
8 * BMP handling routines
9 */
10
11#include <common.h>
12#include <command.h>
13#include <image.h>
14#include <mapmem.h>
15#include <splash.h>
16#include <video.h>
17#include <stdlib.h>
18
19static int do_bmp_info(struct cmd_tbl *cmdtp, int flag, int argc,
20		       char *const argv[])
21{
22	ulong addr;
23
24	switch (argc) {
25	case 1:		/* use image_load_addr as default address */
26		addr = image_load_addr;
27		break;
28	case 2:		/* use argument */
29		addr = hextoul(argv[1], NULL);
30		break;
31	default:
32		return CMD_RET_USAGE;
33	}
34
35	return (bmp_info(addr));
36}
37
38static int do_bmp_display(struct cmd_tbl *cmdtp, int flag, int argc,
39			  char *const argv[])
40{
41	ulong addr;
42	int x = 0, y = 0;
43
44	splash_get_pos(&x, &y);
45
46	switch (argc) {
47	case 1:		/* use image_load_addr as default address */
48		addr = image_load_addr;
49		break;
50	case 2:		/* use argument */
51		addr = hextoul(argv[1], NULL);
52		break;
53	case 4:
54		addr = hextoul(argv[1], NULL);
55		if (!strcmp(argv[2], "m"))
56			x = BMP_ALIGN_CENTER;
57		else
58			x = dectoul(argv[2], NULL);
59		if (!strcmp(argv[3], "m"))
60			y = BMP_ALIGN_CENTER;
61		else
62			y = dectoul(argv[3], NULL);
63		break;
64	default:
65		return CMD_RET_USAGE;
66	}
67
68	return (bmp_display(addr, x, y));
69}
70
71static struct cmd_tbl cmd_bmp_sub[] = {
72	U_BOOT_CMD_MKENT(info, 3, 0, do_bmp_info, "", ""),
73	U_BOOT_CMD_MKENT(display, 5, 0, do_bmp_display, "", ""),
74};
75
76static int do_bmp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
77{
78	struct cmd_tbl *c;
79
80	/* Strip off leading 'bmp' command argument */
81	argc--;
82	argv++;
83
84	c = find_cmd_tbl(argv[0], &cmd_bmp_sub[0], ARRAY_SIZE(cmd_bmp_sub));
85
86	if (c)
87		return  c->cmd(cmdtp, flag, argc, argv);
88	else
89		return CMD_RET_USAGE;
90}
91
92U_BOOT_CMD(
93	bmp,	5,	1,	do_bmp,
94	"manipulate BMP image data",
95	"info <imageAddr>          - display image info\n"
96	"bmp display <imageAddr> [x y] - display image at x,y"
97);
98