
Own fork of MbedSmartRestMain
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
operation/OperationExecutor.cpp@65:a62dbef2f924, 2014-10-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |