X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fopenocd.c;h=8cac5530a48b49c1836531d5e1047da48b5dcd99;hp=eef6e60dca30e7234c8076c87ab483885349fd6e;hb=a65255a06d7252614f0061823860568f4aefe1b7;hpb=efc6063df873b3419010ad66d183b997d52e630c diff --git a/src/openocd.c b/src/openocd.c index eef6e60dca..8cac5530a4 100644 --- a/src/openocd.c +++ b/src/openocd.c @@ -28,7 +28,6 @@ #include "types.h" #include "jtag.h" #include "configuration.h" -#include "interpreter.h" #include "xsvf.h" #include "target.h" #include "flash.h" @@ -66,33 +65,6 @@ #include "replacements.h" -int launchTarget(struct command_context_s *cmd_ctx) -{ - int retval; - /* Try to examine & validate jtag chain, though this may require a reset first - * in which case we continue setup */ - jtag_init(cmd_ctx); - - /* try to examine target at this point. If it fails, perhaps a reset will - * bring it up later on via a telnet/gdb session */ - target_examine(cmd_ctx); - - retval=flash_init_drivers(cmd_ctx); - if (retval!=ERROR_OK) - return retval; - LOG_DEBUG("flash init complete"); - - retval=nand_init(cmd_ctx); - if (retval!=ERROR_OK) - return retval; - LOG_DEBUG("NAND init complete"); - - retval=pld_init(cmd_ctx); - if (retval!=ERROR_OK) - return retval; - LOG_DEBUG("pld init complete"); - return retval; -} /* Give TELNET a way to find out what version this is */ int handle_version_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) @@ -722,6 +694,25 @@ static char* openocd_jim_fgets(char *s, int size, void *cookie) return NULL; } +void add_jim(const char *name, int (*cmd)(Jim_Interp *interp, int argc, Jim_Obj *const *argv), const char *help) +{ + Jim_CreateCommand(interp, name, cmd, NULL, NULL); + + /* FIX!!! it would be prettier to invoke add_help_text... + accumulate help text in Tcl helptext list. */ + Jim_Obj *helptext=Jim_GetGlobalVariableStr(interp, "ocd_helptext", JIM_ERRMSG); + Jim_Obj *cmd_entry=Jim_NewListObj(interp, NULL, 0); + + Jim_Obj *cmd_list=Jim_NewListObj(interp, NULL, 0); + Jim_ListAppendElement(interp, cmd_list, Jim_NewStringObj(interp, name, -1)); + + Jim_ListAppendElement(interp, cmd_entry, cmd_list); + Jim_ListAppendElement(interp, cmd_entry, Jim_NewStringObj(interp, help, -1)); + Jim_ListAppendElement(interp, helptext, cmd_entry); +} + +extern const unsigned char filedata_startup[]; + void initJim(void) { Jim_CreateCommand(interp, "openocd", Jim_Command_openocd, NULL, NULL); @@ -740,13 +731,9 @@ void initJim(void) interp->cb_vfprintf = openocd_jim_vfprintf; interp->cb_fflush = openocd_jim_fflush; interp->cb_fgets = openocd_jim_fgets; -} - -extern const unsigned char filedata_startup[]; - -/* after command line parsing */ -void initJim2(void) -{ + + add_default_dirs(); + if (Jim_Eval(interp, filedata_startup)==JIM_ERR) { LOG_ERROR("Failed to run startup.tcl (embedded into OpenOCD compile time)"); @@ -755,12 +742,26 @@ void initJim2(void) } } + + +int handle_script_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + FILE *script_file; + + if (argc != 1) + return ERROR_COMMAND_SYNTAX_ERROR; + + + /* Run a tcl script file */ + return command_run_linef(cmd_ctx, "source [find {%s}]", args[0]); +} + command_context_t *setup_command_handler(void) { command_context_t *cmd_ctx; cmd_ctx = command_init(); - + register_command(cmd_ctx, NULL, "version", handle_version_command, COMMAND_EXEC, "show OpenOCD version"); register_command(cmd_ctx, NULL, "daemon_startup", handle_daemon_startup_command, COMMAND_CONFIG, @@ -773,7 +774,7 @@ command_context_t *setup_command_handler(void) tcl_register_commands(cmd_ctx); /* tcl server commands */ log_register_commands(cmd_ctx); jtag_register_commands(cmd_ctx); - interpreter_register_commands(cmd_ctx); + register_command(cmd_ctx, NULL, "script", handle_script_command, COMMAND_ANY, "execute commands from "); xsvf_register_commands(cmd_ctx); target_register_commands(cmd_ctx); flash_register_commands(cmd_ctx); @@ -833,10 +834,7 @@ int openocd_main(int argc, char *argv[]) active_cmd_ctx=cfg_cmd_ctx; - add_default_dirs(); - initJim2(); - if (parse_cmdline_args(cfg_cmd_ctx, argc, argv) != ERROR_OK) return EXIT_FAILURE;