Control requests
Handler using JSONValue - Control requests
To support older versions of Device OS, you can also use JSONValue and JSONWriter.
void ctrl_request_custom_handler(ctrl_request *req) {
int result = SYSTEM_ERROR_NOT_SUPPORTED;
JSONValue outerObj = JSONValue::parseCopy(req->request_data, req->request_size);
memset(responseBuffer, 0, sizeof(responseBuffer));
String op;
{
JSONObjectIterator iter(outerObj);
while(iter.next()) {
if (iter.name() == "op") {
op = (const char *)iter.value().toString();
break;
}
}
}
Log.info("USB request received op=%s", op.c_str());
if (op == "test") {
JSONBufferWriter writer(responseBuffer, sizeof(responseBuffer) - 1);
writer.beginObject();
{
writer.name("counter").value(++counter);
writer.name("result").value(0);
}
writer.endObject();
result = SYSTEM_ERROR_NONE;
}
size_t size = strlen(responseBuffer);
if (size > 0) {
if (system_ctrl_alloc_reply_data(req, size, nullptr) == 0) {
memcpy(req->reply_data, responseBuffer, size);
} else {
result = SYSTEM_ERROR_NO_MEMORY;
}
}
system_ctrl_set_result(req, result, nullptr, nullptr, nullptr);
}