Tarek Lule / CMD_Interpreter
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CMD_Interpreter.h Source File

CMD_Interpreter.h

00001 
00002 #ifndef CMD_Interpreter_H
00003 #define CMD_Interpreter_H
00004 
00005 #include "mbed.h"
00006 #include <string> 
00007 
00008 const int BuffLen = 512;
00009 
00010 // define commands to be handled!
00011 typedef void (*caseHandler)(int param);
00012 
00013 typedef struct EXE_CMD_TYPE{
00014     char cmd;    // THe single command character
00015     char Npar;   // The number of parameters needed by the command, only for help text. All command Hanlders must have a Parameter
00016     caseHandler Handler; // Command Handlers
00017     string help;  // Help Text  for that command
00018     }EXE_CMD_TYPE;
00019 
00020 // Define States of the interpreter
00021 enum InterpretState { isStartNew, isLineFilling, isOverflow, isWaitNewLine};
00022 
00023 typedef struct RD_CMD_TYPE {
00024     char Command;    // Holds the next read command character
00025     int  Parameter ; // Holds one int Parameter
00026     int  NumParam ;  // Indicates how many parameters where found
00027     } RD_CMD_TYPE;
00028 
00029 // Uses a Ring buffer to buffer incomiing characters
00030 // Uses a parsing function to extract lines containing a command each
00031 class Interpreter{
00032   public: 
00033     // Interpreter Class Creation 
00034     Interpreter( void );
00035     void Reinit( void );
00036     void FillCommands(int aNumCommands, const EXE_CMD_TYPE *ACommands );
00037   public: // the writing mechanics
00038     void AddChar ( char aChar ); // Barebone function, assumes that checks havee been performed by writeBuf!
00039     void writeBuf( char c ) ; // High level method to add a Char to the buffer,
00040     char RingBuf[BuffLen];
00041     InterpretState MyState;// Indicates if buffer overflow, line ended etc. 
00042     int  WriteIndex   ;  // points to next index to write to
00043     int  BufAvail     ;  // indicates how much of the buffer is still available
00044     int  LinesComplete; // Indicates how many complete lines are available
00045     bool ProcessPresentCommands( void );
00046     RD_CMD_TYPE ParseCommand( void );
00047     bool executeCommand(RD_CMD_TYPE cmd);
00048     bool InvalidCommand;
00049     void PrtCmdHelp  ( Serial *aSerial ); // Display list of Commands
00050     // void GetLastMessage( string LastMsg); // not possible to implement at the moment
00051   public: // the reading mechanics
00052     int  ScanIndex;    // points to next index to read from to
00053     char actC     ;    // holds the actual character
00054   private:
00055     char GetAChar  ( void );
00056     void SkipBlanks( void );
00057     int  ReadAnInt ( void );
00058     char actPP     ( void );
00059     EXE_CMD_TYPE* AllCommands; // Defines an array of all commands to be filled by the user. 
00060     int NumCommands; // Holds the actual number of commands that are stored in the array
00061     /*
00062     char buff[100]; // Intermediate buffer to hold messages for datalogging
00063     string LastMessage;
00064     void DataLog( char *DebugMessage );
00065     void CmdInval( int param );  // Feedback that the command is invalid
00066     */
00067 }; // class Interpreter
00068 
00069 #endif // CMD_Interpreter_H