Official reference client implementation for Cumulocity SmartREST on u-blox C027.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
ConfigParser.cpp
00001 #include <string.h> 00002 #include "ConfigParser.h" 00003 #include "logging.h" 00004 00005 bool ConfigParser::parse(const char *buf) 00006 { 00007 if (buf == NULL) return false; 00008 Token tok; 00009 ptrPF = &ConfigParser::parseKey; 00010 parseOK = true; 00011 dict.clear(); 00012 for (const char*p = buf; *p;) { 00013 p = lexConfig(p, tok); 00014 (this->*ptrPF)(tok); 00015 } 00016 return parseOK; 00017 } 00018 00019 void ConfigParser::parseKey(Token& tok) 00020 { 00021 if (tok.type == Token::STRING) { 00022 memset(key, 0, MAX_KEY_LEN); 00023 size_t num = tok.len<MAX_VALUE_LEN ? tok.len : MAX_VALUE_LEN; 00024 strncpy(key, tok.p, num); 00025 ptrPF = &ConfigParser::parseAssignOp; 00026 } else { 00027 parseError(tok); 00028 } 00029 } 00030 00031 void ConfigParser::parseAssignOp(Token& tok) 00032 { 00033 if (tok.type == Token::ASSIGN) { 00034 ptrPF = &ConfigParser::parseValue; 00035 } else { 00036 parseError(tok); 00037 } 00038 } 00039 00040 void ConfigParser::parseValue(Token& tok) 00041 { 00042 if (tok.type != Token::NONE) { 00043 memset(value, 0, MAX_VALUE_LEN); 00044 size_t num = tok.len<MAX_VALUE_LEN ? tok.len : MAX_VALUE_LEN; 00045 strncpy(value, tok.p, num); 00046 dict.set(key, value); 00047 ptrPF = &ConfigParser::parseSemiColon; 00048 } else { 00049 parseError(tok); 00050 } 00051 } 00052 00053 void ConfigParser::parseSemiColon(Token& tok) 00054 { 00055 if (tok.type == Token::SEMICOLON) { 00056 ptrPF = &ConfigParser::parseKey; 00057 } else { 00058 parseError(tok); 00059 } 00060 } 00061 00062 void ConfigParser::parseError(Token& tok) 00063 { 00064 parseOK = false; 00065 aError("ConfParse: (%d) %.*s\n", tok.type, (int)tok.len, tok.p); 00066 parseRecover(tok); 00067 } 00068 00069 void ConfigParser::parseRecover(Token& tok) 00070 { 00071 if (tok.type == Token::SEMICOLON) { 00072 ptrPF = &ConfigParser::parseKey; 00073 } else { 00074 ptrPF = &ConfigParser::parseRecover; 00075 } 00076 }
Generated on Wed Jul 13 2022 19:40:51 by 1.7.2