Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
operation/OperationSupport.cpp
- Committer:
- xinlei
- Date:
- 2015-05-13
- Revision:
- 109:b7a403dbceb6
- Parent:
- 107:f1ee3e1eb126
File content as of revision 109:b7a403dbceb6:
#include <string.h>
#include "OperationSupport.h"
//#include "ComposedRecord.h"
//#include "ParsedRecord.h"
//#include "IntegerValue.h"
#include "SmartRestSocket.h"
#include "ControlParser.h"
#include "logging.h"
bool OperationSupport::init()
{
if (_init)
return false;
// Get pending operations
// USAGE: 110,<DEVICE/ID>
if (!_tpl.add("10,110,GET,/devicecontrol/operations?status=PENDING&deviceId=%%&pageSize=100,,application/vnd.com.nsn.cumulocity.operationCollection+json,%%,UNSIGNED,\r\n"))
return false;
// Set operation state
// USAGE: 111,<OPERATION/ID>,<STATE>
if (!_tpl.add("10,111,PUT,/devicecontrol/operations/%%,application/vnd.com.nsn.cumulocity.operation+json,application/vnd.com.nsn.cumulocity.operation+json,%%,UNSIGNED STRING,\"{\"\"status\"\":\"\"%%\"\"}\"\r\n"))
return false;
// Get operations
// Response: 210,<OPERATION/ID>,<STATUS>
if (!_tpl.add("11,210,\"$.operations\",,\"$.id\",\"$.status\"\r\n"))
return false;
// Get operation
// Response: 211,<OPERATION/ID>,<STATUS>
if (!_tpl.add("11,211,,\"$.deviceId\",\"$.id\",\"$.status\"\r\n"))
return false;
// Get operation by id
// USAGE: 112,<OPERATION/ID>
if (!_tpl.add("10,112,GET,/devicecontrol/operations/%%,,application/vnd.com.nsn.cumulocity.operation+json,%%,UNSIGNED,\r\n"))
return false;
// Relay operation response
// Response: 220,<OPERATION/ID>,<STATUS>
if (!_tpl.add("11,220,,\"$.c8y_Relay\",\"$.id\",\"$.c8y_Relay.relayState\"\r\n"))
return false;
// Message operation response
// Response: 221,<OPERATION/ID>,<MESSAGE>
if (!_tpl.add("11,221,,\"$.c8y_Message\",\"$.id\",\"$.c8y_Message.text\"\r\n"))
return false;
// Configuration operation response
// Response: 222,<OPERATION/ID>,<CONFIGURATION/STRING>
if (!_tpl.add("11,222,,\"$.c8y_Configuration\",\"$.id\",\"$.c8y_Configuration.config\"\r\n"))
return false;
_init = true;
return true;
}
bool OperationSupport::executePendingOperations()
{
char buf[SMARTREST_SIZE];
char buf2[SMARTREST_BODY_SIZE];
SmartRestSocket sock;
int l = snprintf(buf2, sizeof(buf2), "110,%ld\r\n", deviceID);
l = snprintf(buf, sizeof(buf), fmtSmartRest, "/s", l, buf2);
l = sock.sendAndReceive(buf, l, sizeof(buf));
if (l < 0) {
aError("Retrieve pending operations\n");
return false;
}
const size_t N = 10;
long opl[N];
size_t i = 0;
for (const char* p = skipHTTPHeader(buf); i<N && *p;) {
long id = 0;
int c = 0;
int n = sscanf(p, "210,1,%ld,PENDING\r\n%n", &id, &c);
if (n == 1) {
opl[i++] = id;
p += c;
} else
break;
}
if (i == 0)
return true;
else if (i >= N)
aWarning("Over %u pending operations.\n", N);
ControlParser cp(opool);
bool flag = true;
l = 0;
for (size_t j = 0; j < i; ++j) {
l += snprintf(buf2+l, sizeof(buf2)-l, "112,%ld\r\n", opl[j]);
}
l = snprintf(buf, sizeof(buf), fmtSmartRest, "/s", l, buf2);
l = sock.sendAndReceive(buf, l, sizeof(buf));
if (l >= 0)
cp.parse(buf);
else
flag = false;
return flag;
}
