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

Committer:
xinlei
Date:
Fri May 08 12:19:57 2015 +0000
Revision:
101:dbcd3bc51758
Parent:
100:47ea098f8a47
Child:
103:ede6611e064e
v2.1rc3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xinlei 99:e369fc75c000 1 #include <stdio.h>
xinlei 99:e369fc75c000 2 #include "DeviceMemory.h"
xinlei 101:dbcd3bc51758 3 #include "ConfigSync.h"
xinlei 101:dbcd3bc51758 4 #include "SmartRestConf.h"
xinlei 99:e369fc75c000 5 #include "logging.h"
xinlei 99:e369fc75c000 6
xinlei 101:dbcd3bc51758 7 // default connectivity checking interval [minutes].
xinlei 101:dbcd3bc51758 8 #define INTERVAL_KEY "interval"
xinlei 101:dbcd3bc51758 9 #define DEFAULT_INTERVAL "20"
xinlei 101:dbcd3bc51758 10
xinlei 101:dbcd3bc51758 11 bool validateConfiguration(Dict& d)
xinlei 99:e369fc75c000 12 {
xinlei 101:dbcd3bc51758 13 return d.get(INTERVAL_KEY);
xinlei 99:e369fc75c000 14 }
xinlei 99:e369fc75c000 15
xinlei 101:dbcd3bc51758 16 size_t ConfigSync::read(char *buf, size_t maxLen, char *line, size_t num)
xinlei 99:e369fc75c000 17 {
xinlei 101:dbcd3bc51758 18 static const char *fmt = "130,%ld,%s,%.*s\r\n";
xinlei 101:dbcd3bc51758 19 int l = 0;
xinlei 101:dbcd3bc51758 20 if (changed) {
xinlei 101:dbcd3bc51758 21 changed = false;
xinlei 101:dbcd3bc51758 22 char s[MAX_ITEM_SIZE*(MAX_KEY_LEN+MAX_VALUE_LEN+2)+1];
xinlei 101:dbcd3bc51758 23 dict.dump(s);
xinlei 101:dbcd3bc51758 24 const char *p = dict.get("interval")->value;
xinlei 101:dbcd3bc51758 25 l = snprintf(buf, maxLen, fmt, deviceID, s, MAX_VALUE_LEN, p);
xinlei 101:dbcd3bc51758 26 snprintf(line, num, "%s", "Sync Config");
xinlei 101:dbcd3bc51758 27 }
xinlei 101:dbcd3bc51758 28 return l;
xinlei 99:e369fc75c000 29 }
xinlei 99:e369fc75c000 30
xinlei 101:dbcd3bc51758 31 bool ConfigSync::updateConfiguration(const char *buf)
xinlei 99:e369fc75c000 32 {
xinlei 101:dbcd3bc51758 33 bool b = cp.parse(buf);
xinlei 101:dbcd3bc51758 34 if (b && validateConfiguration(cp.dict)) {
xinlei 101:dbcd3bc51758 35 dict = cp.dict;
xinlei 101:dbcd3bc51758 36 changed = true;
xinlei 101:dbcd3bc51758 37 saveConfiguration();
xinlei 101:dbcd3bc51758 38 }
xinlei 101:dbcd3bc51758 39 return b;
xinlei 101:dbcd3bc51758 40 }
xinlei 101:dbcd3bc51758 41
xinlei 101:dbcd3bc51758 42 void ConfigSync::resetConfiguration()
xinlei 101:dbcd3bc51758 43 {
xinlei 101:dbcd3bc51758 44 dict.clear();
xinlei 101:dbcd3bc51758 45 dict.set(INTERVAL_KEY, DEFAULT_INTERVAL);
xinlei 101:dbcd3bc51758 46 aDebug("Reset conf\n");
xinlei 101:dbcd3bc51758 47 changed = true;
xinlei 99:e369fc75c000 48 }
xinlei 99:e369fc75c000 49
xinlei 101:dbcd3bc51758 50 void ConfigSync::loadConfiguration()
xinlei 99:e369fc75c000 51 {
xinlei 101:dbcd3bc51758 52 char buf[(MAX_KEY_LEN+MAX_VALUE_LEN)*MAX_ITEM_SIZE+1];
xinlei 101:dbcd3bc51758 53 int l = loadConfigFile(buf, sizeof(buf));
xinlei 101:dbcd3bc51758 54 if (l > 0) {
xinlei 101:dbcd3bc51758 55 updateConfiguration(buf);
xinlei 101:dbcd3bc51758 56 }
xinlei 99:e369fc75c000 57 }
xinlei 99:e369fc75c000 58
xinlei 101:dbcd3bc51758 59 void ConfigSync::saveConfiguration() const
xinlei 99:e369fc75c000 60 {
xinlei 101:dbcd3bc51758 61 char s[dict.size()*(MAX_KEY_LEN+MAX_VALUE_LEN+2)+1];
xinlei 101:dbcd3bc51758 62 size_t l = dict.dump(s);
xinlei 101:dbcd3bc51758 63 if (l) {
xinlei 101:dbcd3bc51758 64 if (!saveConfigFile(s, l)) {
xinlei 101:dbcd3bc51758 65 aError("Save config.\n");
xinlei 101:dbcd3bc51758 66 }
xinlei 101:dbcd3bc51758 67 }
xinlei 101:dbcd3bc51758 68 }