A serial command line interface with buffer editing.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <cmd.h>
// Global command variable.
Cmd *cmd;
// Command entered was invalid, or help is being requested.
void cmd_unrecognized(Cmd *thisCmd, char *command, bool printHelp) { // If help is being requested, print the available commands.
if (printHelp) { // Get the command parameters.
size_t size = cmd->GetSize(); PGM_P *commands = cmd->GetCmds();
// Print each command.
Serial.println("Available commands:\n"); for (int i = 0; i < size && commands[i] != NULL; i++) { char buf[100]; sprintf_P(buf, commands[i]); Serial.println(buf); } // Stop here.
return; } // No help was requested, so the command provided likely doesn't exist.
Serial.print("Unrecognized command ["); Serial.print(command); Serial.println("]"); }
// Simple echo ping command.
void cmd_pi(Cmd *thisCmd, char *command, bool printHelp) { // If help was requested, print the help for this command.
if (printHelp) { Serial.print(command); Serial.println(" *"); return; } // Echo back the buffer.
Serial.println(cmd->GetBuffer()); }
// Demo send command.
void cmd_send(Cmd *thisCmd, char *command, bool printHelp) { // If help was requested, print the help.
if (printHelp) { Serial.print(command); Serial.println(" address code"); return; }
// Parse the next available argument.
char *parsed = cmd->Parse(); if (parsed == NULL) { Serial.println("Invalid address"); return; } // Parse integer.
int address = atoi(parsed);
// Get the next argument.
parsed = cmd->Parse(); if (parsed == NULL) { Serial.println("Invalid code"); return; } // Parse char.
unsigned char code = atoi(parsed);
// Print parsed arguments.
Serial.print("Sending code: "); Serial.print(code); Serial.print(" to <"); Serial.print(address); Serial.println(">"); }
void setup() { // Setup serial interface.
Serial.begin(9600);
// Initialize the command line with 2 commands.
cmd = new Cmd(2, cmd_unrecognized); // Add commands.
cmd->AddCmd(PSTR("pi"), cmd_pi); cmd->AddCmd(PSTR("send"), cmd_send);
// Print a line indicator to inform the user the cli is ready.
Serial.print(cmd->GetLineIndicator()); }
void loop() { // Run the command line loop.
cmd->Loop(); }
|