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
Parent:
67:c360a2b2c948
Child:
71:063c45e99578
configuration for interval

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Cumulocity 41:804f6a0bda26 1 #include "MbedAgent.h"
Cumulocity 41:804f6a0bda26 2 #include "rtos.h"
Cumulocity 41:804f6a0bda26 3
vwochnik 67:c360a2b2c948 4 MbedAgent::MbedAgent(DeviceIO& io, MDMSerial& mdm, DeviceInfo& deviceInfo, DeviceMemory& deviceMemory) :
Cumulocity 42:104746744af8 5 _io(io),
Cumulocity 41:804f6a0bda26 6 _mdm(mdm),
Cumulocity 41:804f6a0bda26 7 _deviceInfo(deviceInfo),
vwochnik 67:c360a2b2c948 8 _deviceMemory(deviceMemory),
vwochnik 68:0dc778a16d0d 9 _configurationProperties(_deviceConfiguration),
Cumulocity 41:804f6a0bda26 10 _client(MBED_AGENT_HOST, MBED_AGENT_PORT, MBED_AGENT_DEVICE_IDENTIFIER),
vwochnik 67:c360a2b2c948 11 _bootstrap(_client, _io, _deviceInfo, _deviceMemory),
Cumulocity 41:804f6a0bda26 12 _integration(_client, _tpl, _deviceId, _deviceInfo),
vwochnik 68:0dc778a16d0d 13 _configurationSynchronization(_client, _tpl, _deviceId, _deviceMemory, _deviceConfiguration, _configurationProperties),
Cumulocity 41:804f6a0bda26 14 _signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo),
Cumulocity 41:804f6a0bda26 15 _temperatureMeasurement(_client, _tpl, _deviceId, _io.temperatureSensor()),
Cumulocity 41:804f6a0bda26 16 _accelerationMeasurement(_client, _tpl, _deviceId, _io.accelerometer()),
Cumulocity 47:89ae46d5c466 17 _analogMeasurement(_client, _tpl, _deviceId, _io.analog1(), _io.analog2()),
Cumulocity 47:89ae46d5c466 18 _locationUpdate(_client, _tpl, _deviceId, _io.gpsTracker()),
vwochnik 68:0dc778a16d0d 19 _operationSupport(_client, _tpl, _deviceId, _configurationSynchronization, _io),
Cumulocity 41:804f6a0bda26 20 _deviceId(0)
Cumulocity 41:804f6a0bda26 21 {
Cumulocity 41:804f6a0bda26 22 }
Cumulocity 41:804f6a0bda26 23
Cumulocity 41:804f6a0bda26 24 bool MbedAgent::init()
Cumulocity 41:804f6a0bda26 25 {
Cumulocity 41:804f6a0bda26 26 if ((!_integration.init()) ||
vwochnik 68:0dc778a16d0d 27 (!_configurationSynchronization.init()) ||
Cumulocity 41:804f6a0bda26 28 (!_signalQualityMeasurement.init()) ||
Cumulocity 41:804f6a0bda26 29 (!_temperatureMeasurement.init()) ||
Cumulocity 47:89ae46d5c466 30 (!_accelerationMeasurement.init()) ||
Cumulocity 47:89ae46d5c466 31 (!_analogMeasurement.init()) ||
vwochnik 57:4af5f1bec3a6 32 (!_locationUpdate.init()) ||
vwochnik 57:4af5f1bec3a6 33 (!_operationSupport.init())) {
Cumulocity 41:804f6a0bda26 34 puts("Initialization failed.");
Cumulocity 41:804f6a0bda26 35 return false;
Cumulocity 41:804f6a0bda26 36 }
Cumulocity 41:804f6a0bda26 37 return true;
Cumulocity 41:804f6a0bda26 38 }
Cumulocity 41:804f6a0bda26 39
Cumulocity 41:804f6a0bda26 40 bool MbedAgent::run()
Cumulocity 41:804f6a0bda26 41 {
Cumulocity 41:804f6a0bda26 42 // device bootstrapping process
vwochnik 52:8f1370084268 43 if (!_bootstrap.setUpCredentials())
Cumulocity 41:804f6a0bda26 44 return false;
vwochnik 52:8f1370084268 45
Cumulocity 46:f6976fd64387 46 Thread::wait(5000);
Cumulocity 41:804f6a0bda26 47
Cumulocity 41:804f6a0bda26 48 _io.lcdPrint("INTEGRATION");
Cumulocity 41:804f6a0bda26 49 if (!_integration.integrate()) {
Cumulocity 41:804f6a0bda26 50 return false;
Cumulocity 41:804f6a0bda26 51 }
Cumulocity 41:804f6a0bda26 52
vwochnik 68:0dc778a16d0d 53 if (!_configurationSynchronization.integrate()) {
vwochnik 68:0dc778a16d0d 54 return false;
vwochnik 68:0dc778a16d0d 55 }
vwochnik 68:0dc778a16d0d 56
Cumulocity 41:804f6a0bda26 57 char status[60];
Cumulocity 41:804f6a0bda26 58 snprintf(status, sizeof(status), "ID: %ld", _deviceId);
Cumulocity 41:804f6a0bda26 59 _io.lcdPrint("INTEGRATED", status);
Cumulocity 41:804f6a0bda26 60
Cumulocity 41:804f6a0bda26 61 loop();
vwochnik 68:0dc778a16d0d 62
Cumulocity 41:804f6a0bda26 63 return true;
Cumulocity 41:804f6a0bda26 64 }
Cumulocity 41:804f6a0bda26 65
Cumulocity 41:804f6a0bda26 66 void MbedAgent::loop()
Cumulocity 41:804f6a0bda26 67 {
vwochnik 68:0dc778a16d0d 68 Timer timer; int interval;
Cumulocity 41:804f6a0bda26 69
Cumulocity 41:804f6a0bda26 70 timer.start();
Cumulocity 41:804f6a0bda26 71 while (true) {
Cumulocity 41:804f6a0bda26 72 timer.reset();
Cumulocity 41:804f6a0bda26 73
vwochnik 68:0dc778a16d0d 74 _configurationSynchronization.run();
vwochnik 65:a62dbef2f924 75 _signalQualityMeasurement.run();
Cumulocity 41:804f6a0bda26 76 _temperatureMeasurement.run();
Cumulocity 41:804f6a0bda26 77 _accelerationMeasurement.run();
Cumulocity 47:89ae46d5c466 78 _analogMeasurement.run();
vwochnik 65:a62dbef2f924 79 _locationUpdate.run();
vwochnik 57:4af5f1bec3a6 80 _operationSupport.run();
Cumulocity 41:804f6a0bda26 81
vwochnik 68:0dc778a16d0d 82 if ((interval = _configurationProperties.readInterval()) == 0)
vwochnik 68:0dc778a16d0d 83 break;
vwochnik 68:0dc778a16d0d 84
vwochnik 68:0dc778a16d0d 85 while (timer.read() < interval) {
Cumulocity 41:804f6a0bda26 86 Thread::yield();
Cumulocity 41:804f6a0bda26 87 }
Cumulocity 41:804f6a0bda26 88 }
Cumulocity 41:804f6a0bda26 89 }