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:
vwochnik
Date:
Thu Oct 30 13:38:20 2014 +0000
Revision:
65:a62dbef2f924
Parent:
64:31a640c32399
Child:
66:31c754c36ed7
operation support

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vwochnik 62:86a04c5bda18 1 #include "OperationExecutor.h"
vwochnik 62:86a04c5bda18 2 #include "ComposedRecord.h"
vwochnik 62:86a04c5bda18 3 #include "CharValue.h"
vwochnik 62:86a04c5bda18 4 #include "IntegerValue.h"
vwochnik 64:31a640c32399 5 #include <string.h>
vwochnik 63:010bbbb4732a 6 #include <stdio.h>
vwochnik 62:86a04c5bda18 7
vwochnik 65:a62dbef2f924 8 OperationExecutor::OperationExecutor(AbstractSmartRest& client, SmartRestTemplate& tpl, long& deviceId, DeviceIO& io) :
vwochnik 62:86a04c5bda18 9 _client(client),
vwochnik 62:86a04c5bda18 10 _tpl(tpl),
vwochnik 65:a62dbef2f924 11 _deviceId(deviceId),
vwochnik 65:a62dbef2f924 12 _io(io)
vwochnik 62:86a04c5bda18 13 {
vwochnik 62:86a04c5bda18 14 _init = false;
vwochnik 62:86a04c5bda18 15 }
vwochnik 62:86a04c5bda18 16
vwochnik 62:86a04c5bda18 17 bool OperationExecutor::init()
vwochnik 62:86a04c5bda18 18 {
vwochnik 62:86a04c5bda18 19 if (_init)
vwochnik 62:86a04c5bda18 20 return false;
vwochnik 62:86a04c5bda18 21
vwochnik 64:31a640c32399 22 // Get operation by id
vwochnik 64:31a640c32399 23 // USAGE: 112,<OPERATION/ID>
vwochnik 62:86a04c5bda18 24 if (!_tpl.add("10,112,GET,/devicecontrol/operations/%%,,application/vnd.com.nsn.cumulocity.operation+json,%%,UNSIGNED,\r\n"))
vwochnik 62:86a04c5bda18 25 return false;
vwochnik 62:86a04c5bda18 26
vwochnik 64:31a640c32399 27 // Relay operation response
vwochnik 64:31a640c32399 28 // Response: 211,<OPERATION/ID>,<STATUS>
vwochnik 64:31a640c32399 29 if (!_tpl.add("11,220,,\"$.c8y_Relay\",\"$.id\",\"$.c8y_Relay.relayState\"\r\n"))
vwochnik 64:31a640c32399 30 return false;
vwochnik 64:31a640c32399 31
vwochnik 62:86a04c5bda18 32 _init = true;
vwochnik 62:86a04c5bda18 33 return true;
vwochnik 62:86a04c5bda18 34 }
vwochnik 62:86a04c5bda18 35
vwochnik 62:86a04c5bda18 36 bool OperationExecutor::executeOperation(OperationStore::Operation& op)
vwochnik 62:86a04c5bda18 37 {
vwochnik 64:31a640c32399 38 uint8_t ret; bool found, relayState;
vwochnik 64:31a640c32399 39 ComposedRecord record;
vwochnik 64:31a640c32399 40 ParsedRecord received;
vwochnik 64:31a640c32399 41
vwochnik 64:31a640c32399 42 IntegerValue msgId(112);
vwochnik 64:31a640c32399 43 IntegerValue operationId(op.identifier);
vwochnik 64:31a640c32399 44 if ((!record.add(msgId)) || (!record.add(operationId)))
vwochnik 64:31a640c32399 45 return false;
vwochnik 64:31a640c32399 46
vwochnik 64:31a640c32399 47 if (_client.send(record) != SMARTREST_SUCCESS) {
vwochnik 64:31a640c32399 48 _client.stop();
vwochnik 64:31a640c32399 49 return false;
vwochnik 64:31a640c32399 50 }
vwochnik 64:31a640c32399 51
vwochnik 64:31a640c32399 52 found = false;
vwochnik 64:31a640c32399 53 while ((ret = _client.receive(received)) == SMARTREST_SUCCESS) {
vwochnik 64:31a640c32399 54 if ((received.values() == 4) &&
vwochnik 64:31a640c32399 55 (received.value(0).valueType() == VALUE_INTEGER) &&
vwochnik 64:31a640c32399 56 (received.value(0).integerValue() == 220) &&
vwochnik 64:31a640c32399 57 (received.value(2).valueType() == VALUE_INTEGER) &&
vwochnik 64:31a640c32399 58 (received.value(2).integerValue() == op.identifier) &&
vwochnik 64:31a640c32399 59 (received.value(3).valueType() == VALUE_CHARACTER)) {
vwochnik 64:31a640c32399 60 relayState = (strcmp("CLOSED", received.value(3).characterValue()) == 0);
vwochnik 64:31a640c32399 61 found = true;
vwochnik 64:31a640c32399 62 break;
vwochnik 64:31a640c32399 63 }
vwochnik 64:31a640c32399 64 }
vwochnik 64:31a640c32399 65 _client.stop();
vwochnik 64:31a640c32399 66
vwochnik 64:31a640c32399 67 if (!found)
vwochnik 64:31a640c32399 68 return false;
vwochnik 64:31a640c32399 69
vwochnik 64:31a640c32399 70 return executeRelayStateUpdate(relayState);
vwochnik 62:86a04c5bda18 71 }
vwochnik 64:31a640c32399 72
vwochnik 64:31a640c32399 73 bool OperationExecutor::executeRelayStateUpdate(bool relayState)
vwochnik 64:31a640c32399 74 {
vwochnik 64:31a640c32399 75 if (relayState)
vwochnik 65:a62dbef2f924 76 _io.deviceFeedback().closeRelay();
vwochnik 64:31a640c32399 77 else
vwochnik 65:a62dbef2f924 78 _io.deviceFeedback().openRelay();
vwochnik 64:31a640c32399 79 return true;
vwochnik 64:31a640c32399 80 }