add files
This commit is contained in:
1 parent
3eaff3a647
commit
e76a9c1e9b
9 files changed
+752
No files matched your search
@@ -0,0 +1,82 @@
|
||||
// =====================================================================
|
||||
// ZoneManager.cpp
|
||||
// =====================================================================
|
||||
#include "ZoneManager.h"
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
ZoneManager::ZoneManager() {
|
||||
// Same default layout as the original ESP32-LD2450 project
|
||||
// (three thirds of the room, roughly), in millimeters. Adjust to
|
||||
// taste or override via POST /updateZones once the web UI is up.
|
||||
_zones[0] = { -4000, 1, -1, 4000 };
|
||||
_zones[1] = { 1, 1, 4000, 4000 };
|
||||
_zones[2] = { -4001, 4001, 4001, 6000 };
|
||||
for (uint8_t i = 0; i < MAX_ZONES; i++) _occupied[i] = false;
|
||||
}
|
||||
|
||||
bool ZoneManager::pointInZone(int x, int y, const Zone &z) {
|
||||
return x >= z.x1 && x <= z.x2 && y >= z.y1 && y <= z.y2;
|
||||
}
|
||||
|
||||
void ZoneManager::update(const RadarFrame &frame) {
|
||||
bool temp[MAX_ZONES] = { false, false, false };
|
||||
|
||||
for (uint8_t t = 0; t < frame.targetCount && t < 3; t++) {
|
||||
const RadarTarget &target = frame.targets[t];
|
||||
if (!target.valid) continue;
|
||||
|
||||
for (uint8_t z = 0; z < MAX_ZONES; z++) {
|
||||
if (pointInZone(target.x_mm, target.y_mm, _zones[z])) {
|
||||
temp[z] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (uint8_t z = 0; z < MAX_ZONES; z++) _occupied[z] = temp[z];
|
||||
}
|
||||
|
||||
bool ZoneManager::isZoneOccupied(uint8_t zoneIndex) const {
|
||||
if (zoneIndex >= MAX_ZONES) return false;
|
||||
return _occupied[zoneIndex];
|
||||
}
|
||||
|
||||
Zone ZoneManager::getZone(uint8_t zoneIndex) const {
|
||||
if (zoneIndex >= MAX_ZONES) return Zone{0, 0, 0, 0};
|
||||
return _zones[zoneIndex];
|
||||
}
|
||||
|
||||
void ZoneManager::setZone(uint8_t zoneIndex, const Zone &zone) {
|
||||
if (zoneIndex >= MAX_ZONES) return;
|
||||
_zones[zoneIndex] = zone;
|
||||
}
|
||||
|
||||
String ZoneManager::zonesToJson() const {
|
||||
StaticJsonDocument<512> doc;
|
||||
JsonArray arr = doc.to<JsonArray>();
|
||||
for (uint8_t i = 0; i < MAX_ZONES; i++) {
|
||||
JsonObject z = arr.createNestedObject();
|
||||
z["id"] = i + 1;
|
||||
z["x1"] = _zones[i].x1;
|
||||
z["y1"] = _zones[i].y1;
|
||||
z["x2"] = _zones[i].x2;
|
||||
z["y2"] = _zones[i].y2;
|
||||
z["occupied"] = _occupied[i];
|
||||
}
|
||||
String out;
|
||||
serializeJson(doc, out);
|
||||
return out;
|
||||
}
|
||||
|
||||
bool ZoneManager::zonesFromJson(const uint8_t *data, size_t len) {
|
||||
StaticJsonDocument<512> doc;
|
||||
DeserializationError err = deserializeJson(doc, data, len);
|
||||
if (err) return false;
|
||||
|
||||
for (uint8_t i = 0; i < MAX_ZONES; i++) {
|
||||
_zones[i].x1 = doc[i]["x1"] | _zones[i].x1;
|
||||
_zones[i].y1 = doc[i]["y1"] | _zones[i].y1;
|
||||
_zones[i].x2 = doc[i]["x2"] | _zones[i].x2;
|
||||
_zones[i].y2 = doc[i]["y2"] | _zones[i].y2;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
Reference in new issue
Block a user