Initial commit for ESP32

This commit is contained in:
2026-04-01 20:32:34 +03:00
parent 6f3584fe6d
commit 3772981b8f
12 changed files with 3715 additions and 1 deletions

52
esp32/main/protocol.cpp Normal file
View 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;
}