update src/hello.c with parsing examples
authorZachary T Welch <zw@superlucidity.net>
Wed, 18 Nov 2009 23:20:58 +0000 (15:20 -0800)
committerZachary T Welch <zw@superlucidity.net>
Wed, 18 Nov 2009 23:51:07 +0000 (15:51 -0800)
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.

src/hello.c

index dd33650dcf004272e6a969b61e31dd866f3584b5..2ab7eb5079937d8c0e0626d7f485151ddb2728ac 100644 (file)
 #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;
 }