portable version of the cumulocity demo

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers MbedAgent.cpp Source File

MbedAgent.cpp

00001 #include "MbedAgent.h"
00002 #include "rtos.h"
00003 
00004 MbedAgent::MbedAgent(DeviceIO& io, MDMSerial& mdm, DeviceInfo& deviceInfo) :
00005     _io(io),
00006     _mdm(mdm),
00007     _deviceInfo(deviceInfo),
00008     _client(MBED_AGENT_HOST, MBED_AGENT_PORT, MBED_AGENT_DEVICE_IDENTIFIER),
00009     _bootstrap(_client, _mdm, _io, _deviceInfo),
00010     _integration(_client, _tpl, _deviceId, _deviceInfo),
00011     _signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo),
00012     _temperatureMeasurement(_client, _tpl, _deviceId, _io.temperatureSensor()),
00013     _accelerationMeasurement(_client, _tpl, _deviceId, _io.accelerometer()),
00014     _analogMeasurement(_client, _tpl, _deviceId, _io.analog1(), _io.analog2()),
00015     _locationUpdate(_client, _tpl, _deviceId, _io.gpsTracker()),
00016     _deviceId(0)
00017 {
00018 }
00019 
00020 bool MbedAgent::init()
00021 {
00022     if ((!_integration.init()) ||
00023         (!_signalQualityMeasurement.init()) ||
00024         (!_temperatureMeasurement.init()) ||
00025         (!_accelerationMeasurement.init()) ||
00026         (!_analogMeasurement.init()) ||
00027         (!_locationUpdate.init())) {
00028         puts("Initialization failed.");
00029         return false;
00030     }
00031     return true;
00032 }
00033 
00034 bool MbedAgent::run()
00035 {
00036     // device bootstrapping process
00037     if (!_bootstrap.setUpCredentials())
00038         return false;
00039 
00040     Thread::wait(5000);
00041 
00042     _io.lcdPrint("INTEGRATION");
00043     if (!_integration.integrate()) {
00044         return false;
00045     }
00046     
00047     char status[60];
00048     snprintf(status, sizeof(status), "ID: %ld", _deviceId);
00049     _io.lcdPrint("INTEGRATED", status);
00050 
00051     loop();
00052     return true;
00053 }
00054 
00055 void MbedAgent::loop()
00056 {
00057     Timer timer;
00058     
00059     timer.start();
00060     while (true) {
00061         timer.reset();
00062         
00063         _signalQualityMeasurement.run();
00064         _temperatureMeasurement.run();
00065         _accelerationMeasurement.run();
00066         _analogMeasurement.run();
00067         _locationUpdate.run();
00068         
00069         while (timer.read() < MBED_AGENT_INTERVAL) {
00070             Thread::yield();
00071         }
00072     }
00073 }