diff options
author | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-10 07:19:14 +0000 |
---|---|---|
committer | oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60> | 2009-06-10 07:19:14 +0000 |
commit | ba0f4a254c28ce0013e6dd2443f358316153610a (patch) | |
tree | 6b11f2cd47f5caed74cf5d4c1ab2f6b74a6daa37 | |
parent | 8b7f813b234613646ffae0e27df74cb0b2eaf38d (diff) | |
download | openocd_libswd-ba0f4a254c28ce0013e6dd2443f358316153610a.tar.gz openocd_libswd-ba0f4a254c28ce0013e6dd2443f358316153610a.tar.bz2 openocd_libswd-ba0f4a254c28ce0013e6dd2443f358316153610a.tar.xz openocd_libswd-ba0f4a254c28ce0013e6dd2443f358316153610a.zip |
added pathmove command
git-svn-id: svn://svn.berlios.de/openocd/trunk@2180 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r-- | src/jtag/tcl.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/jtag/tcl.c b/src/jtag/tcl.c index 4f2f6b5f..f2a5bf8f 100644 --- a/src/jtag/tcl.c +++ b/src/jtag/tcl.c @@ -189,6 +189,7 @@ static int handle_jtag_reset_command(struct command_context_s *cmd_ctx, char *cm static int handle_runtest_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); static int handle_irscan_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *argv); +static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *argv); static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args); static int handle_verify_ircapture_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); @@ -658,6 +659,7 @@ int jtag_register_commands(struct command_context_s *cmd_ctx) COMMAND_EXEC, "execute IR scan <device> <instr> [dev2] [instr2] ..."); register_jim(cmd_ctx, "drscan", Jim_Command_drscan, "execute DR scan <device> <num_bits> <value> <num_bits1> <value2> ..."); register_jim(cmd_ctx, "flush_count", Jim_Command_flush_count, "returns number of times the JTAG queue has been flushed"); + register_jim(cmd_ctx, "pathmove", Jim_Command_pathmove, "move JTAG to state1 then to state2, state3, etc. <state1>,<state2>,<stat3>..."); register_command(cmd_ctx, NULL, "verify_ircapture", handle_verify_ircapture_command, COMMAND_ANY, "verify value captured during Capture-IR <enable|disable>"); @@ -1308,6 +1310,48 @@ static int Jim_Command_drscan(Jim_Interp *interp, int argc, Jim_Obj *const *args } +static int Jim_Command_pathmove(Jim_Interp *interp, int argc, Jim_Obj *const *args) +{ + tap_state_t states[8]; + + if ((argc < 2) || ((size_t)argc > (sizeof(states)/sizeof(*states)+1))) + { + Jim_WrongNumArgs(interp, 1, args, "wrong arguments"); + return JIM_ERR; + } + + int i; + for (i=0; i<argc-1; i++) + { + const char *cp; + cp = Jim_GetString( args[i+1], NULL ); + states[i] = tap_state_by_name(cp); + if( states[i] < 0 ) + { + /* update the error message */ + Jim_SetResult_sprintf(interp,"endstate: %s invalid", cp ); + return JIM_ERR; + } + } + + if ((jtag_add_statemove(states[0]) != ERROR_OK) || ( jtag_execute_queue()!= ERROR_OK)) + { + Jim_SetResultString(interp, "pathmove: jtag execute failed",-1); + return JIM_ERR; + } + + jtag_add_pathmove(argc-2, states+1); + + if (jtag_execute_queue()!= ERROR_OK) + { + Jim_SetResultString(interp, "pathmove: failed",-1); + return JIM_ERR; + } + + return JIM_OK; +} + + static int Jim_Command_flush_count(Jim_Interp *interp, int argc, Jim_Obj *const *args) { Jim_SetResult(interp, Jim_NewIntObj(interp, jtag_get_flush_queue_count())); |