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:
vwochnik
Date:
Sat Dec 06 19:47:23 2014 +0000
Revision:
68:0dc778a16d0d
Child:
69:237c01eb36c2
configuration for interval

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 68:0dc778a16d0d 1 #include "ConfigurationSynchronization.h"
vwochnik 68:0dc778a16d0d 2 #include <stdio.h>
vwochnik 68:0dc778a16d0d 3 #include "ComposedRecord.h"
vwochnik 68:0dc778a16d0d 4 #include "CharValue.h"
vwochnik 68:0dc778a16d0d 5 #include "IntegerValue.h"
vwochnik 68:0dc778a16d0d 6
vwochnik 68:0dc778a16d0d 7 ConfigurationSynchronization::ConfigurationSynchronization(AbstractSmartRest& client, SmartRestTemplate& tpl, long& deviceId, DeviceMemory& deviceMemory, DeviceConfiguration& deviceConfiguration, ConfigurationProperties& configurationProperties) :
vwochnik 68:0dc778a16d0d 8 _client(client),
vwochnik 68:0dc778a16d0d 9 _tpl(tpl),
vwochnik 68:0dc778a16d0d 10 _deviceId(deviceId),
vwochnik 68:0dc778a16d0d 11 _deviceMemory(deviceMemory),
vwochnik 68:0dc778a16d0d 12 _deviceConfiguration(deviceConfiguration),
vwochnik 68:0dc778a16d0d 13 _configurationProperties(configurationProperties)
vwochnik 68:0dc778a16d0d 14 {
vwochnik 68:0dc778a16d0d 15 _init = false;
vwochnik 68:0dc778a16d0d 16 _changed = false;
vwochnik 68:0dc778a16d0d 17 }
vwochnik 68:0dc778a16d0d 18
vwochnik 68:0dc778a16d0d 19 bool ConfigurationSynchronization::init()
vwochnik 68:0dc778a16d0d 20 {
vwochnik 68:0dc778a16d0d 21 if (_init)
vwochnik 68:0dc778a16d0d 22 return false;
vwochnik 68:0dc778a16d0d 23
vwochnik 68:0dc778a16d0d 24 // Update Configuration
vwochnik 68:0dc778a16d0d 25 // Usage: 130,<DEVICE/ID>,<CONFIG/STRING>
vwochnik 68:0dc778a16d0d 26 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"))
vwochnik 68:0dc778a16d0d 27 return false;
vwochnik 68:0dc778a16d0d 28
vwochnik 68:0dc778a16d0d 29 _init = true;
vwochnik 68:0dc778a16d0d 30 return true;
vwochnik 68:0dc778a16d0d 31 }
vwochnik 68:0dc778a16d0d 32
vwochnik 68:0dc778a16d0d 33 bool ConfigurationSynchronization::integrate()
vwochnik 68:0dc778a16d0d 34 {
vwochnik 68:0dc778a16d0d 35 if (!loadConfiguration()) {
vwochnik 68:0dc778a16d0d 36 if ((!_configurationProperties.resetConfiguration()) || (!updateDeviceObject()) || (!saveConfiguration()))
vwochnik 68:0dc778a16d0d 37 return false;
vwochnik 68:0dc778a16d0d 38 } else {
vwochnik 68:0dc778a16d0d 39 if (!updateDeviceObject())
vwochnik 68:0dc778a16d0d 40 return false;
vwochnik 68:0dc778a16d0d 41 }
vwochnik 68:0dc778a16d0d 42
vwochnik 68:0dc778a16d0d 43 return true;
vwochnik 68:0dc778a16d0d 44 }
vwochnik 68:0dc778a16d0d 45
vwochnik 68:0dc778a16d0d 46 bool ConfigurationSynchronization::run()
vwochnik 68:0dc778a16d0d 47 {
vwochnik 68:0dc778a16d0d 48 if (!_changed)
vwochnik 68:0dc778a16d0d 49 return true;
vwochnik 68:0dc778a16d0d 50
vwochnik 68:0dc778a16d0d 51 if ((!updateDeviceObject()) || (!saveConfiguration()))
vwochnik 68:0dc778a16d0d 52 return false;
vwochnik 68:0dc778a16d0d 53
vwochnik 68:0dc778a16d0d 54 _changed = false;
vwochnik 68:0dc778a16d0d 55 return true;
vwochnik 68:0dc778a16d0d 56 }
vwochnik 68:0dc778a16d0d 57
vwochnik 68:0dc778a16d0d 58 bool ConfigurationSynchronization::updateConfiguration(const char *cfg)
vwochnik 68:0dc778a16d0d 59 {
vwochnik 68:0dc778a16d0d 60 if (!_deviceConfiguration.read(cfg))
vwochnik 68:0dc778a16d0d 61 return false;
vwochnik 68:0dc778a16d0d 62
vwochnik 68:0dc778a16d0d 63 _changed = true;
vwochnik 68:0dc778a16d0d 64 return true;
vwochnik 68:0dc778a16d0d 65 }
vwochnik 68:0dc778a16d0d 66
vwochnik 68:0dc778a16d0d 67 bool ConfigurationSynchronization::updateDeviceObject()
vwochnik 68:0dc778a16d0d 68 {
vwochnik 68:0dc778a16d0d 69 char buf[256];
vwochnik 68:0dc778a16d0d 70
vwochnik 68:0dc778a16d0d 71 if (!_deviceConfiguration.write(buf, sizeof(buf)))
vwochnik 68:0dc778a16d0d 72 return false;
vwochnik 68:0dc778a16d0d 73
vwochnik 68:0dc778a16d0d 74 ComposedRecord record;
vwochnik 68:0dc778a16d0d 75 ParsedRecord received;
vwochnik 68:0dc778a16d0d 76
vwochnik 68:0dc778a16d0d 77 IntegerValue msgId(130);
vwochnik 68:0dc778a16d0d 78 IntegerValue deviceId(_deviceId);
vwochnik 68:0dc778a16d0d 79 CharValue config(buf);
vwochnik 68:0dc778a16d0d 80 if ((!record.add(msgId)) || (!record.add(deviceId)) || (!record.add(config)))
vwochnik 68:0dc778a16d0d 81 return false;
vwochnik 68:0dc778a16d0d 82
vwochnik 68:0dc778a16d0d 83 if (_client.send(record) != SMARTREST_SUCCESS) {
vwochnik 68:0dc778a16d0d 84 puts("Send failed.");
vwochnik 68:0dc778a16d0d 85 _client.stop();
vwochnik 68:0dc778a16d0d 86 return false;
vwochnik 68:0dc778a16d0d 87 }
vwochnik 68:0dc778a16d0d 88
vwochnik 68:0dc778a16d0d 89 if (_client.receive(received) != SMARTREST_SUCCESS) {
vwochnik 68:0dc778a16d0d 90 puts("Update failed.");
vwochnik 68:0dc778a16d0d 91 _client.stop();
vwochnik 68:0dc778a16d0d 92 return false;
vwochnik 68:0dc778a16d0d 93 }
vwochnik 68:0dc778a16d0d 94 _client.stop();
vwochnik 68:0dc778a16d0d 95
vwochnik 68:0dc778a16d0d 96 if (received.values() != 3) {
vwochnik 68:0dc778a16d0d 97 puts("Bad received data.");
vwochnik 68:0dc778a16d0d 98 return false;
vwochnik 68:0dc778a16d0d 99 }
vwochnik 68:0dc778a16d0d 100
vwochnik 68:0dc778a16d0d 101 if (received.value(0).integerValue() != 201) {
vwochnik 68:0dc778a16d0d 102 puts("Bad received data.");
vwochnik 68:0dc778a16d0d 103 return false;
vwochnik 68:0dc778a16d0d 104 }
vwochnik 68:0dc778a16d0d 105
vwochnik 68:0dc778a16d0d 106 return true;
vwochnik 68:0dc778a16d0d 107 }
vwochnik 68:0dc778a16d0d 108
vwochnik 68:0dc778a16d0d 109 bool ConfigurationSynchronization::loadConfiguration()
vwochnik 68:0dc778a16d0d 110 {
vwochnik 68:0dc778a16d0d 111 char buf[256];
vwochnik 68:0dc778a16d0d 112
vwochnik 68:0dc778a16d0d 113 if (!_deviceMemory.loadConfiguration(buf, sizeof(buf)))
vwochnik 68:0dc778a16d0d 114 return false;
vwochnik 68:0dc778a16d0d 115
vwochnik 68:0dc778a16d0d 116 if (!_deviceConfiguration.read(buf))
vwochnik 68:0dc778a16d0d 117 return false;
vwochnik 68:0dc778a16d0d 118
vwochnik 68:0dc778a16d0d 119 return true;
vwochnik 68:0dc778a16d0d 120 }
vwochnik 68:0dc778a16d0d 121
vwochnik 68:0dc778a16d0d 122 bool ConfigurationSynchronization::saveConfiguration()
vwochnik 68:0dc778a16d0d 123 {
vwochnik 68:0dc778a16d0d 124 char buf[256];
vwochnik 68:0dc778a16d0d 125
vwochnik 68:0dc778a16d0d 126 if (!_deviceConfiguration.write(buf, sizeof(buf)))
vwochnik 68:0dc778a16d0d 127 return false;
vwochnik 68:0dc778a16d0d 128
vwochnik 68:0dc778a16d0d 129 if (!_deviceMemory.saveConfiguration(buf))
vwochnik 68:0dc778a16d0d 130 return false;
vwochnik 68:0dc778a16d0d 131
vwochnik 68:0dc778a16d0d 132 return true;
vwochnik 68:0dc778a16d0d 133 }