]> git.sur5r.net Git - openocd/blobdiff - src/hello.c
tcl/target: ti_tms570.cfg restructure dap support
[openocd] / src / hello.c
index 275150a4ba0bd1fa243edde3ec50d0810ecbf8d8..25938bcf88d75e5a45c2f07e5237a32823519e78 100644 (file)
  *   GNU General Public License for more details.                          *
  *                                                                         *
  *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  ***************************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
-#include "log.h"
+#include <helper/log.h>
 
-static COMMAND_HELPER(handle_hello_args, const char **sep, const char **name)
+COMMAND_HANDLER(handle_foo_command)
 {
-       if (argc > 1)
-       {
-               LOG_ERROR("%s: too many arguments", CMD_NAME);
+       if (CMD_ARGC < 1 || CMD_ARGC > 2)
                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";
        }
-       if (1 == argc)
+
+       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");
+}
+
+static const struct command_registration foo_command_handlers[] = {
        {
+               .name = "bar",
+               .handler = &handle_foo_command,
+               .mode = COMMAND_ANY,
+               .usage = "address ['enable'|'disable']",
+               .help = "an example command",
+       },
+       {
+               .name = "baz",
+               .handler = &handle_foo_command,
+               .mode = COMMAND_ANY,
+               .usage = "address ['enable'|'disable']",
+               .help = "a sample command",
+       },
+       {
+               .name = "flag",
+               .handler = &handle_flag_command,
+               .mode = COMMAND_ANY,
+               .usage = "[on|off]",
+               .help = "set a flag",
+       },
+       COMMAND_REGISTRATION_DONE
+};
+
+static COMMAND_HELPER(handle_hello_args, const char **sep, const char **name)
+{
+       if (CMD_ARGC > 1)
+               return ERROR_COMMAND_SYNTAX_ERROR;
+       if (1 == CMD_ARGC) {
                *sep = " ";
-               *name = args[0];
-       }
-       else
+               *name = CMD_ARGV[0];
+       } else
                *sep = *name = "";
 
        return ERROR_OK;
@@ -44,14 +89,24 @@ COMMAND_HANDLER(handle_hello_command)
        const char *sep, *name;
        int retval = CALL_COMMAND_HANDLER(handle_hello_args, &sep, &name);
        if (ERROR_OK == retval)
-               command_print(cmd_ctx, "Greetings%s%s!", sep, name);
+               command_print(CMD_CTX, "Greetings%s%s!", sep, name);
        return retval;
 }
 
-int hello_register_commands(struct command_context *cmd_ctx)
-{
-       struct command *cmd = register_command(cmd_ctx, NULL, "hello",
-                       &handle_hello_command, COMMAND_ANY,
-                       "option");
-       return cmd ? ERROR_OK : -ENOMEM;
-}
+const struct command_registration hello_command_handlers[] = {
+       {
+               .name = "hello",
+               .handler = handle_hello_command,
+               .mode = COMMAND_ANY,
+               .help = "prints a warm welcome",
+               .usage = "[name]",
+       },
+       {
+               .name = "foo",
+               .mode = COMMAND_ANY,
+               .help = "example command handler skeleton",
+
+               .chain = foo_command_handlers,
+       },
+       COMMAND_REGISTRATION_DONE
+};