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:
68:0dc778a16d0d
Child:
69:237c01eb36c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/ConfigurationSynchronization.cpp	Sat Dec 06 19:47:23 2014 +0000
@@ -0,0 +1,133 @@
+#include "ConfigurationSynchronization.h"
+#include <stdio.h>
+#include "ComposedRecord.h"
+#include "CharValue.h"
+#include "IntegerValue.h"
+
+ConfigurationSynchronization::ConfigurationSynchronization(AbstractSmartRest& client, SmartRestTemplate& tpl, long& deviceId, DeviceMemory& deviceMemory, DeviceConfiguration& deviceConfiguration, ConfigurationProperties& configurationProperties) :
+    _client(client),
+    _tpl(tpl),
+    _deviceId(deviceId),
+    _deviceMemory(deviceMemory),
+    _deviceConfiguration(deviceConfiguration),
+    _configurationProperties(configurationProperties)
+{
+    _init = false;
+    _changed = false;
+}
+
+bool ConfigurationSynchronization::init()
+{
+    if (_init)
+        return false;
+    
+    // Update Configuration
+    // Usage: 130,<DEVICE/ID>,<CONFIG/STRING>
+    if (!_tpl.add("10,130,PUT,/inventory/managedObjects/%%,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,%%,UNSIGNED STRING,\"{\"\"c8y_Configuration\"\":{\"\"config\"\":\"\"%%\"\"}}\"\r\n"))
+        return false;
+
+    _init = true;
+    return true;
+}
+
+bool ConfigurationSynchronization::integrate()
+{
+    if (!loadConfiguration()) {
+        if ((!_configurationProperties.resetConfiguration()) || (!updateDeviceObject()) || (!saveConfiguration()))
+            return false;
+    } else {
+        if (!updateDeviceObject())
+            return false;
+    }
+
+    return true;
+}
+
+bool ConfigurationSynchronization::run()
+{
+    if (!_changed)
+        return true;
+
+    if ((!updateDeviceObject()) || (!saveConfiguration()))
+        return false;
+    
+    _changed = false;
+    return true;
+}
+
+bool ConfigurationSynchronization::updateConfiguration(const char *cfg)
+{
+    if (!_deviceConfiguration.read(cfg))
+        return false;
+    
+    _changed = true;
+    return true;
+}
+
+bool ConfigurationSynchronization::updateDeviceObject()
+{
+    char buf[256];
+    
+    if (!_deviceConfiguration.write(buf, sizeof(buf)))
+        return false;
+
+    ComposedRecord record;
+    ParsedRecord received;
+
+    IntegerValue msgId(130);
+    IntegerValue deviceId(_deviceId);
+    CharValue config(buf);
+    if ((!record.add(msgId)) || (!record.add(deviceId)) || (!record.add(config)))
+        return false;
+
+    if (_client.send(record) != SMARTREST_SUCCESS) {
+        puts("Send failed.");
+        _client.stop();
+        return false;
+    }
+
+    if (_client.receive(received) != SMARTREST_SUCCESS) {
+        puts("Update failed.");
+        _client.stop();
+        return false;
+    }
+    _client.stop();
+
+    if (received.values() != 3) {
+        puts("Bad received data.");
+        return false;
+    }
+    
+    if (received.value(0).integerValue() != 201) {
+        puts("Bad received data.");
+        return false;
+    }
+
+    return true;
+}
+
+bool ConfigurationSynchronization::loadConfiguration()
+{
+    char buf[256];
+    
+    if (!_deviceMemory.loadConfiguration(buf, sizeof(buf)))
+        return false;
+    
+    if (!_deviceConfiguration.read(buf))
+        return false;
+
+    return true;
+}
+
+bool ConfigurationSynchronization::saveConfiguration()
+{
+    char buf[256];
+    
+    if (!_deviceConfiguration.write(buf, sizeof(buf)))
+        return false;
+    
+    if (!_deviceMemory.saveConfiguration(buf))
+        return false;
+    
+    return true;
+}