25 #ifndef ACE_ROUTINE_COMMAND_DISPATCHER_H 26 #define ACE_ROUTINE_COMMAND_DISPATCHER_H 29 #include <AceRoutine.h> 30 #include "StreamReader.h" 36 typedef void (*CommandHandler)(Print& printer,
int argc,
const char** argv);
45 const CommandHandler command;
47 const char* helpString;
55 const CommandHandler command;
56 const __FlashStringHelper* name;
57 const __FlashStringHelper* helpString;
96 mStreamReader(streamReader),
98 mNumCommands(numCommands),
100 mArgvSize(argvSize) {}
106 static uint8_t tokenize(
char* line,
const char** argv, uint8_t argvSize);
113 static const uint8_t STATUS_SUCCESS = 0;
114 static const uint8_t STATUS_BUFFER_OVERFLOW = 1;
115 static const uint8_t STATUS_FLUSH_TO_EOL = 2;
116 static const char DELIMS[];
119 void printLineError(
const char* line, uint8_t statusCode);
122 void helpCommandHandler(Print& printer,
int argc,
const char** argv);
125 virtual void helpGeneric(Print& printer) = 0;
128 virtual bool helpSpecific(Print& printer,
const char* cmd) = 0;
131 void runCommand(
char* line);
134 virtual void findAndRunCommand(
135 const char* cmd,
int argc,
const char** argv) = 0;
137 virtual int run()
override;
141 const uint8_t mNumCommands;
142 const char**
const mArgv;
143 const uint8_t mArgvSize;
169 mDispatchTable(dispatchTable) {}
180 uint8_t numCommands,
const char* cmd);
184 virtual void helpGeneric(Print& printer)
override;
187 virtual bool helpSpecific(Print& printer,
const char* cmd)
override;
190 virtual void findAndRunCommand(
191 const char* cmd,
int argc,
const char** argv)
override;
222 mDispatchTable(dispatchTable) {}
229 uint8_t numCommands,
const char* cmd);
233 virtual void helpGeneric(Print& printer)
override;
236 virtual bool helpSpecific(Print& printer,
const char* cmd)
override;
239 virtual void findAndRunCommand(
240 const char* cmd,
int argc,
const char** argv)
override;
CommandDispatcherF(StreamReader &streamReader, Print &printer, const DispatchRecordF *dispatchTable, uint8_t numCommands, const char **argv, uint8_t argvSize)
Constructor.
A CommandDispatcher that takes DispatchRecordF records using FlashStrings.
Reads tokens (lines, words, integers, characters, etc) from the Stream device.
A CommandDispatcher that takes DispatchRecordC records using C-strings.
Base-class of a coroutine that reads lines from the Serial port, tokenizes the line on whitespace bou...
A record of the command name and its handler.
CommandDispatcherC(StreamReader &streamReader, Print &printer, const DispatchRecordC *dispatchTable, uint8_t numCommands, const char **argv, uint8_t argvSize)
Constructor.
CommandDispatcher(StreamReader &streamReader, Print &printer, uint8_t numCommands, const char **argv, uint8_t argvSize)
Constructor.
Base class of all coroutines.
Same as DispatchRecordC but uses FlashStrings instead of (const char*) to save static RAM on AVR boar...