Cumulocity Official / Mbed 2 deprecated MbedSmartRestMain Featured

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Vincent Wochnik

Committer:
vwochnik
Date:
Sat Dec 13 16:07:07 2014 +0000
Revision:
69:237c01eb36c2
Parent:
68:0dc778a16d0d
Child:
76:b07effe83fb8
delFile bug fixed

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 69:237c01eb36c2 25 // Usage: 130,<DEVICE/ID>,<CONFIG/STRING>,<RESPONSIBILITY>
vwochnik 69:237c01eb36c2 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 NUMBER,\"{\"\"c8y_Configuration\"\":{\"\"config\"\":\"\"%%\"\"},\"\"c8y_RequiredAvailability\"\":{ \"\"responseInterval\"\":%%}}\"\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 69:237c01eb36c2 35 if ((!loadConfiguration()) || (!_configurationProperties.validateProperties())) {
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 69:237c01eb36c2 63 if (!_configurationProperties.validateProperties()) {
vwochnik 69:237c01eb36c2 64 loadConfiguration();
vwochnik 69:237c01eb36c2 65 return false;
vwochnik 69:237c01eb36c2 66 }
vwochnik 69:237c01eb36c2 67
vwochnik 68:0dc778a16d0d 68 _changed = true;
vwochnik 68:0dc778a16d0d 69 return true;
vwochnik 68:0dc778a16d0d 70 }
vwochnik 68:0dc778a16d0d 71
vwochnik 68:0dc778a16d0d 72 bool ConfigurationSynchronization::updateDeviceObject()
vwochnik 68:0dc778a16d0d 73 {
vwochnik 68:0dc778a16d0d 74 char buf[256];
vwochnik 68:0dc778a16d0d 75
vwochnik 68:0dc778a16d0d 76 if (!_deviceConfiguration.write(buf, sizeof(buf)))
vwochnik 68:0dc778a16d0d 77 return false;
vwochnik 68:0dc778a16d0d 78
vwochnik 68:0dc778a16d0d 79 ComposedRecord record;
vwochnik 68:0dc778a16d0d 80 ParsedRecord received;
vwochnik 68:0dc778a16d0d 81
vwochnik 68:0dc778a16d0d 82 IntegerValue msgId(130);
vwochnik 68:0dc778a16d0d 83 IntegerValue deviceId(_deviceId);
vwochnik 68:0dc778a16d0d 84 CharValue config(buf);
vwochnik 69:237c01eb36c2 85 IntegerValue responsibility(_configurationProperties.readInterval());
vwochnik 69:237c01eb36c2 86 if ((!record.add(msgId)) || (!record.add(deviceId)) || (!record.add(config)) || (!record.add(responsibility)))
vwochnik 68:0dc778a16d0d 87 return false;
vwochnik 68:0dc778a16d0d 88
vwochnik 68:0dc778a16d0d 89 if (_client.send(record) != SMARTREST_SUCCESS) {
vwochnik 68:0dc778a16d0d 90 puts("Send failed.");
vwochnik 68:0dc778a16d0d 91 _client.stop();
vwochnik 68:0dc778a16d0d 92 return false;
vwochnik 68:0dc778a16d0d 93 }
vwochnik 68:0dc778a16d0d 94
vwochnik 68:0dc778a16d0d 95 if (_client.receive(received) != SMARTREST_SUCCESS) {
vwochnik 68:0dc778a16d0d 96 puts("Update failed.");
vwochnik 68:0dc778a16d0d 97 _client.stop();
vwochnik 68:0dc778a16d0d 98 return false;
vwochnik 68:0dc778a16d0d 99 }
vwochnik 68:0dc778a16d0d 100 _client.stop();
vwochnik 68:0dc778a16d0d 101
vwochnik 68:0dc778a16d0d 102 if (received.values() != 3) {
vwochnik 68:0dc778a16d0d 103 puts("Bad received data.");
vwochnik 68:0dc778a16d0d 104 return false;
vwochnik 68:0dc778a16d0d 105 }
vwochnik 68:0dc778a16d0d 106
vwochnik 68:0dc778a16d0d 107 if (received.value(0).integerValue() != 201) {
vwochnik 68:0dc778a16d0d 108 puts("Bad received data.");
vwochnik 68:0dc778a16d0d 109 return false;
vwochnik 68:0dc778a16d0d 110 }
vwochnik 68:0dc778a16d0d 111
vwochnik 68:0dc778a16d0d 112 return true;
vwochnik 68:0dc778a16d0d 113 }
vwochnik 68:0dc778a16d0d 114
vwochnik 68:0dc778a16d0d 115 bool ConfigurationSynchronization::loadConfiguration()
vwochnik 68:0dc778a16d0d 116 {
vwochnik 68:0dc778a16d0d 117 char buf[256];
vwochnik 68:0dc778a16d0d 118
vwochnik 68:0dc778a16d0d 119 if (!_deviceMemory.loadConfiguration(buf, sizeof(buf)))
vwochnik 68:0dc778a16d0d 120 return false;
vwochnik 68:0dc778a16d0d 121
vwochnik 68:0dc778a16d0d 122 if (!_deviceConfiguration.read(buf))
vwochnik 68:0dc778a16d0d 123 return false;
vwochnik 68:0dc778a16d0d 124
vwochnik 68:0dc778a16d0d 125 return true;
vwochnik 68:0dc778a16d0d 126 }
vwochnik 68:0dc778a16d0d 127
vwochnik 68:0dc778a16d0d 128 bool ConfigurationSynchronization::saveConfiguration()
vwochnik 68:0dc778a16d0d 129 {
vwochnik 68:0dc778a16d0d 130 char buf[256];
vwochnik 68:0dc778a16d0d 131
vwochnik 68:0dc778a16d0d 132 if (!_deviceConfiguration.write(buf, sizeof(buf)))
vwochnik 68:0dc778a16d0d 133 return false;
vwochnik 68:0dc778a16d0d 134
vwochnik 68:0dc778a16d0d 135 if (!_deviceMemory.saveConfiguration(buf))
vwochnik 68:0dc778a16d0d 136 return false;
vwochnik 68:0dc778a16d0d 137
vwochnik 68:0dc778a16d0d 138 return true;
vwochnik 68:0dc778a16d0d 139 }