Demo of the Cmdb Command Interpreter. Replaces the old cmbd demo as it had name clashes on this website.

Dependencies:   mbed CMDB2

Committer:
wvd_vegt
Date:
Wed Jan 19 12:34:50 2022 +0000
Revision:
2:75de65a8711a
Parent:
1:4e699312b5c8
Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wvd_vegt 0:7b62ec9a3f53 1 #include <vector>
wvd_vegt 0:7b62ec9a3f53 2
wvd_vegt 0:7b62ec9a3f53 3 #include "mbed.h"
wvd_vegt 0:7b62ec9a3f53 4 #include "cmdb.h"
wvd_vegt 0:7b62ec9a3f53 5
wvd_vegt 0:7b62ec9a3f53 6 DigitalOut myled(LED1);
wvd_vegt 0:7b62ec9a3f53 7
wvd_vegt 0:7b62ec9a3f53 8 //We'll be using the Usb Serial port
wvd_vegt 0:7b62ec9a3f53 9 Serial serial(USBTX, USBRX); //tx, rx
wvd_vegt 0:7b62ec9a3f53 10
wvd_vegt 1:4e699312b5c8 11 #define CID_TEST (int)1
wvd_vegt 1:4e699312b5c8 12 #define CID_INT (int)2
wvd_vegt 0:7b62ec9a3f53 13
wvd_vegt 0:7b62ec9a3f53 14 /** Sample User Command Dispatcher.
wvd_vegt 0:7b62ec9a3f53 15 *
wvd_vegt 0:7b62ec9a3f53 16 * @parm cmdb the command interpreter object.
wvd_vegt 0:7b62ec9a3f53 17 * @parm cid the command id.
wvd_vegt 0:7b62ec9a3f53 18 */
wvd_vegt 0:7b62ec9a3f53 19 void my_dispatcher(Cmdb& cmdb, int cid) {
wvd_vegt 0:7b62ec9a3f53 20 cmdb.printf("my_dispatcher: cid=%d\r\n", cid);
wvd_vegt 0:7b62ec9a3f53 21
wvd_vegt 0:7b62ec9a3f53 22 switch (cid) {
wvd_vegt 0:7b62ec9a3f53 23 case CID_INT :
wvd_vegt 0:7b62ec9a3f53 24 cmdb.printf("my_dispatcher: parm 0=%d\r\n",cmdb.INTPARM(0));
wvd_vegt 0:7b62ec9a3f53 25 break;
wvd_vegt 0:7b62ec9a3f53 26 }
wvd_vegt 0:7b62ec9a3f53 27 }
wvd_vegt 0:7b62ec9a3f53 28
wvd_vegt 1:4e699312b5c8 29 static const cmd c1 = {"Test",SUBSYSTEM,CID_TEST,"" ,"* Test Subsystem"};
wvd_vegt 1:4e699312b5c8 30 static const cmd c2 = {"Int" ,CID_TEST ,CID_INT ,"%i","* Int as parameter" ,"dummy"};
wvd_vegt 0:7b62ec9a3f53 31
wvd_vegt 0:7b62ec9a3f53 32 int main() {
wvd_vegt 0:7b62ec9a3f53 33 // Set the Baudrate.
wvd_vegt 0:7b62ec9a3f53 34 serial.baud(115200);
wvd_vegt 0:7b62ec9a3f53 35
wvd_vegt 0:7b62ec9a3f53 36 // Test the serial connection by
wvd_vegt 0:7b62ec9a3f53 37 serial.printf("\r\n\r\nCmdb Command Interpreter Demo Version %0.2f.\r\n\r\n", Cmdb::version());
wvd_vegt 0:7b62ec9a3f53 38
wvd_vegt 0:7b62ec9a3f53 39 //Create a Command Table Vector.
wvd_vegt 0:7b62ec9a3f53 40 std::vector<cmd> cmds;
wvd_vegt 0:7b62ec9a3f53 41
wvd_vegt 0:7b62ec9a3f53 42 //Add some of our own first...
wvd_vegt 0:7b62ec9a3f53 43 cmds.push_back(c1); //Test Subsystem is handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 44 cmds.push_back(c2); //The Int Command is handled by our 'my_dispatcher' method.
wvd_vegt 0:7b62ec9a3f53 45
wvd_vegt 0:7b62ec9a3f53 46 //Add some predefined...
wvd_vegt 0:7b62ec9a3f53 47 cmds.push_back(COMMANDS); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 48 cmds.push_back(BOOT); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 49
wvd_vegt 0:7b62ec9a3f53 50 cmds.push_back(ECHO); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 51 cmds.push_back(BOLD); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 52 cmds.push_back(CLS); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 53
wvd_vegt 0:7b62ec9a3f53 54 cmds.push_back(MACRO); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 55 cmds.push_back(RUN); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 56 cmds.push_back(MACROS); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 57
wvd_vegt 0:7b62ec9a3f53 58 //Add some predefined and mandatory...
wvd_vegt 0:7b62ec9a3f53 59 cmds.push_back(IDLE); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 60 cmds.push_back(HELP); //Handled by Cmdb internally.
wvd_vegt 0:7b62ec9a3f53 61
wvd_vegt 0:7b62ec9a3f53 62 //Create and initialize the Command Interpreter.
wvd_vegt 0:7b62ec9a3f53 63 Cmdb cmdb(serial, cmds, &my_dispatcher);
wvd_vegt 0:7b62ec9a3f53 64
wvd_vegt 1:4e699312b5c8 65 cmdb.printf("%d=%d\r\n",cmds[0].subs,cmds[0].cid);
wvd_vegt 1:4e699312b5c8 66 cmdb.printf("%d=%d\r\n",cmds[1].subs,cmds[1].cid);
wvd_vegt 1:4e699312b5c8 67
wvd_vegt 0:7b62ec9a3f53 68 while (1) {
wvd_vegt 0:7b62ec9a3f53 69 //Check for input...
wvd_vegt 0:7b62ec9a3f53 70 if (cmdb.hasnext()==true) {
wvd_vegt 0:7b62ec9a3f53 71
wvd_vegt 0:7b62ec9a3f53 72 //Supply input to Command Interpreter
wvd_vegt 0:7b62ec9a3f53 73 if (cmdb.scan(cmdb.next())) {
wvd_vegt 0:7b62ec9a3f53 74
wvd_vegt 0:7b62ec9a3f53 75 //Flash led when a command has been parsed and dispatched.
wvd_vegt 0:7b62ec9a3f53 76 myled = 1;
wvd_vegt 0:7b62ec9a3f53 77 wait(0.2);
wvd_vegt 0:7b62ec9a3f53 78
wvd_vegt 0:7b62ec9a3f53 79 //cmdb.print("Command Parsed and Dispatched\r\n");
wvd_vegt 0:7b62ec9a3f53 80
wvd_vegt 0:7b62ec9a3f53 81 myled = 0;
wvd_vegt 0:7b62ec9a3f53 82 wait(0.2);
wvd_vegt 0:7b62ec9a3f53 83 }
wvd_vegt 0:7b62ec9a3f53 84 }
wvd_vegt 0:7b62ec9a3f53 85
wvd_vegt 0:7b62ec9a3f53 86 //For Macro Support we basically do the same but take characters from the macro buffer.
wvd_vegt 0:7b62ec9a3f53 87 //Example Macro: Test|Int_42|Idle
wvd_vegt 0:7b62ec9a3f53 88 while (cmdb.macro_hasnext()) {
wvd_vegt 0:7b62ec9a3f53 89 //Get and process next character.
wvd_vegt 0:7b62ec9a3f53 90 cmdb.scan(cmdb.macro_next());
wvd_vegt 1:4e699312b5c8 91
wvd_vegt 1:4e699312b5c8 92 //After the last character we need to add a cr to force execution.
wvd_vegt 0:7b62ec9a3f53 93 if (!cmdb.macro_peek()) {
wvd_vegt 0:7b62ec9a3f53 94 cmdb.scan(cr);
wvd_vegt 0:7b62ec9a3f53 95 }
wvd_vegt 0:7b62ec9a3f53 96 }
wvd_vegt 0:7b62ec9a3f53 97 }
wvd_vegt 0:7b62ec9a3f53 98 }