Files
Calendink/Provider/main/api/devices/store.cpp
Patedam ebb0ccecf4 Moved to lvgl 9.4 because 9.5 has removed runtime xml support.
Made basic example of editing xml layout from backend.
2026-03-15 14:47:32 -04:00

58 lines
1.3 KiB
C++

// Device data store: CRUD helpers
#include "device.hpp"
// Find a device by MAC address, returns nullptr if not found
internal device_t *find_device(const char *mac)
{
for (int i = 0; i < MAX_DEVICES; i++)
{
if (g_Devices[i].active && strcmp(g_Devices[i].mac, mac) == 0)
{
return &g_Devices[i];
}
}
return nullptr;
}
// Register a device by MAC. Returns pointer to device (existing or new).
// Sets *was_new to true if it was freshly registered.
internal device_t *register_device(const char *mac, bool *was_new)
{
*was_new = false;
// Check for existing
device_t *existing = find_device(mac);
if (existing)
{
return existing;
}
// Find a free slot
for (int i = 0; i < MAX_DEVICES; i++)
{
if (!g_Devices[i].active)
{
strlcpy(g_Devices[i].mac, mac, sizeof(g_Devices[i].mac));
g_Devices[i].active = true;
strlcpy(g_Devices[i].xml_layout, kDefaultLayoutXml, sizeof(g_Devices[i].xml_layout));
*was_new = true;
return &g_Devices[i];
}
}
return nullptr; // All slots full
}
// Update the XML layout for a device. Returns true on success.
internal bool update_device_layout(const char *mac, const char *xml)
{
device_t *dev = find_device(mac);
if (!dev)
{
return false;
}
strlcpy(dev->xml_layout, xml, sizeof(dev->xml_layout));
return true;
}