aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2022-12-18 22:42:18 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2023-03-25 18:11:14 +0000
commit0332da1f1518b0cb4150965614c09fcc7319ddbe (patch)
tree44d842c0f39a1e5222a5ac04ff1f58affc2797e0 /src
parent880ae3f07744a09e267bde00cf405c85a6f10482 (diff)
downloadriscv-openocd-0332da1f1518b0cb4150965614c09fcc7319ddbe.zip
riscv-openocd-0332da1f1518b0cb4150965614c09fcc7319ddbe.tar.gz
riscv-openocd-0332da1f1518b0cb4150965614c09fcc7319ddbe.tar.bz2
rtt: rewrite command 'rtt channellist' as COMMAND_HANDLER
This also fixes a mistake of the jim command returning ERROR_xx when function rtt_read_channel_info() returns error. While there: - format in a human readable way the output dictionary list, while preserving the structure of its TCL data; - add check for the number of parameters. Change-Id: Ica2b623699d3a606d3992975c836dae96f74b26d Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7489 Tested-by: jenkins
Diffstat (limited to 'src')
-rw-r--r--src/rtt/tcl.c86
1 files changed, 26 insertions, 60 deletions
diff --git a/src/rtt/tcl.c b/src/rtt/tcl.c
index 7cbdccf..f949aa1 100644
--- a/src/rtt/tcl.c
+++ b/src/rtt/tcl.c
@@ -150,17 +150,17 @@ COMMAND_HANDLER(handle_rtt_channels_command)
return ERROR_OK;
}
-static int jim_channel_list(Jim_Interp *interp, int argc,
- Jim_Obj * const *argv)
+COMMAND_HANDLER(handle_channel_list)
{
- Jim_Obj *list;
- Jim_Obj *channel_list;
char channel_name[CHANNEL_NAME_SIZE];
const struct rtt_control *ctrl;
struct rtt_channel_info info;
+ if (CMD_ARGC != 0)
+ return ERROR_COMMAND_SYNTAX_ERROR;
+
if (!rtt_found_cb()) {
- Jim_SetResultFormatted(interp, "rtt: Control block not available");
+ command_print(CMD, "rtt: Control block not available");
return ERROR_FAIL;
}
@@ -169,81 +169,47 @@ static int jim_channel_list(Jim_Interp *interp, int argc,
info.name = channel_name;
info.name_length = sizeof(channel_name);
- list = Jim_NewListObj(interp, NULL, 0);
- channel_list = Jim_NewListObj(interp, NULL, 0);
+ command_print(CMD, "{");
for (unsigned int i = 0; i < ctrl->num_up_channels; i++) {
- int ret;
- Jim_Obj *tmp;
-
- ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
-
+ int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
if (ret != ERROR_OK)
return ret;
if (!info.size)
continue;
- tmp = Jim_NewListObj(interp, NULL, 0);
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "name", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- info.name, -1));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "size", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.size));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "flags", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.flags));
-
- Jim_ListAppendElement(interp, channel_list, tmp);
+ command_print(CMD,
+ " {\n"
+ " name %s\n"
+ " size 0x%" PRIx32 "\n"
+ " flags 0x%" PRIx32 "\n"
+ " }",
+ info.name, info.size, info.flags);
}
- Jim_ListAppendElement(interp, list, channel_list);
-
- channel_list = Jim_NewListObj(interp, NULL, 0);
+ command_print(CMD, "}\n{");
for (unsigned int i = 0; i < ctrl->num_down_channels; i++) {
- int ret;
- Jim_Obj *tmp;
-
- ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
-
+ int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
if (ret != ERROR_OK)
return ret;
if (!info.size)
continue;
- tmp = Jim_NewListObj(interp, NULL, 0);
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "name", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- info.name, -1));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "size", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.size));
-
- Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
- "flags", -1));
- Jim_ListAppendElement(interp, tmp, Jim_NewIntObj(interp,
- info.flags));
-
- Jim_ListAppendElement(interp, channel_list, tmp);
+ command_print(CMD,
+ " {\n"
+ " name %s\n"
+ " size 0x%" PRIx32 "\n"
+ " flags 0x%" PRIx32 "\n"
+ " }",
+ info.name, info.size, info.flags);
}
- Jim_ListAppendElement(interp, list, channel_list);
- Jim_SetResult(interp, list);
+ command_print(CMD, "}");
- return JIM_OK;
+ return ERROR_OK;
}
static const struct command_registration rtt_subcommand_handlers[] = {
@@ -284,7 +250,7 @@ static const struct command_registration rtt_subcommand_handlers[] = {
},
{
.name = "channellist",
- .jim_handler = jim_channel_list,
+ .handler = handle_channel_list,
.mode = COMMAND_EXEC,
.help = "list available channels",
.usage = ""