Files
dali_cpp/include/device.hpp
2026-03-26 12:04:08 +08:00

117 lines
3.1 KiB
C++

#pragma once
#include "model_value.hpp"
#include <optional>
#include <string>
#include <vector>
struct DaliLongAddress {
int h = 0;
int m = 0;
int l = 0;
static DaliLongAddress fromJson(const DaliValue::Object* json);
DaliValue::Object toJson() const;
};
struct DaliDeviceCapabilities {
std::optional<bool> supportsDt1;
std::optional<bool> supportsDt8;
static DaliDeviceCapabilities fromJson(const DaliValue::Object* json);
DaliValue::Object toJson() const;
void merge(const DaliDeviceCapabilities& other);
};
struct DaliStatusFlags {
std::optional<bool> controlGearPresent;
std::optional<bool> lampFailure;
std::optional<bool> lampPowerOn;
std::optional<bool> limitError;
std::optional<bool> fadingCompleted;
std::optional<bool> resetState;
std::optional<bool> missingShortAddress;
std::optional<bool> psFault;
static DaliStatusFlags fromJson(const DaliValue::Object* json);
DaliValue::Object toJson() const;
bool hasData() const;
void merge(const DaliStatusFlags& other);
};
struct DaliDt8State {
std::optional<int> colorType;
std::optional<std::string> activeMode;
std::optional<int> xyX;
std::optional<int> xyY;
std::optional<int> xyMinX;
std::optional<int> xyMaxX;
std::optional<int> xyMinY;
std::optional<int> xyMaxY;
std::optional<int> mirek;
std::optional<int> mirekMin;
std::optional<int> mirekMax;
std::optional<std::vector<int>> rgbwaf;
std::optional<std::vector<int>> primaryN;
static DaliDt8State fromJson(const DaliValue::Object* json);
DaliValue::Object toJson() const;
};
struct DaliDt1State {
std::optional<int> emergencyLevel;
std::optional<int> emergencyMinLevel;
std::optional<int> emergencyMaxLevel;
std::optional<int> prolongTimeMinutes;
std::optional<int> ratedDurationMinutes;
std::optional<int> testDelayTime;
std::optional<int> failureStatus;
std::optional<int> emergencyStatus;
std::optional<int> emergencyMode;
std::optional<int> feature;
std::optional<int> version;
static DaliDt1State fromJson(const DaliValue::Object* json);
DaliValue::Object toJson() const;
};
struct DaliDevice {
std::string id;
std::string name;
std::optional<int> shortAddress;
std::optional<DaliLongAddress> longAddress;
bool isolated = false;
std::optional<int> brightness;
std::optional<int> groupBits;
std::optional<std::vector<int>> scenes;
std::optional<int> fadeTime;
std::optional<int> fadeRate;
std::optional<int> powerOnLevel;
std::optional<int> systemFailureLevel;
std::optional<int> minLevel;
std::optional<int> maxLevel;
std::optional<int> operatingMode;
std::optional<int> physicalMinLevel;
std::optional<int> deviceType;
std::vector<int> extType;
std::optional<int> version;
DaliDeviceCapabilities capabilities;
std::optional<DaliDt8State> dt8;
std::optional<DaliDt1State> dt1;
DaliStatusFlags statusFlags;
std::optional<std::string> lastSyncedUtc;
DaliValue::Object metadata;
static DaliDevice fromJson(const DaliValue::Object& json);
DaliValue::Object toJson() const;
std::string displayName() const;
void merge(const DaliDevice& other);
};