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:
xinlei
Date:
Mon Feb 16 09:17:30 2015 +0000
Revision:
71:063c45e99578
Parent:
68:0dc778a16d0d
Child:
72:c5709ae7b193
Various minor bug fixes

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 {
xinlei 71:063c45e99578 26 bool flag = true;
xinlei 71:063c45e99578 27 if (!_integration.init()) {
xinlei 71:063c45e99578 28 puts("Init Device Integration failed.");
xinlei 71:063c45e99578 29 flag = false;
xinlei 71:063c45e99578 30 }
xinlei 71:063c45e99578 31 if (!_configurationSynchronization.init()) {
xinlei 71:063c45e99578 32 puts("Init Configuration Synchronization failed.");
xinlei 71:063c45e99578 33 flag = false;
xinlei 71:063c45e99578 34 }
xinlei 71:063c45e99578 35 if (!_signalQualityMeasurement.init()) {
xinlei 71:063c45e99578 36 puts("Init Signal Quality Measurement failed.");
xinlei 71:063c45e99578 37 flag = false;
xinlei 71:063c45e99578 38 }
xinlei 71:063c45e99578 39 if (!_temperatureMeasurement.init()) {
xinlei 71:063c45e99578 40 puts("Init Temperature Measurement failed.");
xinlei 71:063c45e99578 41 flag = false;
Cumulocity 41:804f6a0bda26 42 }
xinlei 71:063c45e99578 43 if (!_accelerationMeasurement.init()) {
xinlei 71:063c45e99578 44 puts("Init Acceleration Measurement failed.");
xinlei 71:063c45e99578 45 flag = false;
xinlei 71:063c45e99578 46 }
xinlei 71:063c45e99578 47 if (!_analogMeasurement.init()) {
xinlei 71:063c45e99578 48 puts("Init Analog Measurement failed.");
xinlei 71:063c45e99578 49 flag = false;
xinlei 71:063c45e99578 50 }
xinlei 71:063c45e99578 51 if (!_locationUpdate.init()) {
xinlei 71:063c45e99578 52 puts("Init Location Measurement failed.");
xinlei 71:063c45e99578 53 flag = false;
xinlei 71:063c45e99578 54 }
xinlei 71:063c45e99578 55 if (!_operationSupport.init()) {
xinlei 71:063c45e99578 56 puts("Init Operation Support failed.");
xinlei 71:063c45e99578 57 flag = false;
xinlei 71:063c45e99578 58 }
xinlei 71:063c45e99578 59 if (flag)
xinlei 71:063c45e99578 60 puts("T");
xinlei 71:063c45e99578 61 else
xinlei 71:063c45e99578 62 puts("F");
xinlei 71:063c45e99578 63 return flag;
Cumulocity 41:804f6a0bda26 64 }
Cumulocity 41:804f6a0bda26 65
Cumulocity 41:804f6a0bda26 66 bool MbedAgent::run()
Cumulocity 41:804f6a0bda26 67 {
Cumulocity 41:804f6a0bda26 68 // device bootstrapping process
vwochnik 52:8f1370084268 69 if (!_bootstrap.setUpCredentials())
Cumulocity 41:804f6a0bda26 70 return false;
vwochnik 52:8f1370084268 71
Cumulocity 46:f6976fd64387 72 Thread::wait(5000);
Cumulocity 41:804f6a0bda26 73
xinlei 71:063c45e99578 74 _io.lcdPrint("Connect to Cloud");
Cumulocity 41:804f6a0bda26 75 if (!_integration.integrate()) {
Cumulocity 41:804f6a0bda26 76 return false;
Cumulocity 41:804f6a0bda26 77 }
Cumulocity 41:804f6a0bda26 78
vwochnik 68:0dc778a16d0d 79 if (!_configurationSynchronization.integrate()) {
vwochnik 68:0dc778a16d0d 80 return false;
vwochnik 68:0dc778a16d0d 81 }
vwochnik 68:0dc778a16d0d 82
Cumulocity 41:804f6a0bda26 83 char status[60];
Cumulocity 41:804f6a0bda26 84 snprintf(status, sizeof(status), "ID: %ld", _deviceId);
xinlei 71:063c45e99578 85 _io.lcdPrint("Connected", status);
Cumulocity 41:804f6a0bda26 86
Cumulocity 41:804f6a0bda26 87 loop();
vwochnik 68:0dc778a16d0d 88
Cumulocity 41:804f6a0bda26 89 return true;
Cumulocity 41:804f6a0bda26 90 }
Cumulocity 41:804f6a0bda26 91
Cumulocity 41:804f6a0bda26 92 void MbedAgent::loop()
Cumulocity 41:804f6a0bda26 93 {
vwochnik 68:0dc778a16d0d 94 Timer timer; int interval;
Cumulocity 41:804f6a0bda26 95
Cumulocity 41:804f6a0bda26 96 timer.start();
Cumulocity 41:804f6a0bda26 97 while (true) {
Cumulocity 41:804f6a0bda26 98 timer.reset();
Cumulocity 41:804f6a0bda26 99
vwochnik 68:0dc778a16d0d 100 _configurationSynchronization.run();
vwochnik 65:a62dbef2f924 101 _signalQualityMeasurement.run();
Cumulocity 41:804f6a0bda26 102 _temperatureMeasurement.run();
Cumulocity 41:804f6a0bda26 103 _accelerationMeasurement.run();
Cumulocity 47:89ae46d5c466 104 _analogMeasurement.run();
vwochnik 65:a62dbef2f924 105 _locationUpdate.run();
vwochnik 57:4af5f1bec3a6 106 _operationSupport.run();
Cumulocity 41:804f6a0bda26 107
vwochnik 68:0dc778a16d0d 108 if ((interval = _configurationProperties.readInterval()) == 0)
vwochnik 68:0dc778a16d0d 109 break;
vwochnik 68:0dc778a16d0d 110
vwochnik 68:0dc778a16d0d 111 while (timer.read() < interval) {
Cumulocity 41:804f6a0bda26 112 Thread::yield();
Cumulocity 41:804f6a0bda26 113 }
Cumulocity 41:804f6a0bda26 114 }
Cumulocity 41:804f6a0bda26 115 }