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