1// SPDX-License-Identifier: GPL-2.0+
2/*
3 * The 'conitrace' command prints the codes received from the console input as
4 * hexadecimal numbers.
5 *
6 * Copyright (c) 2018, Heinrich Schuchardt <xypron.glpk@gmx.de>
7 */
8#include <common.h>
9#include <command.h>
10#include <linux/delay.h>
11
12static int do_conitrace(struct cmd_tbl *cmdtp, int flag, int argc,
13			char *const argv[])
14{
15	bool first = true;
16
17	printf("Waiting for your input\n");
18	printf("To terminate type 'x'\n");
19
20	/* Empty input buffer */
21	while (tstc())
22		getchar();
23
24	for (;;) {
25		int c = getchar();
26
27		if (first && (c == 'x' || c == 'X'))
28			break;
29
30		printf("%02x ", c);
31		first = false;
32
33		/* 10 ms delay - serves to detect separate keystrokes */
34		udelay(10000);
35		if (!tstc()) {
36			printf("\n");
37			first = true;
38		}
39	}
40
41	return CMD_RET_SUCCESS;
42}
43
44U_BOOT_LONGHELP(conitrace, "");
45
46U_BOOT_CMD_COMPLETE(
47	conitrace, 2, 0, do_conitrace,
48	"trace console input",
49	conitrace_help_text, NULL
50);
51