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