32 #include "CommandDispatcher.h"
38 const char CommandDispatcher::DELIMS[] =
" \f\r\n\t\v";
40 void CommandDispatcher::helpCommandHandler(
41 Print& printer,
int argc,
const char*
const* argv)
const {
43 const char* cmd = argv[1];
46 if (strcmp(cmd,
"help") == 0) {
47 printer.println(F(
"Usage: help [command]"));
51 bool found = helpSpecific(printer, cmd);
53 printer.print(F(
"Unknown command: '"));
55 printer.println(
'\'');
57 printer.println(F(
"Commands:"));
58 printer.println(F(
" help [command]"));
63 void CommandDispatcher::helpAll(Print& printer)
const {
64 for (uint8_t i = 0; i < mNumCommands; i++) {
65 const CommandHandler* command = mCommands[i];
67 printHelp(printer, command);
71 bool CommandDispatcher::helpSpecific(Print& printer,
const char* cmd)
const {
73 if (command !=
nullptr) {
74 printer.print(F(
"Usage: "));
75 printHelp(printer, command);
81 void CommandDispatcher::printHelp(
82 Print& printer,
const CommandHandler* command) {
83 command->getName().printTo(printer);
84 if (!command->getHelpString().isNull()) {
86 command->getHelpString().printTo(printer);
95 int argc =
tokenize(line, mArgv, mArgvSize);
96 if (argc == 0)
return;
97 const char* cmd = mArgv[0];
100 if (strcmp(cmd,
"help") == 0) {
101 helpCommandHandler(printer, argc, mArgv);
105 findAndRunCommand(printer, cmd, argc, mArgv);
108 void CommandDispatcher::findAndRunCommand(
109 Print& printer,
const char* cmd,
int argc,
const char*
const* argv)
const {
111 if (command !=
nullptr) {
112 command->
run(printer, argc, argv);
116 printer.print(F(
"Unknown command: '"));
118 printer.println(
'\'');
static uint8_t tokenize(char *line, const char **argv, uint8_t argvSize)
Tokenize the line, separating tokens delimited by whitespace (space, formfeed, carriage return,...
const CommandHandler * findCommand(const char *cmd) const
Find the CommandHandler of the given command name.
void runCommand(Print &printer, char *line) const
Tokenize the given 'line', run the matching command handler, and send output to the 'printer'.
Signature for a command handler.
virtual void run(Print &printer, int argc, const char *const *argv) const =0
Run the command.