summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2016-06-17 15:52:16 +0200
committerLeo C2016-06-21 17:11:10 +0200
commit13e88ed59974b6940815b6a392266ad34a9ee410 (patch)
tree76a2d017f73c0931c879cb461b445e3b373aa2c6
parente1f1d450f138e5c16cfb4cd35437b9d360286037 (diff)
downloadz180-stamp-13e88ed59974b6940815b6a392266ad34a9ee410.zip
Add verbose and xtrace options to cli
-rw-r--r--avr/cli.c46
-rw-r--r--avr/cmd_mem.c2
-rw-r--r--avr/command.c4
-rw-r--r--avr/debug.c2
4 files changed, 46 insertions, 8 deletions
diff --git a/avr/cli.c b/avr/cli.c
index 77876af..891a26a 100644
--- a/avr/cli.c
+++ b/avr/cli.c
@@ -35,6 +35,23 @@
#define debug_parser(fmt, args...) \
debug_cond(DEBUG_PARSER, fmt, ##args)
+
+static bool opt_xtrace;
+static bool opt_verbose;
+static int_least8_t command_level;
+
+static void cli_trace_cmd(int_fast8_t level, int argc, char *argv[])
+{
+ while (level-- > 0)
+ putchar('+');
+ for (int_fast8_t i = 0; i < argc; i++)
+ printf_P(PSTR(" %s"), argv[i]);
+ putchar('\n');
+}
+
+
+
+
static int cli_parse_line(char *line, char *argv[])
{
uint_fast8_t state = 0;
@@ -232,9 +249,20 @@ static int cli_run_command(const char *cmd, int flag)
uint_fast8_t inquotes, repeatable = 1;
int rc = 0;
+ opt_verbose = 0;
+ opt_xtrace = 0;
+ char *optenv = getenv_str(PSTR("cli"));
+ if (optenv) {
+ opt_verbose = (strstr_P(optenv, PSTR("verbose")) != NULL);
+ opt_xtrace = (strstr_P(optenv, PSTR("xtrace")) != NULL);
+ }
+
debug_parser("[RUN_COMMAND] cmd[%p]=\"%s\"\n",
cmd, cmd ? cmd : "NULL");
+ if (opt_verbose)
+ printf_P(PSTR("%s\n"), cmd, cmd ? cmd : "");
+
clear_ctrlc(); /* forget any previous Control C */
if (!cmd || !*cmd)
@@ -244,6 +272,7 @@ static int cli_run_command(const char *cmd, int flag)
if (!cmdbuf)
return -1; /* not enough memory */
+ ++command_level;
str = cmdbuf;
/* Process separators and check for invalid
@@ -294,8 +323,15 @@ static int cli_run_command(const char *cmd, int flag)
continue;
}
- if (cmd_process(flag, argc, argv, &repeatable) != CMD_RET_SUCCESS)
+ if (opt_xtrace)
+ cli_trace_cmd(command_level, argc, argv);
+
+ rc = cmd_process(flag, argc, argv, &repeatable);
+ if (rc != CMD_RET_SUCCESS) {
+ if (opt_verbose)
+ printf_P(PSTR("Command failed, result=%d\n"), rc);
rc = -1;
+ }
/* Did the user stop this? */
if (had_ctrlc()) {
@@ -306,6 +342,7 @@ static int cli_run_command(const char *cmd, int flag)
free(cmdbuf);
free(finaltoken);
+ --command_level;
return rc ? rc : repeatable;
}
@@ -376,9 +413,10 @@ void cli_loop(void)
} else if (len == 0)
flag |= CMD_FLAG_REPEAT;
- if (len == -1)
- my_puts_P(PSTR("<INTERRUPT>\n"));
- else
+ if (len == -1) {
+ if (opt_verbose)
+ my_puts_P(PSTR("<INTERRUPT>\n"));
+ } else
rc = run_command_repeatable(lastcommand, flag);
if (rc <= 0) {
diff --git a/avr/cmd_mem.c b/avr/cmd_mem.c
index ded5146..4fe9415 100644
--- a/avr/cmd_mem.c
+++ b/avr/cmd_mem.c
@@ -176,7 +176,7 @@ mod_mem(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const argv[])
addr++;
}
}
- } while (nbytes);
+ } while (nbytes > 0);
mm_last_addr = addr;
return CMD_RET_SUCCESS;
diff --git a/avr/command.c b/avr/command.c
index ed25dee..e696202 100644
--- a/avr/command.c
+++ b/avr/command.c
@@ -476,8 +476,8 @@ command_ret_t cmd_call(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]
command_ret_t result;
result = (cmdtp->cmd)(cmdtp, flag, argc, argv);
- if (result != CMD_RET_SUCCESS)
- debug("Command failed, result=%d\n", result);
+// if (result != CMD_RET_SUCCESS)
+// debug("Command failed, result=%d\n", result);
return result;
}
diff --git a/avr/debug.c b/avr/debug.c
index 384a5ad..e38ccb2 100644
--- a/avr/debug.c
+++ b/avr/debug.c
@@ -189,7 +189,7 @@ mod_mem_avr(cmd_tbl_t *cmdtp, int incrflag, int flag, int argc, char * const arg
addr++;
}
}
- } while (nbytes);
+ } while (nbytes > 0);
mm_last_addr = addr;
return CMD_RET_SUCCESS;