X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fhelper%2Fcommand.c;h=d29b6ec327a00a30f7d47baf898ba9f5503924f3;hp=ca83ec6f4341bffd99b3bae132f4e42da3c2a14b;hb=841721929a63bb77379b1598d91ed85b85021734;hpb=4b9bdd664a79d5713b22a178086b071abc049d01 diff --git a/src/helper/command.c b/src/helper/command.c index ca83ec6f43..d29b6ec327 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -47,9 +47,6 @@ int fast_and_dangerous = 0; Jim_Interp *interp = NULL; -int handle_sleep_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); -int handle_fast_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); - int run_command(command_context_t *context, command_t *c, char *words[], int num_words); static void tcl_output(void *privData, const char *file, int line, const char *function, const char *string) @@ -688,6 +685,54 @@ static int jim_capture(Jim_Interp *interp, int argc, Jim_Obj *const *argv) return retcode; } +/* sleep command sleeps for miliseconds + * this is useful in target startup scripts + */ +static int handle_sleep_command(struct command_context_s *cmd_ctx, + char *cmd, char **args, int argc) +{ + bool busy = false; + if (argc == 2) + { + if (strcmp(args[1], "busy") == 0) + busy = true; + else + return ERROR_COMMAND_SYNTAX_ERROR; + } + else if (argc < 1 || argc > 2) + return ERROR_COMMAND_SYNTAX_ERROR; + + unsigned long duration = 0; + int retval = parse_ulong(args[0], &duration); + if (ERROR_OK != retval) + return retval; + + if (!busy) + { + long long then = timeval_ms(); + while (timeval_ms() - then < (long long)duration) + { + target_call_timer_callbacks_now(); + usleep(1000); + } + } + else + busy_sleep(duration); + + return ERROR_OK; +} + +static int handle_fast_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + if (argc != 1) + return ERROR_COMMAND_SYNTAX_ERROR; + + fast_and_dangerous = strcmp("enable", args[0]) == 0; + + return ERROR_OK; +} + + command_context_t* command_init() { command_context_t* context = malloc(sizeof(command_context_t)); @@ -717,7 +762,7 @@ command_context_t* command_init() * "winxx" is generic. */ HostOs = "winxx"; -#elif defined(__LINUX__) +#elif defined(__linux__) HostOs = "linux"; #elif defined(__DARWIN__) HostOs = "darwin"; @@ -726,9 +771,11 @@ command_context_t* command_init() #elif defined(__MINGW32__) HostOs = "mingw32"; #else +#warn unrecognized host OS... HostOs = "other"; #endif - Jim_SetGlobalVariableStr(interp, "ocd_HOSTOS", Jim_NewStringObj(interp, HostOs , strlen(HostOs))); + Jim_SetGlobalVariableStr(interp, "ocd_HOSTOS", + Jim_NewStringObj(interp, HostOs , strlen(HostOs))); Jim_CreateCommand(interp, "ocd_find", jim_find, NULL, NULL); Jim_CreateCommand(interp, "echo", jim_echo, NULL, NULL); @@ -749,16 +796,19 @@ command_context_t* command_init() #endif if (Jim_Eval_Named(interp, startup_tcl, "embedded:startup.tcl",1) == JIM_ERR) { - LOG_ERROR("Failed to run startup.tcl (embedded into OpenOCD compile time)"); + LOG_ERROR("Failed to run startup.tcl (embedded into OpenOCD)"); Jim_PrintErrorMessage(interp); exit(-1); } - register_command(context, NULL, "sleep", handle_sleep_command, - COMMAND_ANY, " [busy] - sleep for n milliseconds. \"busy\" means busy wait"); - - register_command(context, NULL, "fast", handle_fast_command, - COMMAND_ANY, "fast - place at beginning of config files. Sets defaults to fast and dangerous."); + register_command(context, NULL, "sleep", + handle_sleep_command, COMMAND_ANY, + " [busy] - sleep for n milliseconds. " + "\"busy\" means busy wait"); + register_command(context, NULL, "fast", + handle_fast_command, COMMAND_ANY, + "fast - place at beginning of " + "config files. Sets defaults to fast and dangerous."); return context; } @@ -772,53 +822,6 @@ int command_context_mode(command_context_t *cmd_ctx, enum command_mode mode) return ERROR_OK; } -/* sleep command sleeps for miliseconds - * this is useful in target startup scripts - */ -int handle_sleep_command(struct command_context_s *cmd_ctx, - char *cmd, char **args, int argc) -{ - bool busy = false; - if (argc == 2) - { - if (strcmp(args[1], "busy") == 0) - busy = true; - else - return ERROR_COMMAND_SYNTAX_ERROR; - } - else if (argc < 1 || argc > 2) - return ERROR_COMMAND_SYNTAX_ERROR; - - unsigned long duration = 0; - int retval = parse_ulong(args[0], &duration); - if (ERROR_OK != retval) - return retval; - - if (!busy) - { - long long then = timeval_ms(); - while (timeval_ms() - then < (long long)duration) - { - target_call_timer_callbacks_now(); - usleep(1000); - } - } - else - busy_sleep(duration); - - return ERROR_OK; -} - -int handle_fast_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) -{ - if (argc != 1) - return ERROR_COMMAND_SYNTAX_ERROR; - - fast_and_dangerous = strcmp("enable", args[0]) == 0; - - return ERROR_OK; -} - void process_jim_events(void) { #if !BUILD_ECOSBOARD