{
struct command_context *cmd_ctx = current_command_context(interp);
enum command_mode mode;
+
if (argc > 1)
{
struct command *c = cmd_ctx->commands;
return help_add_command(CMD_CTX, c, cmd_name, help, usage);
}
-/* sleep command sleeps for <n> miliseconds
+/* sleep command sleeps for <n> milliseconds
* this is useful in target startup scripts
*/
COMMAND_HANDLER(handle_sleep_command)
{
.name = "mode",
.mode = COMMAND_ANY,
- .jim_handler = &jim_command_mode,
- .usage = "[<name> ...]",
+ .jim_handler = jim_command_mode,
+ .usage = "[command_name ...]",
.help = "Returns the command modes allowed by a command:"
"'any', 'config', or 'exec'. If no command is"
- "specified, returns the current command mode.",
+ "specified, returns the current command mode. "
+ "Returns 'unknown' if an unknown command is given. "
+ "Command can be multiple tokens.",
},
{
.name = "type",
.mode = COMMAND_ANY,
- .jim_handler = &jim_command_type,
- .usage = "<name> ...",
+ .jim_handler = jim_command_type,
+ .usage = "command_name [...]",
.help = "Returns the type of built-in command:"
- "'native', 'simple', 'group', or 'unknown'",
+ "'native', 'simple', 'group', or 'unknown'. "
+ "Command can be multiple tokens.",
},
COMMAND_REGISTRATION_DONE
};
static const struct command_registration command_builtin_handlers[] = {
{
.name = "add_help_text",
- .handler = &handle_help_add_command,
+ .handler = handle_help_add_command,
.mode = COMMAND_ANY,
- .help = "add new command help text",
- .usage = "<command> [...] <help_text>]",
+ .help = "Add new command help text; "
+ "Command can be multiple tokens.",
+ .usage = "command_name helptext_string",
},
{
.name = "add_usage_text",
- .handler = &handle_help_add_command,
+ .handler = handle_help_add_command,
.mode = COMMAND_ANY,
- .help = "add new command usage text",
- .usage = "<command> [...] <usage_text>]",
+ .help = "Add new command usage text; "
+ "command can be multiple tokens.",
+ .usage = "command_name usage_string",
},
{
.name = "sleep",
- .handler = &handle_sleep_command,
+ .handler = handle_sleep_command,
.mode = COMMAND_ANY,
- .help = "sleep for n milliseconds. "
- "\"busy\" will busy wait",
- .usage = "<n> [busy]",
+ .help = "Sleep for specified number of milliseconds. "
+ "\"busy\" will busy wait instead (avoid this).",
+ .usage = "milliseconds ['busy']",
},
{
.name = "help",
- .handler = &handle_help_command,
+ .handler = handle_help_command,
.mode = COMMAND_ANY,
- .help = "show full command help",
- .usage = "[<command> ...]",
+ .help = "Show full command help; "
+ "command can be multiple tokens.",
+ .usage = "[command_name]",
},
{
.name = "usage",
- .handler = &handle_help_command,
+ .handler = handle_help_command,
.mode = COMMAND_ANY,
- .help = "show basic command usage",
- .usage = "[<command> ...]",
+ .help = "Show basic command usage; "
+ "command can be multiple tokens.",
+ .usage = "[command_name]",
},
{
.name = "command",
int retval = ERROR_FAIL;
FILE *config_file = NULL;
+
config_file = fopen(CMD_ARGV[0], "a");
if (config_file != NULL)
{
unsigned i;
for (i = 1; i < CMD_ARGC; i++)
{
- if (fwrite(CMD_ARGV[i], 1, strlen(CMD_ARGV[i]), config_file) != strlen(CMD_ARGV[i]))
+ if (fwrite(CMD_ARGV[i], 1, strlen(CMD_ARGV[i]),
+ config_file) != strlen(CMD_ARGV[i]))
break;
if (i != CMD_ARGC - 1)
{
}
}
if ((i == CMD_ARGC) && (fwrite("\n", 1, 1, config_file) == 1))
- {
retval = ERROR_OK;
- }
+
fclose(config_file);
}
static const struct command_registration ioutil_command_handlers[] = {
{
.name = "cat",
- .handler = &handle_cat_command,
+ .handler = handle_cat_command,
.mode = COMMAND_ANY,
- .help = "display file content",
- .usage= "<file_name>",
+ .help = "display text file content",
+ .usage= "file_name",
},
{
.name = "trunc",
- .handler = &handle_trunc_command,
+ .handler = handle_trunc_command,
.mode = COMMAND_ANY,
- .help = "truncate a file 0 size",
- .usage= "<file_name>",
+ .help = "truncate a file to zero length",
+ .usage= "file_name",
},
{
.name = "cp",
- .handler = &handle_cp_command,
+ .handler = handle_cp_command,
.mode = COMMAND_ANY,
.help = "copy a file",
- .usage = "<src> <dst>",
+ .usage = "src_file_name dst_file_name",
},
{
.name = "append_file",
- .handler = &handle_append_command,
+ .handler = handle_append_command,
.mode = COMMAND_ANY,
.help = "append a variable number of strings to a file",
- .usage= "<file_name> [<string> ...]",
+ .usage= "file_name [string ...]",
},
{
.name = "meminfo",
- .handler = &handle_meminfo_command,
+ .handler = handle_meminfo_command,
.mode = COMMAND_ANY,
- .help = "display available ram memory",
+ .help = "display free heap space",
},
{
.name = "rm",
.mode = COMMAND_ANY,
- .handler = &handle_rm_command,
- .help = "remove a file",
- .usage = "<file>",
+ .handler = handle_rm_command,
+ .help = "remove a directory or file",
+ .usage = "file_name",
},
+
+ /*
+ * REVISIT shouldn't most, or all, these zylinjtag_*()
+ * entries be #ifdef ZY1000? If not, why so they have
+ * those names?
+ *
+ * Peek and poke are security holes -- they manipulate
+ * server-internal addresses.
+ */
+
// jim handlers
{
.name = "peek",
.mode = COMMAND_ANY,
- .jim_handler = &zylinjtag_Jim_Command_peek,
+ .jim_handler = zylinjtag_Jim_Command_peek,
.help = "peek at a memory address",
- .usage = "<addr>",
+ .usage = "address",
},
{
.name = "poke",
.mode = COMMAND_ANY,
- .jim_handler = &zylinjtag_Jim_Command_poke,
+ .jim_handler = zylinjtag_Jim_Command_poke,
.help = "poke at a memory address",
- .usage = "<addr> <value>",
+ .usage = "address value",
},
{
.name = "ls",
.mode = COMMAND_ANY,
- .jim_handler = &zylinjtag_Jim_Command_ls,
+ .jim_handler = zylinjtag_Jim_Command_ls,
.help = "show a listing of files",
- .usage = "<dir>",
+ .usage = "dirname",
},
{
.name = "mac",
.mode = COMMAND_ANY,
- .jim_handler = &zylinjtag_Jim_Command_mac,
+ .jim_handler = zylinjtag_Jim_Command_mac,
.help = "show MAC address",
},
{
.name = "ip",
- .jim_handler = &zylinjtag_Jim_Command_ip,
+ .jim_handler = zylinjtag_Jim_Command_ip,
.mode = COMMAND_ANY,
.help = "show IP address",
},
if (debug_level >= LOG_LVL_DEBUG && server_use_pipes == 1)
{
- /* if we are enabling debug info then we need to write to a log file
- * otherwise the pipe will get full and cause issues with gdb */
+ /* if we are enabling debug info then we need to write to a
+ * log file otherwise the pipe will get full and cause issues
+ * with gdb
+ */
FILE* file = fopen("openocd.log", "w");
if (file)
{
log_output = file;
- LOG_WARNING("enabling log output as we are using pipes");
+ LOG_WARNING("enabling logfile output because "
+ "we are using pipes to talk to GDB.");
}
}
static struct command_registration log_command_handlers[] = {
{
.name = "log_output",
- .handler = &handle_log_output_command,
+ .handler = handle_log_output_command,
.mode = COMMAND_ANY,
.help = "redirect logging to a file (default: stderr)",
- .usage = "<file_name>",
+ .usage = "file_name",
},
{
.name = "debug_level",
- .handler = &handle_debug_level_command,
+ .handler = handle_debug_level_command,
.mode = COMMAND_ANY,
- .help = "sets the verbosity level of debugging output",
- .usage = "<level:0-3>",
+ .help = "Sets the verbosity level of debugging output. "
+ "0 shows errors only; 1 adds warnings; "
+ "2 (default) adds other info; 3 adds debugging.",
+ .usage = "number",
},
COMMAND_REGISTRATION_DONE
};