David Brownell <david-b@pacbell.net>
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 8 Jun 2009 06:16:43 +0000 (06:16 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 8 Jun 2009 06:16:43 +0000 (06:16 +0000)
- 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

doc/openocd.texi
src/target/target.c

index 65075d77b896810f657b8314d377fd0f4976dc83..cb340b4b670a8c63fcf813ce3678e44c78425250 100644 (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
 look like with more than one:
 @verbatim
-    CmdName    Type       Endian     AbsChainPos Name          State
---  ---------- ---------- ---------- ----------- ------------- ----------
- 0: rm9200.cpu arm920t    little              2     rm9200.cpu running
- 1: MyTarget   cortex_m3  little              0     mychip.cpu halted
+    TargetName         Type       Endian TapName            State
+--  ------------------ ---------- ------ ------------------ ------------
+ 0* at91rm9200.cpu     arm920t    little at91rm9200.cpu     running
+ 1  MyTarget           cortex_m3  little mychip.foo         tap-disabled
 @end verbatim
 
 One member of that list is the @dfn{current target}, which
 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
 space seen by that current target.
 Commands like @command{mdw} (memory display words)
index 1c32fdbb132ac2e3141a8aa930c4c548bd416235..eac8763388e0c71d98e61aa81bbfd6c2932f5eae 100644 (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] );
                        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;
                return ERROR_OK;
@@ -1474,19 +1480,32 @@ static int handle_targets_command(struct command_context_s *cmd_ctx, char *cmd,
 DumpTargets:
 
        target = all_targets;
-       command_print(cmd_ctx, "    CmdName    Type       Endian     AbsChainPos Name          State     ");
-       command_print(cmd_ctx, "--  ---------- ---------- ---------- ----------- ------------- ----------");
+       command_print(cmd_ctx, "    TargetName         Type       Endian TapName            State       ");
+       command_print(cmd_ctx, "--  ------------------ ---------- ------ ------------------ ------------");
        while (target)
        {
-               /* XX: abcdefghij abcdefghij abcdefghij abcdefghij */
-               command_print(cmd_ctx, "%2d: %-10s %-10s %-10s %10d %14s %s",
+               const char *state;
+               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,
+                                         marker,
                                          target->cmd_name,
                                          target_get_name(target),
-                                         Jim_Nvp_value2name_simple( nvp_target_endian, target->endianness )->name,
-                                         target->tap->abs_chain_position,
+                                         Jim_Nvp_value2name_simple(nvp_target_endian,
+                                                               target->endianness)->name,
                                          target->tap->dotted_name,
-                                         Jim_Nvp_value2name_simple( nvp_target_state, target->state )->name );
+                                         state);
                target = target->next;
        }