#pragma once #include "base.hpp" #include "color.hpp" #include #include #include class ColorStatus { public: explicit ColorStatus(int status) : status_(status) {} bool xyOutOfRange() const { return (status_ & 0x01) != 0; } bool ctOutOfRange() const { return (status_ & 0x02) != 0; } bool autoCalibrationActive() const { return (status_ & 0x04) != 0; } bool autoCalibrationSuccess() const { return (status_ & 0x08) != 0; } bool xyActive() const { return (status_ & 0x10) != 0; } bool ctActive() const { return (status_ & 0x20) != 0; } bool primaryNActive() const { return (status_ & 0x40) != 0; } bool rgbwafActive() const { return (status_ & 0x80) != 0; } private: int status_ = 0; }; class ColorTypeFeature { public: explicit ColorTypeFeature(int features) : features_(features) {} int features() const { return features_; } bool xyCapable() const { return (features_ & 0x01) != 0; } bool ctCapable() const { return (features_ & 0x02) != 0; } int primaryCount() const { return (features_ >> 2) & 0x07; } int rgbwafChannels() const { return (features_ >> 5) & 0x07; } bool primaryNCapable() const { return primaryCount() > 0; } bool rgbwafCapable() const { return rgbwafChannels() > 0; } private: int features_ = 0; }; class DaliDT8 { public: explicit DaliDT8(DaliBase& base); bool enableDT8(); std::optional getColorTypeFeature(int a); std::optional getColorStatus(int a); std::optional getColTempRaw(int a, int type = 2); bool setColTempRaw(int a, int value); bool setColorTemperature(int addr, int kelvin); std::optional getColorTemperature(int a); std::optional getMinColorTemperature(int a); std::optional getMaxColorTemperature(int a); std::optional getPhysicalMinColorTemperature(int a); std::optional getPhysicalMaxColorTemperature(int a); bool setColourRaw(int addr, int x1, int y1); // Temporary setters bool setTemporaryColourXRaw(int addr, int x1); bool setTemporaryColourYRaw(int addr, int y1); bool setTemporaryColourXY(int a, double x, double y); bool setTemporaryColourTemperature(int a, int kelvin); bool setTemporaryPrimaryDimLevel(int a, int n, double level); bool setTemporaryRGBDimLevels(int a, int r, int g, int b); bool setTemporaryWAFDimLevels(int a, int w, int amber, int freecolour); bool setTemporaryRGBWAFControl(int a, int control); bool copyReportToTemporary(int a); // Step commands bool stepXUp(int a); bool stepXDown(int a); bool stepYUp(int a); bool stepYDown(int a); bool stepTcCooler(int a); bool stepTcWarmer(int a); bool setColourRGBRaw(int addr, int r, int g, int b); bool setColour(int a, double x, double y); std::optional getColourRaw(int a, int type); std::vector getColour(int a); bool setColourRGB(int addr, int r, int g, int b); std::vector getColourRGB(int a); bool activateTemporaryColour(int a); // Active-type queries std::optional getPrimaryDimLevel(int a, int n); std::optional getRedDimLevel(int a); std::optional getGreenDimLevel(int a); std::optional getBlueDimLevel(int a); std::optional getWhiteDimLevel(int a); std::optional getAmberDimLevel(int a); std::optional getFreecolourDimLevel(int a); std::optional getRGBWAFControl(int a); // Temporary colour queries std::optional getTemporaryXRaw(int a); std::optional getTemporaryYRaw(int a); std::optional getTemporaryColourTemperatureRaw(int a); std::optional getTemporaryPrimaryDimLevel(int a, int n); std::optional getTemporaryRedDimLevel(int a); std::optional getTemporaryGreenDimLevel(int a); std::optional getTemporaryBlueDimLevel(int a); std::optional getTemporaryWhiteDimLevel(int a); std::optional getTemporaryAmberDimLevel(int a); std::optional getTemporaryFreecolourDimLevel(int a); std::optional getTemporaryRGBWAFControl(int a); std::optional getTemporaryColourType(int a); std::vector getTemporaryColour(int a); std::optional getTemporaryColorTemperature(int a); // Report colour queries std::optional getReportXRaw(int a); std::optional getReportYRaw(int a); std::optional getReportColourTemperatureRaw(int a); std::optional getReportPrimaryDimLevel(int a, int n); std::optional getReportRedDimLevel(int a); std::optional getReportGreenDimLevel(int a); std::optional getReportBlueDimLevel(int a); std::optional getReportWhiteDimLevel(int a); std::optional getReportAmberDimLevel(int a); std::optional getReportFreecolourDimLevel(int a); std::optional getReportRGBWAFControl(int a); std::optional getReportColourType(int a); std::vector getReportColour(int a); std::optional getReportColorTemperature(int a); std::optional getNumberOfPrimaries(int a); std::optional getPrimaryXRaw(int a, int n); std::optional getPrimaryYRaw(int a, int n); std::optional getPrimaryTy(int a, int n); std::vector getSceneColor(int a, int sense); // Store / config bool storePrimaryTy(int a, int n, int ty); bool storePrimaryXY(int a, int n, double x, double y); bool storeColourTempLimitRaw(int a, int limitType, int mirek); bool storeColourTempLimit(int a, int limitType, int kelvin); bool setGearAutoActivate(int a, bool enable); bool assignColourToLinkedChannels(int a, int colourId); bool startAutoCalibration(int a); // Direct queries std::optional getGearFeaturesStatus(int a); std::optional getRGBWAFControlDirect(int a); std::optional getAssignedColourForChannel(int a, int channelId); std::optional getExtendedVersion(int a); private: DaliBase& base_; };