A Command Interpreter with support for used defined commands, subsystems, macros, help and parameter parsing.
Diff: main.cpp
- Revision:
- 26:34c65d3f6da0
- Parent:
- 25:37a7f1df057c
- Child:
- 27:17ff3b07a392
- Child:
- 28:7ba0b6819aa7
--- a/main.cpp Wed Feb 15 09:45:41 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -#include <vector> - -#include "mbed.h" -#include "cmdb.h" - -DigitalOut myled(LED1); - -//We'll be using the Usb Serial port -Serial serial(USBTX, USBRX); //tx, rx - -#define CID_TEST (int)1 -#define CID_INT (int)2 - -/** Sample User Command Dispatcher. - * - * @parm cmdb the command interpreter object. - * @parm cid the command id. - */ -void my_dispatcher(Cmdb& cmdb, int cid) { - cmdb.printf("my_dispatcher: cid=%d\r\n", cid); - - switch (cid) { - case CID_INT : - cmdb.printf("my_dispatcher: parm 0=%d\r\n",cmdb.INTPARM(0)); - break; - } -} - -static const cmd c1 = {"Test",SUBSYSTEM,CID_TEST,"" ,"* Test Subsystem"}; -static const cmd c2 = {"Int" ,CID_TEST ,CID_INT ,"%i","* Int as parameter" ,"dummy"}; - -int main() { - // Set the Baudrate. - serial.baud(115200); - - // Test the serial connection by - serial.printf("\r\n\r\nCmdb Command Interpreter Demo Version %0.2f.\r\n\r\n", Cmdb::version()); - - //Create a Command Table Vector. - std::vector<cmd> cmds; - - //Add some of our own first... - cmds.push_back(c1); //Test Subsystem is handled by Cmdb internally. - cmds.push_back(c2); //The Int Command is handled by our 'my_dispatcher' method. - - //Add some predefined... - cmds.push_back(COMMANDS); //Handled by Cmdb internally. - cmds.push_back(BOOT); //Handled by Cmdb internally. - - cmds.push_back(ECHO); //Handled by Cmdb internally. - cmds.push_back(BOLD); //Handled by Cmdb internally. - cmds.push_back(CLS); //Handled by Cmdb internally. - - cmds.push_back(MACRO); //Handled by Cmdb internally. - cmds.push_back(RUN); //Handled by Cmdb internally. - cmds.push_back(MACROS); //Handled by Cmdb internally. - - //Add some predefined and mandatory... - cmds.push_back(IDLE); //Handled by Cmdb internally. - cmds.push_back(HELP); //Handled by Cmdb internally. - - //Create and initialize the Command Interpreter. - Cmdb cmdb(serial, cmds, &my_dispatcher); - - cmdb.printf("%d=%d\r\n",cmds[0].subs,cmds[0].cid); - cmdb.printf("%d=%d\r\n",cmds[1].subs,cmds[1].cid); - - while (1) { - //Check for input... - if (cmdb.hasnext()==true) { - - //Supply input to Command Interpreter - if (cmdb.scan(cmdb.next())) { - - //Flash led when a command has been parsed and dispatched. - myled = 1; - wait(0.2); - - //cmdb.print("Command Parsed and Dispatched\r\n"); - - myled = 0; - wait(0.2); - } - } - - //For Macro Support we basically do the same but take characters from the macro buffer. - //Example Macro: Test|Int_42|Idle - while (cmdb.macro_hasnext()) { - //Get and process next character. - cmdb.scan(cmdb.macro_next()); - - //After the last character we need to add a cr to force execution. - if (!cmdb.macro_peek()) { - cmdb.scan(cr); - } - } - } -}