xrocusOS_ADXL355 version
Dependencies: mbed SDFileSystem
common/CommandParser.cpp
- Committer:
- Inscape_ao
- Date:
- 2019-04-20
- Revision:
- 0:c347f602596d
- Child:
- 1:71c9c97c9f3d
File content as of revision 0:c347f602596d:
#include "global.h" static void lineHandler(char *line) { pCP->parse(line); } CommandParser::CommandParser(UartReceiver *setUartReceiver, int setDeviceID, CmdParseRule *setRuleTable, int setRuleTableLen) { pR = setUartReceiver; pR->setLineHandler(lineHandler); deviceID = setDeviceID; ruleTable = setRuleTable; ruleTableLen = setRuleTableLen; pUart = pR->getCurrentUart(); } void CommandParser::run(void) { pR->run(); } int CommandParser::parse(char *pStr) { int rn; int len; char *head; /** skip - empty command*/ if (pStr[0] == '\0') { pUart->printf("[CommandParser::parse] (empty)\n"); return 0; } /* protection for buffer overrun */ pStr[UartReceiver::MaxStr] = '\0'; len = strlen(pStr); /* parsing */ head = pStr; pUart->printf("[CommandParser::parse] %s\n", pStr); /** Command Format ":0 CMD 0000" */ if (len != CmdLen) { pUart->printf("[CommandParser::parse] Invalid Command Length\n"); return -1; } /** check Command Header */ if (head[0] != ':') { pUart->printf("[CommandParser::parse] Invalid Command\n"); return -1; } /** check Command DeviceID */ if ((head[1] - '0') != deviceID) { pUart->printf("[CommandParser::parse] Ignore (DST is other)\n"); return 0; } /** search Command */ head += 3; for(rn = 0; rn < ruleTableLen; rn++) { int check; check = strncmp((const char*)(ruleTable[rn].cmdName), (const char*)(head),CmdNameLen); if (check != 0) { continue; } head += 4; return (*ruleTable[rn].func)(head); } pUart->printf("[CommandParser::parse] Invalid Command String\n"); return -1; }