David Brownell <david-b@pacbell.net>

- Don't let disabled TAPs be set as the current target

 - Improve "targets" output:
    * Remove undesirable "chain position" number; we discourage using them
    * TAP and Target column updates:
       + make them long enough for current usage
       + improve labels, removing guesswork
       + "TapName" label patches scan_chain output
    * Highlight the "current" target
    * Display "tap disabled" as a new pseudo-state
    * Update docs accordingly

git-svn-id: svn://svn.berlios.de/openocd/trunk@2107 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
oharboe 2009-06-08 06:16:43 +00:00
parent a221892f60
commit a405fd1581
2 changed files with 31 additions and 11 deletions

View File

@ -2117,14 +2117,15 @@ You can display the list with the @command{targets}
This display often has only one CPU; here's what it might This display often has only one CPU; here's what it might
look like with more than one: look like with more than one:
@verbatim @verbatim
CmdName Type Endian AbsChainPos Name State TargetName Type Endian TapName State
-- ---------- ---------- ---------- ----------- ------------- ---------- -- ------------------ ---------- ------ ------------------ ------------
0: rm9200.cpu arm920t little 2 rm9200.cpu running 0* at91rm9200.cpu arm920t little at91rm9200.cpu running
1: MyTarget cortex_m3 little 0 mychip.cpu halted 1 MyTarget cortex_m3 little mychip.foo tap-disabled
@end verbatim @end verbatim
One member of that list is the @dfn{current target}, which One member of that list is the @dfn{current target}, which
is implicitly referenced by many commands. is implicitly referenced by many commands.
It's the one marked with a @code{*} near the target name.
In particular, memory addresses often refer to the address In particular, memory addresses often refer to the address
space seen by that current target. space seen by that current target.
Commands like @command{mdw} (memory display words) Commands like @command{mdw} (memory display words)

View File

@ -1467,6 +1467,12 @@ static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd,
command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] ); command_print(cmd_ctx,"Target: %s is unknown, try one of:\n", args[0] );
goto DumpTargets; goto DumpTargets;
} }
if (!target->tap->enabled) {
command_print(cmd_ctx,"Target: TAP %s is disabled, "
"can't be the current target\n",
target->tap->dotted_name);
return ERROR_FAIL;
}
cmd_ctx->current_target = target->target_number; cmd_ctx->current_target = target->target_number;
return ERROR_OK; return ERROR_OK;
@ -1474,19 +1480,32 @@ static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd,
DumpTargets: DumpTargets:
target = all_targets; target = all_targets;
command_print(cmd_ctx, " CmdName Type Endian AbsChainPos Name State "); command_print(cmd_ctx, " TargetName Type Endian TapName State ");
command_print(cmd_ctx, "-- ---------- ---------- ---------- ----------- ------------- ----------"); command_print(cmd_ctx, "-- ------------------ ---------- ------ ------------------ ------------");
while (target) while (target)
{ {
/* XX: abcdefghij abcdefghij abcdefghij abcdefghij */ const char *state;
command_print(cmd_ctx, "%2d: %-10s %-10s %-10s %10d %14s %s", char marker = ' ';
if (target->tap->enabled)
state = Jim_Nvp_value2name_simple(nvp_target_state,
target->state)->name;
else
state = "tap-disabled";
if (cmd_ctx->current_target == target->target_number)
marker = '*';
/* keep columns lined up to match the headers above */
command_print(cmd_ctx, "%2d%c %-18s %-10s %-6s %-18s %s",
target->target_number, target->target_number,
marker,
target->cmd_name, target->cmd_name,
target_get_name(target), target_get_name(target),
Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness )->name, Jim_Nvp_value2name_simple(nvp_target_endian,
target->tap->abs_chain_position, target->endianness)->name,
target->tap->dotted_name, target->tap->dotted_name,
Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name ); state);
target = target->next; target = target->next;
} }