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 Vincent Wochnik

Revision:
99:e369fc75c000
Child:
101:dbcd3bc51758
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/ConfigParser.cpp	Thu May 07 09:57:55 2015 +0000
@@ -0,0 +1,80 @@
+#include <string.h>
+#include "ConfigParser.h"
+#include "logging.h"
+
+bool ConfigParser::parse(const char *buf)
+{
+        if (buf == NULL) return false;
+        Token tok;
+        ptrPF = &ConfigParser::parseKey;
+        parseOK = true;
+        for (const char*p = buf; *p;) {
+                p = lexConfig(p, tok);
+                (this->*ptrPF)(tok);
+        }
+        return parseOK;
+}
+
+void ConfigParser::parseKey(Token& tok)
+{
+        if (tok.type == Token::STRING) {
+                memset(key, 0, MAX_KEY_LEN);
+                size_t num = tok.len<MAX_VALUE_LEN ? tok.len : MAX_VALUE_LEN;
+                strncpy(key, tok.p, num);
+                ptrPF = &ConfigParser::parseAssignOp;
+        } else {
+                parseError(tok);
+        }
+}
+
+void ConfigParser::parseAssignOp(Token& tok)
+{
+        if (tok.type == Token::ASSIGN) {
+                ptrPF = &ConfigParser::parseValue;
+        } else {
+                parseError(tok);
+        }
+}
+
+void ConfigParser::parseValue(Token& tok)
+{
+        if (tok.type != Token::NONE) {
+                if (strncmp(key, "interval", MAX_KEY_LEN) == 0 &&
+                    tok.type != Token::INT) {
+                        parseError(tok);
+                } else {
+                        memset(value, 0, MAX_VALUE_LEN);
+                        size_t num = tok.len<MAX_VALUE_LEN ? tok.len : MAX_VALUE_LEN;
+                        strncpy(value, tok.p, num);
+                        dict.set(key, value);
+                        ptrPF = &ConfigParser::parseSemiColon;
+                }
+        } else {
+                parseError(tok);
+        }
+}
+
+void ConfigParser::parseSemiColon(Token& tok)
+{
+        if (tok.type == Token::SEMICOLON) {
+                ptrPF = &ConfigParser::parseKey;
+        } else {
+                parseError(tok);
+        }
+}
+
+void ConfigParser::parseError(Token& tok)
+{
+        parseOK = false;
+        aError("(%d) %.*s\n", tok.type, (int)tok.len, tok.p);
+        parseRecover(tok);
+}
+
+void ConfigParser::parseRecover(Token& tok)
+{
+        if (tok.type == Token::SEMICOLON) {
+                ptrPF = &ConfigParser::parseKey;
+        } else {
+                ptrPF = &ConfigParser::parseRecover;
+        }
+}