Initial commit for ESP32
This commit is contained in:
52
esp32/main/protocol.cpp
Normal file
52
esp32/main/protocol.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "protocol.h"
|
||||
#include "cJSON.h"
|
||||
|
||||
cJSON* protocol_message_to_json(const ProtocolMessage* msg) {
|
||||
cJSON* root = cJSON_CreateObject();
|
||||
|
||||
cJSON_AddNumberToObject(root, "v", msg->v);
|
||||
cJSON_AddStringToObject(root, "id", msg->id.c_str());
|
||||
cJSON_AddStringToObject(root, "type", msg->type.c_str());
|
||||
cJSON_AddNumberToObject(root, "ts", msg->ts);
|
||||
cJSON_AddStringToObject(root, "deviceId", msg->deviceId.c_str());
|
||||
|
||||
cJSON* payload_obj = nullptr;
|
||||
if (msg->payload) {
|
||||
payload_obj = cJSON_Duplicate(msg->payload, 1); // deep copy
|
||||
} else {
|
||||
payload_obj = cJSON_CreateObject();
|
||||
}
|
||||
cJSON_AddItemToObject(root, "payload", payload_obj);
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
ProtocolMessage protocol_message_from_json(const cJSON* root) {
|
||||
ProtocolMessage msg;
|
||||
|
||||
const cJSON* item = nullptr;
|
||||
|
||||
item = cJSON_GetObjectItem(root, "v");
|
||||
if (item && cJSON_IsNumber(item)) msg.v = item->valueint;
|
||||
|
||||
item = cJSON_GetObjectItem(root, "id");
|
||||
if (item && cJSON_IsString(item)) msg.id = item->valuestring;
|
||||
|
||||
item = cJSON_GetObjectItem(root, "type");
|
||||
if (item && cJSON_IsString(item)) msg.type = item->valuestring;
|
||||
|
||||
item = cJSON_GetObjectItem(root, "ts");
|
||||
if (item && cJSON_IsNumber(item)) msg.ts = item->valuedouble; // uint64_t
|
||||
|
||||
item = cJSON_GetObjectItem(root, "deviceId");
|
||||
if (item && cJSON_IsString(item)) msg.deviceId = item->valuestring;
|
||||
|
||||
item = cJSON_GetObjectItem(root, "payload");
|
||||
if (item && cJSON_IsObject(item)) {
|
||||
msg.payload = cJSON_Duplicate(item, 1); // deep copy
|
||||
} else {
|
||||
msg.payload = cJSON_CreateObject();
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
Reference in New Issue
Block a user