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 Apr 27 10:50:21 2015 +0000
Revision:
96:5dfdc8568e9f
Parent:
95:010b0f7a0a1a
Child:
97:ea056f6be2e8
LCDDisplay now is singleton

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"
xinlei 96:5dfdc8568e9f 3 #include "LCDDisplay.h"
xinlei 72:c5709ae7b193 4 #include "logging.h"
xinlei 76:b07effe83fb8 5 #include "watchdog.h"
Cumulocity 41:804f6a0bda26 6
xinlei 96:5dfdc8568e9f 7 MbedAgent::MbedAgent(GPSI2C& gps, MDMSerial& mdm,
xinlei 93:0acd11870c6a 8 DeviceInfo& deviceInfo, DeviceMemory& deviceMemory) :
xinlei 94:61d44636f020 9 _deviceId(0),
Cumulocity 41:804f6a0bda26 10 _mdm(mdm),
xinlei 93:0acd11870c6a 11 _client(mdm),
xinlei 96:5dfdc8568e9f 12 _bootstrap(_client, deviceInfo, deviceMemory),
xinlei 96:5dfdc8568e9f 13 _integration(_client, _tpl, _deviceId, deviceInfo),
xinlei 96:5dfdc8568e9f 14 _configurationSynchronization(_client, _tpl, _deviceId, deviceMemory),
xinlei 96:5dfdc8568e9f 15 _signalQualityMeasurement(_client, _tpl, _deviceId, deviceInfo),
xinlei 96:5dfdc8568e9f 16 _temperatureMeasurement(_client, _tpl, _deviceId, deviceInfo),
xinlei 96:5dfdc8568e9f 17 _accelerationMeasurement(_client, _tpl, _deviceId, deviceInfo),
xinlei 96:5dfdc8568e9f 18 _analogMeasurement(_client, _tpl, _deviceId, deviceInfo),
xinlei 96:5dfdc8568e9f 19 _locationUpdate(_client, _tpl, _deviceId, gps, deviceInfo),
xinlei 94:61d44636f020 20 pool(),
xinlei 94:61d44636f020 21 _operationSupport(_client, _tpl, _deviceId, pool)
Cumulocity 41:804f6a0bda26 22 {
Cumulocity 41:804f6a0bda26 23 }
Cumulocity 41:804f6a0bda26 24
Cumulocity 41:804f6a0bda26 25 bool MbedAgent::init()
Cumulocity 41:804f6a0bda26 26 {
xinlei 71:063c45e99578 27 bool flag = true;
xinlei 71:063c45e99578 28 if (!_integration.init()) {
xinlei 96:5dfdc8568e9f 29 LCDDisplay::inst().setLines("Integrate init fail");
xinlei 71:063c45e99578 30 flag = false;
xinlei 71:063c45e99578 31 }
xinlei 71:063c45e99578 32 if (!_configurationSynchronization.init()) {
xinlei 96:5dfdc8568e9f 33 LCDDisplay::inst().setLines("ConfigSync init fail");
xinlei 71:063c45e99578 34 flag = false;
xinlei 71:063c45e99578 35 }
xinlei 71:063c45e99578 36 if (!_signalQualityMeasurement.init()) {
xinlei 96:5dfdc8568e9f 37 LCDDisplay::inst().setLines("Signal init fail");
xinlei 71:063c45e99578 38 flag = false;
xinlei 71:063c45e99578 39 }
xinlei 71:063c45e99578 40 if (!_temperatureMeasurement.init()) {
xinlei 96:5dfdc8568e9f 41 LCDDisplay::inst().setLines("Temp init fail");
xinlei 71:063c45e99578 42 flag = false;
Cumulocity 41:804f6a0bda26 43 }
xinlei 71:063c45e99578 44 if (!_accelerationMeasurement.init()) {
xinlei 96:5dfdc8568e9f 45 LCDDisplay::inst().setLines("Acc init fail");
xinlei 71:063c45e99578 46 flag = false;
xinlei 71:063c45e99578 47 }
xinlei 71:063c45e99578 48 if (!_analogMeasurement.init()) {
xinlei 96:5dfdc8568e9f 49 LCDDisplay::inst().setLines("Analog init fail");
xinlei 71:063c45e99578 50 flag = false;
xinlei 71:063c45e99578 51 }
xinlei 71:063c45e99578 52 if (!_locationUpdate.init()) {
xinlei 96:5dfdc8568e9f 53 LCDDisplay::inst().setLines("Location init fail");
xinlei 71:063c45e99578 54 flag = false;
xinlei 71:063c45e99578 55 }
xinlei 71:063c45e99578 56 if (!_operationSupport.init()) {
xinlei 96:5dfdc8568e9f 57 LCDDisplay::inst().setLines("Operation init fail");
xinlei 71:063c45e99578 58 flag = false;
xinlei 71:063c45e99578 59 }
xinlei 71:063c45e99578 60 return flag;
Cumulocity 41:804f6a0bda26 61 }
Cumulocity 41:804f6a0bda26 62
xinlei 93:0acd11870c6a 63 int MbedAgent::run()
Cumulocity 41:804f6a0bda26 64 {
Cumulocity 41:804f6a0bda26 65 // device bootstrapping process
vwochnik 52:8f1370084268 66 if (!_bootstrap.setUpCredentials())
xinlei 93:0acd11870c6a 67 return -1;
xinlei 94:61d44636f020 68 setAuth(_bootstrap.username(), _bootstrap.password());
xinlei 94:61d44636f020 69 aInfo("Set auth: %s:%s (%s)\n", getUsername(), getPassword(), getAuthStr());
vwochnik 52:8f1370084268 70
Cumulocity 46:f6976fd64387 71 Thread::wait(5000);
Cumulocity 41:804f6a0bda26 72
xinlei 96:5dfdc8568e9f 73 LCDDisplay::inst().setLines("Connect to Cloud", getHost());
Cumulocity 41:804f6a0bda26 74 if (!_integration.integrate()) {
xinlei 93:0acd11870c6a 75 return -2;
Cumulocity 41:804f6a0bda26 76 }
xinlei 94:61d44636f020 77 setIdentifier(_client.getIdentifier());
xinlei 94:61d44636f020 78 aInfo("Set id: %s\n", getIdentifier());
xinlei 94:61d44636f020 79
vwochnik 68:0dc778a16d0d 80 if (!_configurationSynchronization.integrate()) {
xinlei 93:0acd11870c6a 81 return -3;
vwochnik 68:0dc778a16d0d 82 }
xinlei 93:0acd11870c6a 83 return 0;
Cumulocity 41:804f6a0bda26 84 }
Cumulocity 41:804f6a0bda26 85
Cumulocity 41:804f6a0bda26 86 void MbedAgent::loop()
Cumulocity 41:804f6a0bda26 87 {
xinlei 94:61d44636f020 88 ReportThread reportThread(pool, _mdm);
xinlei 94:61d44636f020 89 _operationSupport.run();
xinlei 96:5dfdc8568e9f 90 PollThread pollThread(pool, _mdm, _configurationSynchronization);
xinlei 96:5dfdc8568e9f 91 pollThread.setChannel(_deviceId);
xinlei 94:61d44636f020 92
xinlei 76:b07effe83fb8 93 Watchdog wdt;
xinlei 76:b07effe83fb8 94 wdt.kick(60.0); // set a 60.0 seconds timeout on watchdog hardware timer
Cumulocity 41:804f6a0bda26 95 while (true) {
xinlei 95:010b0f7a0a1a 96 _configurationSynchronization.run();
xinlei 95:010b0f7a0a1a 97 _analogMeasurement.run();
xinlei 95:010b0f7a0a1a 98 _signalQualityMeasurement.run();
xinlei 95:010b0f7a0a1a 99 _temperatureMeasurement.run();
xinlei 95:010b0f7a0a1a 100 _accelerationMeasurement.run();
xinlei 95:010b0f7a0a1a 101 _locationUpdate.run();
xinlei 95:010b0f7a0a1a 102 // Thread::wait(30000);
xinlei 76:b07effe83fb8 103 wdt.kick(); // reset watchdog timer
Cumulocity 41:804f6a0bda26 104 }
Cumulocity 41:804f6a0bda26 105 }