#pragma once #include "base.hpp" #include class DaliDT6GearType { public: explicit DaliDT6GearType(int raw) : raw_(raw & 0xFF) {} int raw() const { return raw_; } bool ledPowerSupplyIntegrated() const { return bit(0x01); } bool ledModuleIntegrated() const { return bit(0x02); } bool acSupplyPossible() const { return bit(0x04); } bool dcSupplyPossible() const { return bit(0x08); } private: int raw_ = 0; bool bit(int mask) const { return (raw_ & mask) != 0; } }; class DaliDT6OperatingModes { public: explicit DaliDT6OperatingModes(int raw) : raw_(raw & 0xFF) {} int raw() const { return raw_; } bool pwmModePossible() const { return bit(0x01); } bool amModePossible() const { return bit(0x02); } bool currentControlledOutput() const { return bit(0x04); } bool highCurrentPulseMode() const { return bit(0x08); } private: int raw_ = 0; bool bit(int mask) const { return (raw_ & mask) != 0; } }; class DaliDT6Features { public: explicit DaliDT6Features(int raw) : raw_(raw & 0xFF) {} int raw() const { return raw_; } bool canQueryShortCircuit() const { return bit(0x01); } bool canQueryOpenCircuit() const { return bit(0x02); } bool canQueryLoadDecrease() const { return bit(0x04); } bool canQueryLoadIncrease() const { return bit(0x08); } bool canQueryCurrentProtector() const { return bit(0x10); } bool canQueryThermalShutdown() const { return bit(0x20); } bool canQueryThermalOverloadReduction() const { return bit(0x40); } bool physicalSelectionSupported() const { return bit(0x80); } private: int raw_ = 0; bool bit(int mask) const { return (raw_ & mask) != 0; } }; class DaliDT6FailureStatus { public: explicit DaliDT6FailureStatus(int raw) : raw_(raw & 0xFF) {} int raw() const { return raw_; } bool shortCircuit() const { return bit(0x01); } bool openCircuit() const { return bit(0x02); } bool loadDecrease() const { return bit(0x04); } bool loadIncrease() const { return bit(0x08); } bool currentProtectorActive() const { return bit(0x10); } bool thermalShutdown() const { return bit(0x20); } bool thermalOverloadReduction() const { return bit(0x40); } bool referenceMeasurementFailed() const { return bit(0x80); } private: int raw_ = 0; bool bit(int mask) const { return (raw_ & mask) != 0; } }; class DaliDT6OperatingMode { public: explicit DaliDT6OperatingMode(int raw) : raw_(raw & 0xFF) {} int raw() const { return raw_; } bool pwmModeActive() const { return bit(0x01); } bool amModeActive() const { return bit(0x02); } bool currentControlledOutput() const { return bit(0x04); } bool highCurrentPulseModeActive() const { return bit(0x08); } bool nonLogarithmicDimmingCurveActive() const { return bit(0x10); } private: int raw_ = 0; bool bit(int mask) const { return (raw_ & mask) != 0; } }; class DaliDT6 { public: explicit DaliDT6(DaliBase& base); bool enableDT6(); bool referenceSystemPower(int a); bool enableCurrentProtector(int a); bool disableCurrentProtector(int a); bool selectDimmingCurve(int a, int curve); bool storeFastFadeTime(int a, int value); std::optional getGearType(int a); std::optional getDimmingCurve(int a); std::optional getPossibleOperatingModes(int a); std::optional getFeatures(int a); std::optional getFailureStatus(int a); std::optional hasShortCircuit(int a); std::optional hasOpenCircuit(int a); std::optional hasLoadDecrease(int a); std::optional hasLoadIncrease(int a); std::optional isCurrentProtectorActive(int a); std::optional hasThermalShutDown(int a); std::optional hasThermalOverload(int a); std::optional isReferenceRunning(int a); std::optional isReferenceMeasurementFailed(int a); std::optional isCurrentProtectorEnabled(int a); std::optional getOperatingMode(int a); std::optional getFastFadeTime(int a); std::optional getMinFastFadeTime(int a); std::optional getExtendedVersion(int a); private: DaliBase& base_; bool enable(); static int addrOf(int a); bool send(int a, int code, bool twice = false); std::optional query(int a, int code); std::optional queryYesNo(int a, int code); };