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
config/ConfigurationSynchronization.cpp@68:0dc778a16d0d, 2014-12-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |