xrocusOS_ADXL355 version

Dependencies:   mbed SDFileSystem

include/CommandParser.h

Committer:
Inscape_ao
Date:
2019-04-23
Revision:
2:a694440145e9
Parent:
1:71c9c97c9f3d
Child:
19:36072b9b79f3

File content as of revision 2:a694440145e9:

#ifndef _COMMANDPARSER_H_
#define _COMMANDPARSER_H_

#include "UartReceiver.h"

class CommandParser;

/**
 * Parsing Rules 
 * if (cmdName) CALL func with exarg.
 */
typedef struct _command_parser_rule_s {
    char* cmdName;
    int(*func)(CommandParser*, char*, int);
    int exarg;
} CmdParseRule;

/* CommandParser */
class CommandParser
{
public:
    /* CMD length */
    const static int CmdNameLen = 3;
    /* CMD total length */
    const static int CmdLen = sizeof(":0 CMD 0000") - 1 /* EOL */;
    /* reply code (for ACK/NAK) */
    class CmdReply
    {
    public:
        const static int Success = 0;
        const static int InvalidFmt = 1;
        const static int InvalidCmd = 2;
        const static int InvalidLen = 3;
    };
private:
    int deviceID;
    UartReceiver *pR;
    Serial *pUart;
    CmdParseRule *ruleTable;
    int ruleTableLen;
private:
    /* (INVALIDED) constructor */
    CommandParser(void);
public:
    /* constructor */
    CommandParser(UartReceiver *setUartReceiver, int setDeviceID,
        CmdParseRule *setRuleTable, int setRuleTableLen);
    /* start parsing */
    void run(void);
    /* process parsing */
    int parse(char *pStr);
    /* get my Device ID */
    int getDeviceID(void);
    /* generate ACK/NAK with int code */
    void reply(bool ack = true, int replyCode = 0);
    /* generate ACK/NAK with String */
    void reply(bool ack, char *replyStr);
    /* get currentUart */
    Serial *getCurrentUart(void);
};
#endif /* _COMMANDPARSER_H_ */