Own fork of MbedSmartRestMain

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Cumulocity Official

MbedAgent.cpp

Committer:
xinlei
Date:
2015-02-16
Revision:
72:c5709ae7b193
Parent:
71:063c45e99578
Child:
73:313975bfec96

File content as of revision 72:c5709ae7b193:

#include "MbedAgent.h"
#include "rtos.h"
#include "logging.h"

MbedAgent::MbedAgent(DeviceIO& io, MDMSerial& mdm, DeviceInfo& deviceInfo, DeviceMemory& deviceMemory) :
    _io(io),
    _mdm(mdm),
    _deviceInfo(deviceInfo),
    _deviceMemory(deviceMemory),
    _configurationProperties(_deviceConfiguration),
    _client(MBED_AGENT_HOST, MBED_AGENT_PORT, MBED_AGENT_DEVICE_IDENTIFIER),
    _bootstrap(_client, _io, _deviceInfo, _deviceMemory),
    _integration(_client, _tpl, _deviceId, _deviceInfo),
    _configurationSynchronization(_client, _tpl, _deviceId, _deviceMemory, _deviceConfiguration, _configurationProperties),
    _signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo),
    _temperatureMeasurement(_client, _tpl, _deviceId, _io.temperatureSensor()),
    _accelerationMeasurement(_client, _tpl, _deviceId, _io.accelerometer()),
    _analogMeasurement(_client, _tpl, _deviceId, _io.analog1(), _io.analog2()),
    _locationUpdate(_client, _tpl, _deviceId, _io.gpsTracker()),
    _operationSupport(_client, _tpl, _deviceId, _configurationSynchronization, _io),
    _deviceId(0)
{
}

bool MbedAgent::init()
{
    bool flag = true;
    if (!_integration.init()) {
        aWarning("Init Device Integration failed.\r\n");
        flag = false;
    }
    if (!_configurationSynchronization.init()) {
        aWarning("Init Configuration Synchronization failed.\r\n");
        flag = false;
    }
    if (!_signalQualityMeasurement.init()) {
        aWarning("Init Signal Quality Measurement failed.\r\n");
        flag = false;
    }
    if (!_temperatureMeasurement.init()) {
        aWarning("Init Temperature Measurement failed.\r\n");
        flag = false;
    }
    if (!_accelerationMeasurement.init()) {
        aWarning("Init Acceleration Measurement failed.\r\n");
        flag = false;
    }
    if (!_analogMeasurement.init()) {
        aWarning("Init Analog Measurement failed.\r\n");
        flag = false;
    }
    if (!_locationUpdate.init()) {
        aWarning("Init Location Measurement failed.\r\n");
        flag = false;
    }
    if (!_operationSupport.init()) {
        aWarning("Init Operation Support failed.\r\n");
        flag = false;
    }
    return flag;
}

bool MbedAgent::run()
{
    // device bootstrapping process
    if (!_bootstrap.setUpCredentials())
        return false;

    Thread::wait(5000);

    _io.lcdPrint("Connect to Cloud");
    if (!_integration.integrate()) {
        return false;
    }
    
    if (!_configurationSynchronization.integrate()) {
        return false;
    }
    
    char status[60];
    snprintf(status, sizeof(status), "ID: %ld", _deviceId);
    _io.lcdPrint("Connected", status);

    loop();

    return true;
}

void MbedAgent::loop()
{
    Timer timer; int interval;
    
    timer.start();
    while (true) {
        timer.reset();
        
        _configurationSynchronization.run();
        _signalQualityMeasurement.run();
        _temperatureMeasurement.run();
        _accelerationMeasurement.run();
        _analogMeasurement.run();
        _locationUpdate.run();
        _operationSupport.run();
        
        if ((interval = _configurationProperties.readInterval()) == 0)
            break;

        while (timer.read() < interval) {
            Thread::yield();
        }
    }
}