Own fork of MbedSmartRestMain

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

Committer:
xinlei
Date:
Mon Apr 13 14:24:58 2015 +0000
Revision:
92:0acd11870c6a
Parent:
90:423177e8a401
Child:
93:61d44636f020
v2.1rc1

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 72:c5709ae7b193 3 #include "logging.h"
xinlei 76:b07effe83fb8 4 #include "watchdog.h"
Cumulocity 41:804f6a0bda26 5
xinlei 92:0acd11870c6a 6 MbedAgent::MbedAgent(GPSI2C& gps, MDMSerial& mdm, LCDDisplay& lcdDisplay,
xinlei 92:0acd11870c6a 7 DeviceInfo& deviceInfo, DeviceMemory& deviceMemory) :
Cumulocity 41:804f6a0bda26 8 _mdm(mdm),
Cumulocity 41:804f6a0bda26 9 _deviceInfo(deviceInfo),
vwochnik 67:c360a2b2c948 10 _deviceMemory(deviceMemory),
vwochnik 68:0dc778a16d0d 11 _configurationProperties(_deviceConfiguration),
xinlei 92:0acd11870c6a 12 _client(mdm),
xinlei 92:0acd11870c6a 13 _bootstrap(_client, lcdDisplay, _deviceInfo, _deviceMemory),
Cumulocity 41:804f6a0bda26 14 _integration(_client, _tpl, _deviceId, _deviceInfo),
xinlei 92:0acd11870c6a 15 _lcdDisplay(lcdDisplay),
vwochnik 68:0dc778a16d0d 16 _configurationSynchronization(_client, _tpl, _deviceId, _deviceMemory, _deviceConfiguration, _configurationProperties),
xinlei 92:0acd11870c6a 17 _signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo, _lcdDisplay),
xinlei 92:0acd11870c6a 18 _temperatureMeasurement(_client, _tpl, _deviceId, deviceInfo, _lcdDisplay),
xinlei 92:0acd11870c6a 19 _accelerationMeasurement(_client, _tpl, _deviceId, deviceInfo, _lcdDisplay),
xinlei 92:0acd11870c6a 20 _analogMeasurement(_client, _tpl, _deviceId, deviceInfo, _lcdDisplay),
xinlei 92:0acd11870c6a 21 _locationUpdate(_client, _tpl, _deviceId, gps, deviceInfo, _lcdDisplay),
xinlei 92:0acd11870c6a 22 _operationSupport(_client, _tpl, _deviceId, _configurationSynchronization, _lcdDisplay),
Cumulocity 41:804f6a0bda26 23 _deviceId(0)
Cumulocity 41:804f6a0bda26 24 {
Cumulocity 41:804f6a0bda26 25 }
Cumulocity 41:804f6a0bda26 26
Cumulocity 41:804f6a0bda26 27 bool MbedAgent::init()
Cumulocity 41:804f6a0bda26 28 {
xinlei 71:063c45e99578 29 bool flag = true;
xinlei 71:063c45e99578 30 if (!_integration.init()) {
xinlei 92:0acd11870c6a 31 _lcdDisplay.setLines("Integration init failure");
xinlei 71:063c45e99578 32 flag = false;
xinlei 71:063c45e99578 33 }
xinlei 71:063c45e99578 34 if (!_configurationSynchronization.init()) {
xinlei 92:0acd11870c6a 35 _lcdDisplay.setLines("Config Sync init failure");
xinlei 71:063c45e99578 36 flag = false;
xinlei 71:063c45e99578 37 }
xinlei 71:063c45e99578 38 if (!_signalQualityMeasurement.init()) {
xinlei 92:0acd11870c6a 39 _lcdDisplay.setLines("Signal init failure");
xinlei 71:063c45e99578 40 flag = false;
xinlei 71:063c45e99578 41 }
xinlei 71:063c45e99578 42 if (!_temperatureMeasurement.init()) {
xinlei 92:0acd11870c6a 43 _lcdDisplay.setLines("Temperature init failure");
xinlei 71:063c45e99578 44 flag = false;
Cumulocity 41:804f6a0bda26 45 }
xinlei 71:063c45e99578 46 if (!_accelerationMeasurement.init()) {
xinlei 92:0acd11870c6a 47 _lcdDisplay.setLines("Acceleration init failure");
xinlei 71:063c45e99578 48 flag = false;
xinlei 71:063c45e99578 49 }
xinlei 71:063c45e99578 50 if (!_analogMeasurement.init()) {
xinlei 92:0acd11870c6a 51 _lcdDisplay.setLines("Analog init failure");
xinlei 71:063c45e99578 52 flag = false;
xinlei 71:063c45e99578 53 }
xinlei 71:063c45e99578 54 if (!_locationUpdate.init()) {
xinlei 92:0acd11870c6a 55 _lcdDisplay.setLines("Location init failure");
xinlei 71:063c45e99578 56 flag = false;
xinlei 71:063c45e99578 57 }
xinlei 71:063c45e99578 58 if (!_operationSupport.init()) {
xinlei 92:0acd11870c6a 59 _lcdDisplay.setLines("Operation init failure");
xinlei 71:063c45e99578 60 flag = false;
xinlei 71:063c45e99578 61 }
xinlei 71:063c45e99578 62 return flag;
Cumulocity 41:804f6a0bda26 63 }
Cumulocity 41:804f6a0bda26 64
xinlei 92:0acd11870c6a 65 int MbedAgent::run()
Cumulocity 41:804f6a0bda26 66 {
Cumulocity 41:804f6a0bda26 67 // device bootstrapping process
vwochnik 52:8f1370084268 68 if (!_bootstrap.setUpCredentials())
xinlei 92:0acd11870c6a 69 return -1;
vwochnik 52:8f1370084268 70
Cumulocity 46:f6976fd64387 71 Thread::wait(5000);
Cumulocity 41:804f6a0bda26 72
xinlei 92:0acd11870c6a 73 _lcdDisplay.setLines("Connect to Cloud", getHost());
Cumulocity 41:804f6a0bda26 74 if (!_integration.integrate()) {
xinlei 92:0acd11870c6a 75 return -2;
Cumulocity 41:804f6a0bda26 76 }
Cumulocity 41:804f6a0bda26 77
vwochnik 68:0dc778a16d0d 78 if (!_configurationSynchronization.integrate()) {
xinlei 92:0acd11870c6a 79 return -3;
vwochnik 68:0dc778a16d0d 80 }
vwochnik 68:0dc778a16d0d 81
xinlei 92:0acd11870c6a 82 char status[27];
Cumulocity 41:804f6a0bda26 83 snprintf(status, sizeof(status), "ID: %ld", _deviceId);
xinlei 92:0acd11870c6a 84 _lcdDisplay.setLines("Connected", status);
Cumulocity 41:804f6a0bda26 85
xinlei 92:0acd11870c6a 86 const char* user= getUsername();
xinlei 92:0acd11870c6a 87 int len = strchr(user, '/')-user+sizeof("Tenant: ");
xinlei 92:0acd11870c6a 88 len = len <= 27 ? len : 27;
xinlei 92:0acd11870c6a 89 snprintf(status, len, "Tenant: %s", user);
xinlei 92:0acd11870c6a 90 _lcdDisplay.setFirstLine(status);
xinlei 92:0acd11870c6a 91 return 0;
Cumulocity 41:804f6a0bda26 92 }
Cumulocity 41:804f6a0bda26 93
Cumulocity 41:804f6a0bda26 94 void MbedAgent::loop()
Cumulocity 41:804f6a0bda26 95 {
xinlei 76:b07effe83fb8 96 Watchdog wdt;
xinlei 76:b07effe83fb8 97 wdt.kick(60.0); // set a 60.0 seconds timeout on watchdog hardware timer
xinlei 92:0acd11870c6a 98
Cumulocity 41:804f6a0bda26 99 while (true) {
xinlei 92:0acd11870c6a 100 _operationSupport.run();
xinlei 78:bf32dfe6c47f 101 _configurationSynchronization.run();
xinlei 78:bf32dfe6c47f 102 _signalQualityMeasurement.run();
xinlei 78:bf32dfe6c47f 103 _temperatureMeasurement.run();
xinlei 92:0acd11870c6a 104 _accelerationMeasurement.run();
xinlei 78:bf32dfe6c47f 105 _analogMeasurement.run();
xinlei 78:bf32dfe6c47f 106 _locationUpdate.run();
xinlei 90:423177e8a401 107
xinlei 76:b07effe83fb8 108 // if ((interval = _configurationProperties.readInterval()) < 0)
xinlei 76:b07effe83fb8 109 // break;
xinlei 76:b07effe83fb8 110 // while (timer.read() < interval) {
xinlei 76:b07effe83fb8 111 // Thread::yield();
xinlei 76:b07effe83fb8 112 // }
xinlei 76:b07effe83fb8 113 wdt.kick(); // reset watchdog timer
Cumulocity 41:804f6a0bda26 114 }
Cumulocity 41:804f6a0bda26 115 }