summaryrefslogtreecommitdiff
path: root/src/hello.c
diff options
context:
space:
mode:
authorZachary T Welch <zw@superlucidity.net>2009-11-18 15:20:58 -0800
committerZachary T Welch <zw@superlucidity.net>2009-11-18 15:51:07 -0800
commit20218b8de61dea545c7575f36e1b74b9599c9848 (patch)
tree31589c4fa395bba4588fd70a08367f826c31cf04 /src/hello.c
parent4d8d1d32d0f0e0b8866a06cb1d3f304563fa6796 (diff)
downloadopenocd+libswd-20218b8de61dea545c7575f36e1b74b9599c9848.tar.gz
openocd+libswd-20218b8de61dea545c7575f36e1b74b9599c9848.tar.bz2
openocd+libswd-20218b8de61dea545c7575f36e1b74b9599c9848.tar.xz
openocd+libswd-20218b8de61dea545c7575f36e1b74b9599c9848.zip
update src/hello.c with parsing examples
Adds the foo/bar commands to provide more working examples of command argument parsing, including the new handle_command_parse_bool helper. Updates hello command help text to provide useful information.
Diffstat (limited to 'src/hello.c')
-rw-r--r--src/hello.c55
1 files changed, 54 insertions, 1 deletions
diff --git a/src/hello.c b/src/hello.c
index dd33650d..2ab7eb50 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -22,6 +22,57 @@
#endif
#include "log.h"
+COMMAND_HANDLER(handle_foo_command)
+{
+ if (CMD_ARGC < 1 || CMD_ARGC > 2)
+ {
+ LOG_ERROR("%s: incorrect number of arguments", CMD_NAME);
+ return ERROR_COMMAND_SYNTAX_ERROR;
+ }
+
+ uint32_t address;
+ COMMAND_PARSE_NUMBER(u32, CMD_ARGV[0], address);
+
+ const char *msg = "<unchanged>";
+ if (CMD_ARGC == 2)
+ {
+ bool enable;
+ COMMAND_PARSE_ENABLE(CMD_ARGV[1], enable);
+ msg = enable ? "enable" : "disable";
+ }
+
+ LOG_INFO("%s: address=0x%8.8" PRIx32 " enabled=%s", CMD_NAME, address, msg);
+ return ERROR_OK;
+}
+
+static bool foo_flag;
+
+COMMAND_HANDLER(handle_flag_command)
+{
+ return CALL_COMMAND_HANDLER(handle_command_parse_bool,
+ &foo_flag, "foo flag");
+}
+
+int foo_register_commands(struct command_context *cmd_ctx)
+{
+ // register several commands under the foo command
+ struct command *cmd = register_command(cmd_ctx, NULL, "foo",
+ NULL, COMMAND_ANY, "foo: command handler skeleton");
+
+ register_command(cmd_ctx, cmd, "bar",
+ &handle_foo_command, COMMAND_ANY,
+ "<address> [enable|disable] - an example command");
+ register_command(cmd_ctx, cmd, "baz",
+ &handle_foo_command, COMMAND_ANY,
+ "<address> [enable|disable] - a sample command");
+
+ register_command(cmd_ctx, cmd, "flag",
+ &handle_flag_command, COMMAND_ANY,
+ "[on|off] - set a flag");
+
+ return ERROR_OK;
+}
+
static COMMAND_HELPER(handle_hello_args, const char **sep, const char **name)
{
if (CMD_ARGC > 1)
@@ -50,8 +101,10 @@ COMMAND_HANDLER(handle_hello_command)
int hello_register_commands(struct command_context *cmd_ctx)
{
+ foo_register_commands(cmd_ctx);
+
struct command *cmd = register_command(cmd_ctx, NULL, "hello",
&handle_hello_command, COMMAND_ANY,
- "option");
+ "[<name>] - prints a warm welcome");
return cmd ? ERROR_OK : -ENOMEM;
}