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

Revision:
93:0acd11870c6a
Parent:
91:423177e8a401
Child:
94:61d44636f020
--- a/MbedAgent.cpp	Fri Mar 20 14:27:10 2015 +0000
+++ b/MbedAgent.cpp	Mon Apr 13 14:24:58 2015 +0000
@@ -3,25 +3,23 @@
 #include "logging.h"
 #include "watchdog.h"
 
-bool lastSensorReadingSent=true;
-
-MbedAgent::MbedAgent(DeviceIO& io, MDMSerial& mdm, DeviceInfo& deviceInfo, DeviceMemory& deviceMemory) :
-    _io(io),
+MbedAgent::MbedAgent(GPSI2C& gps, MDMSerial& mdm, LCDDisplay& lcdDisplay,
+    DeviceInfo& deviceInfo, DeviceMemory& deviceMemory) :
     _mdm(mdm),
     _deviceInfo(deviceInfo),
     _deviceMemory(deviceMemory),
     _configurationProperties(_deviceConfiguration),
-    _client(MBED_AGENT_HOST, MBED_AGENT_PORT, MBED_AGENT_DEVICE_IDENTIFIER, mdm),
-    _bootstrap(_client, _io, _deviceInfo, _deviceMemory),
+    _client(mdm),
+    _bootstrap(_client, lcdDisplay, _deviceInfo, _deviceMemory),
     _integration(_client, _tpl, _deviceId, _deviceInfo),
-    _displayInfo(),
+    _lcdDisplay(lcdDisplay),
     _configurationSynchronization(_client, _tpl, _deviceId, _deviceMemory, _deviceConfiguration, _configurationProperties),
-    _signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo, io, _displayInfo),
-    _temperatureMeasurement(_client, _tpl, _deviceId, io, deviceInfo, _displayInfo),
-    _accelerationMeasurement(_client, _tpl, _deviceId, io, deviceInfo, _displayInfo),
-    _analogMeasurement(_client, _tpl, _deviceId, io, deviceInfo, _displayInfo),
-    _locationUpdate(_client, _tpl, _deviceId, _io.gpsTracker(), io, deviceInfo, _displayInfo),
-    _operationSupport(_client, _tpl, _deviceId, _configurationSynchronization, _io, _displayInfo),
+    _signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo, _lcdDisplay),
+    _temperatureMeasurement(_client, _tpl, _deviceId, deviceInfo, _lcdDisplay),
+    _accelerationMeasurement(_client, _tpl, _deviceId, deviceInfo, _lcdDisplay),
+    _analogMeasurement(_client, _tpl, _deviceId, deviceInfo, _lcdDisplay),
+    _locationUpdate(_client, _tpl, _deviceId, gps, deviceInfo, _lcdDisplay),
+    _operationSupport(_client, _tpl, _deviceId, _configurationSynchronization, _lcdDisplay),
     _deviceId(0)
 {
 }
@@ -30,103 +28,85 @@
 {
     bool flag = true;
     if (!_integration.init()) {
-        aError("Init Device Integration failed.\r\n");
+        _lcdDisplay.setLines("Integration init failure");
         flag = false;
     }
     if (!_configurationSynchronization.init()) {
-        aError("Init Configuration Synchronization failed.\r\n");
+        _lcdDisplay.setLines("Config Sync init failure");
         flag = false;
     }
     if (!_signalQualityMeasurement.init()) {
-        aError("Init Signal Quality Measurement failed.\r\n");
+        _lcdDisplay.setLines("Signal init failure");
         flag = false;
     }
     if (!_temperatureMeasurement.init()) {
-        aError("Init Temperature Measurement failed.\r\n");
+        _lcdDisplay.setLines("Temperature init failure");
         flag = false;
     }
     if (!_accelerationMeasurement.init()) {
-        aError("Init Acceleration Measurement failed.\r\n");
+        _lcdDisplay.setLines("Acceleration init failure");
         flag = false;
     }
     if (!_analogMeasurement.init()) {
-        aError("Init Analog Measurement failed.\r\n");
+        _lcdDisplay.setLines("Analog init failure");
         flag = false;
     }
     if (!_locationUpdate.init()) {
-        aError("Init Location Measurement failed.\r\n");
+        _lcdDisplay.setLines("Location init failure");
         flag = false;
     }
     if (!_operationSupport.init()) {
-        aError("Init Operation Support failed.\r\n");
+        _lcdDisplay.setLines("Operation init failure");
         flag = false;
     }
     return flag;
 }
 
-bool MbedAgent::run()
+int MbedAgent::run()
 {
     // device bootstrapping process
     if (!_bootstrap.setUpCredentials())
-        return false;
+        return -1;
 
     Thread::wait(5000);
 
-    _io.lcdPrint("Connect to Cloud", MBED_AGENT_HOST);
+    _lcdDisplay.setLines("Connect to Cloud", getHost());
     if (!_integration.integrate()) {
-        return false;
+        return -2;
     }
     
     if (!_configurationSynchronization.integrate()) {
-        return false;
+        return -3;
     }
     
-    char status[60];
+    char status[27];
     snprintf(status, sizeof(status), "ID: %ld", _deviceId);
-    _io.lcdPrint("Connected", status);
+    _lcdDisplay.setLines("Connected", status);
 
-    char tenant[25];
-    const char* user= _bootstrap.username();
-    int len = strchr(user, '/')-user+1+8;  // 8: length of "Tenant: "
-    len = len <= 25 ? len : 25;
-    snprintf(tenant, len, "Tenant: %s", user);
-    _displayInfo.setFirstLine(tenant);
-    loop();
-
-    return true;
+    const char* user= getUsername();
+    int len = strchr(user, '/')-user+sizeof("Tenant: ");
+    len = len <= 27 ? len : 27;
+    snprintf(status, len, "Tenant: %s", user);
+    _lcdDisplay.setFirstLine(status);
+    return 0;
 }
 
 void MbedAgent::loop()
 {
     Watchdog wdt;
-    DigitalIn joystickUp(A2);
-    DigitalIn joystickDown(A3);
-//    DigitalIn joystickLeft(A4);
-//    AnalogIn joystickRight(A5);
-    
     wdt.kick(60.0);    // set a 60.0 seconds timeout on watchdog hardware timer
+
     while (true) {
-        if (joystickDown) {
-            setLevel(A_NONE);
-            _mdm.setDebug(-1);
-            printf("***Disabled debug mode.***\r\n");
-        } else if (joystickUp) {
-            setLevel(A_DEBUG);
-            _mdm.setDebug(3);
-            printf("***Enabled debug mode.***\r\n");
-        }
-
+        _operationSupport.run();
         _configurationSynchronization.run();
         _signalQualityMeasurement.run();
         _temperatureMeasurement.run();
+        _accelerationMeasurement.run();
         _analogMeasurement.run();
-        _accelerationMeasurement.run();
         _locationUpdate.run();
-        _operationSupport.run();
 
 //        if ((interval = _configurationProperties.readInterval()) < 0)
 //            break;
-//
 //        while (timer.read() < interval) {
 //            Thread::yield();
 //        }