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
This commit is contained in:
parent
880ae3f077
commit
0332da1f15
|
@ -150,17 +150,17 @@ COMMAND_HANDLER(handle_rtt_channels_command)
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int jim_channel_list(Jim_Interp *interp, int argc,
|
COMMAND_HANDLER(handle_channel_list)
|
||||||
Jim_Obj * const *argv)
|
|
||||||
{
|
{
|
||||||
Jim_Obj *list;
|
|
||||||
Jim_Obj *channel_list;
|
|
||||||
char channel_name[CHANNEL_NAME_SIZE];
|
char channel_name[CHANNEL_NAME_SIZE];
|
||||||
const struct rtt_control *ctrl;
|
const struct rtt_control *ctrl;
|
||||||
struct rtt_channel_info info;
|
struct rtt_channel_info info;
|
||||||
|
|
||||||
|
if (CMD_ARGC != 0)
|
||||||
|
return ERROR_COMMAND_SYNTAX_ERROR;
|
||||||
|
|
||||||
if (!rtt_found_cb()) {
|
if (!rtt_found_cb()) {
|
||||||
Jim_SetResultFormatted(interp, "rtt: Control block not available");
|
command_print(CMD, "rtt: Control block not available");
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,81 +169,47 @@ static int jim_channel_list(Jim_Interp *interp, int argc,
|
||||||
info.name = channel_name;
|
info.name = channel_name;
|
||||||
info.name_length = sizeof(channel_name);
|
info.name_length = sizeof(channel_name);
|
||||||
|
|
||||||
list = Jim_NewListObj(interp, NULL, 0);
|
command_print(CMD, "{");
|
||||||
channel_list = Jim_NewListObj(interp, NULL, 0);
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < ctrl->num_up_channels; i++) {
|
for (unsigned int i = 0; i < ctrl->num_up_channels; i++) {
|
||||||
int ret;
|
int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
|
||||||
Jim_Obj *tmp;
|
|
||||||
|
|
||||||
ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_UP, &info);
|
|
||||||
|
|
||||||
if (ret != ERROR_OK)
|
if (ret != ERROR_OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!info.size)
|
if (!info.size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tmp = Jim_NewListObj(interp, NULL, 0);
|
command_print(CMD,
|
||||||
|
" {\n"
|
||||||
Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
|
" name %s\n"
|
||||||
"name", -1));
|
" size 0x%" PRIx32 "\n"
|
||||||
Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
|
" flags 0x%" PRIx32 "\n"
|
||||||
info.name, -1));
|
" }",
|
||||||
|
info.name, info.size, info.flags);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Jim_ListAppendElement(interp, list, channel_list);
|
command_print(CMD, "}\n{");
|
||||||
|
|
||||||
channel_list = Jim_NewListObj(interp, NULL, 0);
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < ctrl->num_down_channels; i++) {
|
for (unsigned int i = 0; i < ctrl->num_down_channels; i++) {
|
||||||
int ret;
|
int ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
|
||||||
Jim_Obj *tmp;
|
|
||||||
|
|
||||||
ret = rtt_read_channel_info(i, RTT_CHANNEL_TYPE_DOWN, &info);
|
|
||||||
|
|
||||||
if (ret != ERROR_OK)
|
if (ret != ERROR_OK)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!info.size)
|
if (!info.size)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
tmp = Jim_NewListObj(interp, NULL, 0);
|
command_print(CMD,
|
||||||
|
" {\n"
|
||||||
Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
|
" name %s\n"
|
||||||
"name", -1));
|
" size 0x%" PRIx32 "\n"
|
||||||
Jim_ListAppendElement(interp, tmp, Jim_NewStringObj(interp,
|
" flags 0x%" PRIx32 "\n"
|
||||||
info.name, -1));
|
" }",
|
||||||
|
info.name, info.size, info.flags);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Jim_ListAppendElement(interp, list, channel_list);
|
command_print(CMD, "}");
|
||||||
Jim_SetResult(interp, list);
|
|
||||||
|
|
||||||
return JIM_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct command_registration rtt_subcommand_handlers[] = {
|
static const struct command_registration rtt_subcommand_handlers[] = {
|
||||||
|
@ -284,7 +250,7 @@ static const struct command_registration rtt_subcommand_handlers[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "channellist",
|
.name = "channellist",
|
||||||
.jim_handler = jim_channel_list,
|
.handler = handle_channel_list,
|
||||||
.mode = COMMAND_EXEC,
|
.mode = COMMAND_EXEC,
|
||||||
.help = "list available channels",
|
.help = "list available channels",
|
||||||
.usage = ""
|
.usage = ""
|
||||||
|
|
Loading…
Reference in New Issue