Enhance DALI DT1 support: add new operations and extend DT1 status structure with additional fields

Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
Tony
2026-05-26 22:21:53 +08:00
parent faefde9467
commit 597952a75a
5 changed files with 481 additions and 8 deletions
+31
View File
@@ -11,6 +11,23 @@ struct DT1TestStatusDetailed {
std::optional<int> emergencyMode;
std::optional<int> feature;
std::optional<int> deviceStatus;
std::optional<int> batteryChargeLevel;
std::optional<int> functionTestDelayTime;
std::optional<int> durationTestDelayTime;
std::optional<int> functionTestIntervalDays;
std::optional<int> durationTestIntervalWeeks;
std::optional<int> testExecutionTimeoutDays;
std::optional<int> prolongTimeHalfMinutes;
std::optional<int> durationTestResultMinutes;
std::optional<int> lampEmergencyTimeHours;
std::optional<int> lampTotalOperationTimeHours;
std::optional<int> emergencyLevel;
std::optional<int> emergencyMinLevel;
std::optional<int> emergencyMaxLevel;
std::optional<int> ratedDurationMinutes;
std::optional<int> extendedVersion;
std::optional<int> physicalMinLevel;
std::optional<int> emergencyDeviceTypeCode;
bool testInProgress = false;
bool lampFailure = false;
bool batteryFailure = false;
@@ -41,6 +58,14 @@ struct DT1TestStatusDetailed {
bool supportsAdjustableEmergencyLevel = false;
};
enum class DaliDT1EmergencyDeviceType {
unknown = 0,
typeA = 1,
typeB = 2,
typeC = 3,
typeD = 4,
};
class DaliDT1DeviceStatus {
public:
explicit DaliDT1DeviceStatus(int raw) : raw_(raw & 0xFF) {}
@@ -132,6 +157,9 @@ class DaliDT1Features {
bool hardwiredInhibitSupported() const { return bit(0x20); }
bool physicalSelectionSupported() const { return bit(0x40); }
bool relightInRestModeSupported() const { return bit(0x80); }
DaliDT1EmergencyDeviceType emergencyDeviceType(
const std::optional<int>& physicalMinLevel = std::nullopt) const;
int emergencyDeviceTypeCode(const std::optional<int>& physicalMinLevel = std::nullopt) const;
private:
int raw_ = 0;
@@ -187,8 +215,10 @@ class DaliDT1 {
std::optional<int> getBatteryChargeLevel(int a);
std::optional<int> getTestTiming(int a, int selector);
std::optional<int> getFunctionTestDelayTime(int a);
std::optional<int> getFunctionTestDelayHighByte(int a);
std::optional<int> getFunctionTestDelayLowByte(int a);
std::optional<int> getDurationTestDelayTime(int a);
std::optional<int> getDurationTestDelayHighByte(int a);
std::optional<int> getDurationTestDelayLowByte(int a);
std::optional<int> getEmergencyLevel(int a);
@@ -223,5 +253,6 @@ class DaliDT1 {
bool sendWithDTR(int a, int code, int value);
std::optional<int> query(int a, int code);
std::optional<int> queryTiming(int a, int selector);
std::optional<int> queryTimingWordFromHighSelector(int a, int selector);
};