1
2
3
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
27
28
29
30
31
32
33
34
39
40
64
65
77
85
86
/* ... */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <helper/log.h>
#include "hello.h"
COMMAND_HANDLER(handle_foo_command)
{
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 (CMD_ARGC == 2) { ... }
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 = CMD_ARGV[0];
}if (1 == CMD_ARGC) { ... } else
*sep = *name = "";
return ERROR_OK;
}{ ... }
COMMAND_HANDLER(handle_hello_command)
{
const char *sep, *name;
int retval = CALL_COMMAND_HANDLER(handle_hello_args, &sep, &name);
if (retval == ERROR_OK)
command_print(CMD, "Greetings%s%s!", sep, name);
return retval;
}{ ... }
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,
.usage = "",
...},
COMMAND_REGISTRATION_DONE
...};