Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
config/ConfigurationSynchronization.cpp@92:48069375dffa, 2015-03-20 (annotated)
- Committer:
- xinlei
- Date:
- Fri Mar 20 14:27:10 2015 +0000
- Revision:
- 92:48069375dffa
- Parent:
- 77:f6717e4eccc4
- Child:
- 93:0acd11870c6a
Get rid of all annoying warning messages.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
xinlei | 76:b07effe83fb8 | 1 | #include <stdio.h> |
vwochnik | 68:0dc778a16d0d | 2 | #include "ConfigurationSynchronization.h" |
vwochnik | 68:0dc778a16d0d | 3 | #include "ComposedRecord.h" |
vwochnik | 68:0dc778a16d0d | 4 | #include "CharValue.h" |
vwochnik | 68:0dc778a16d0d | 5 | #include "IntegerValue.h" |
xinlei | 76:b07effe83fb8 | 6 | #include "logging.h" |
vwochnik | 68:0dc778a16d0d | 7 | |
vwochnik | 68:0dc778a16d0d | 8 | ConfigurationSynchronization::ConfigurationSynchronization(AbstractSmartRest& client, SmartRestTemplate& tpl, long& deviceId, DeviceMemory& deviceMemory, DeviceConfiguration& deviceConfiguration, ConfigurationProperties& configurationProperties) : |
xinlei | 92:48069375dffa | 9 | _deviceId(deviceId), |
vwochnik | 68:0dc778a16d0d | 10 | _tpl(tpl), |
xinlei | 92:48069375dffa | 11 | _client(client), |
vwochnik | 68:0dc778a16d0d | 12 | _deviceMemory(deviceMemory), |
vwochnik | 68:0dc778a16d0d | 13 | _deviceConfiguration(deviceConfiguration), |
vwochnik | 68:0dc778a16d0d | 14 | _configurationProperties(configurationProperties) |
vwochnik | 68:0dc778a16d0d | 15 | { |
vwochnik | 68:0dc778a16d0d | 16 | _init = false; |
vwochnik | 68:0dc778a16d0d | 17 | _changed = false; |
vwochnik | 68:0dc778a16d0d | 18 | } |
vwochnik | 68:0dc778a16d0d | 19 | |
vwochnik | 68:0dc778a16d0d | 20 | bool ConfigurationSynchronization::init() |
vwochnik | 68:0dc778a16d0d | 21 | { |
vwochnik | 68:0dc778a16d0d | 22 | if (_init) |
vwochnik | 68:0dc778a16d0d | 23 | return false; |
vwochnik | 68:0dc778a16d0d | 24 | |
vwochnik | 68:0dc778a16d0d | 25 | // Update Configuration |
vwochnik | 69:237c01eb36c2 | 26 | // Usage: 130,<DEVICE/ID>,<CONFIG/STRING>,<RESPONSIBILITY> |
vwochnik | 69:237c01eb36c2 | 27 | 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 | 28 | return false; |
vwochnik | 68:0dc778a16d0d | 29 | |
vwochnik | 68:0dc778a16d0d | 30 | _init = true; |
vwochnik | 68:0dc778a16d0d | 31 | return true; |
vwochnik | 68:0dc778a16d0d | 32 | } |
vwochnik | 68:0dc778a16d0d | 33 | |
vwochnik | 68:0dc778a16d0d | 34 | bool ConfigurationSynchronization::integrate() |
vwochnik | 68:0dc778a16d0d | 35 | { |
vwochnik | 69:237c01eb36c2 | 36 | if ((!loadConfiguration()) || (!_configurationProperties.validateProperties())) { |
vwochnik | 68:0dc778a16d0d | 37 | if ((!_configurationProperties.resetConfiguration()) || (!updateDeviceObject()) || (!saveConfiguration())) |
vwochnik | 68:0dc778a16d0d | 38 | return false; |
vwochnik | 68:0dc778a16d0d | 39 | } else { |
vwochnik | 68:0dc778a16d0d | 40 | if (!updateDeviceObject()) |
vwochnik | 68:0dc778a16d0d | 41 | return false; |
vwochnik | 68:0dc778a16d0d | 42 | } |
vwochnik | 68:0dc778a16d0d | 43 | |
vwochnik | 68:0dc778a16d0d | 44 | return true; |
vwochnik | 68:0dc778a16d0d | 45 | } |
vwochnik | 68:0dc778a16d0d | 46 | |
vwochnik | 68:0dc778a16d0d | 47 | bool ConfigurationSynchronization::run() |
vwochnik | 68:0dc778a16d0d | 48 | { |
vwochnik | 68:0dc778a16d0d | 49 | if (!_changed) |
vwochnik | 68:0dc778a16d0d | 50 | return true; |
vwochnik | 68:0dc778a16d0d | 51 | |
vwochnik | 68:0dc778a16d0d | 52 | if ((!updateDeviceObject()) || (!saveConfiguration())) |
vwochnik | 68:0dc778a16d0d | 53 | return false; |
vwochnik | 68:0dc778a16d0d | 54 | |
vwochnik | 68:0dc778a16d0d | 55 | _changed = false; |
vwochnik | 68:0dc778a16d0d | 56 | return true; |
vwochnik | 68:0dc778a16d0d | 57 | } |
vwochnik | 68:0dc778a16d0d | 58 | |
vwochnik | 68:0dc778a16d0d | 59 | bool ConfigurationSynchronization::updateConfiguration(const char *cfg) |
vwochnik | 68:0dc778a16d0d | 60 | { |
vwochnik | 68:0dc778a16d0d | 61 | if (!_deviceConfiguration.read(cfg)) |
vwochnik | 68:0dc778a16d0d | 62 | return false; |
vwochnik | 68:0dc778a16d0d | 63 | |
vwochnik | 69:237c01eb36c2 | 64 | if (!_configurationProperties.validateProperties()) { |
vwochnik | 69:237c01eb36c2 | 65 | loadConfiguration(); |
vwochnik | 69:237c01eb36c2 | 66 | return false; |
vwochnik | 69:237c01eb36c2 | 67 | } |
vwochnik | 69:237c01eb36c2 | 68 | |
vwochnik | 68:0dc778a16d0d | 69 | _changed = true; |
vwochnik | 68:0dc778a16d0d | 70 | return true; |
vwochnik | 68:0dc778a16d0d | 71 | } |
vwochnik | 68:0dc778a16d0d | 72 | |
vwochnik | 68:0dc778a16d0d | 73 | bool ConfigurationSynchronization::updateDeviceObject() |
vwochnik | 68:0dc778a16d0d | 74 | { |
vwochnik | 68:0dc778a16d0d | 75 | char buf[256]; |
vwochnik | 68:0dc778a16d0d | 76 | |
vwochnik | 68:0dc778a16d0d | 77 | if (!_deviceConfiguration.write(buf, sizeof(buf))) |
vwochnik | 68:0dc778a16d0d | 78 | return false; |
vwochnik | 68:0dc778a16d0d | 79 | |
vwochnik | 68:0dc778a16d0d | 80 | ComposedRecord record; |
vwochnik | 68:0dc778a16d0d | 81 | ParsedRecord received; |
vwochnik | 68:0dc778a16d0d | 82 | |
vwochnik | 68:0dc778a16d0d | 83 | IntegerValue msgId(130); |
vwochnik | 68:0dc778a16d0d | 84 | IntegerValue deviceId(_deviceId); |
vwochnik | 68:0dc778a16d0d | 85 | CharValue config(buf); |
vwochnik | 69:237c01eb36c2 | 86 | IntegerValue responsibility(_configurationProperties.readInterval()); |
vwochnik | 69:237c01eb36c2 | 87 | if ((!record.add(msgId)) || (!record.add(deviceId)) || (!record.add(config)) || (!record.add(responsibility))) |
vwochnik | 68:0dc778a16d0d | 88 | return false; |
vwochnik | 68:0dc778a16d0d | 89 | |
vwochnik | 68:0dc778a16d0d | 90 | if (_client.send(record) != SMARTREST_SUCCESS) { |
xinlei | 77:f6717e4eccc4 | 91 | aError("Sending configuration failed.\r\n"); |
vwochnik | 68:0dc778a16d0d | 92 | _client.stop(); |
vwochnik | 68:0dc778a16d0d | 93 | return false; |
vwochnik | 68:0dc778a16d0d | 94 | } |
vwochnik | 68:0dc778a16d0d | 95 | |
vwochnik | 68:0dc778a16d0d | 96 | if (_client.receive(received) != SMARTREST_SUCCESS) { |
xinlei | 77:f6717e4eccc4 | 97 | aError("Connection failure or invalid configuration.\r\n"); |
vwochnik | 68:0dc778a16d0d | 98 | _client.stop(); |
vwochnik | 68:0dc778a16d0d | 99 | return false; |
vwochnik | 68:0dc778a16d0d | 100 | } |
vwochnik | 68:0dc778a16d0d | 101 | _client.stop(); |
vwochnik | 68:0dc778a16d0d | 102 | |
vwochnik | 68:0dc778a16d0d | 103 | if (received.values() != 3) { |
xinlei | 77:f6717e4eccc4 | 104 | aError("Unmatching configuration data received, expected 3, but %d received.\r\n", received.values()); |
vwochnik | 68:0dc778a16d0d | 105 | return false; |
vwochnik | 68:0dc778a16d0d | 106 | } |
vwochnik | 68:0dc778a16d0d | 107 | |
vwochnik | 68:0dc778a16d0d | 108 | if (received.value(0).integerValue() != 201) { |
xinlei | 77:f6717e4eccc4 | 109 | aError("Bad configuration data received.\r\n"); |
vwochnik | 68:0dc778a16d0d | 110 | return false; |
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 | } |