#pragma once #include "dali_comm.hpp" #include #include #include #include #include #include #include struct DaliStatus { bool controlGearPresent = false; bool lampFailure = false; bool lampPowerOn = false; bool limitError = false; bool fadingCompleted = false; bool resetState = false; bool missingShortAddress = false; bool psFault = false; static DaliStatus fromByte(uint8_t status); }; class DaliBase { public: explicit DaliBase(DaliComm& comm); // Runtime state mirrored from Dart DaliBase. const int broadcast = 127; bool isAllocAddr = false; int lastAllocAddr = 0; int selectedAddress = 127; int64_t mcuTicks() const; // Scene helpers bool toScene(int a, int s); bool reset(int a, int t = 2); // Brightness helpers int brightnessToLog(int brightness) const; int logToBrightness(int logValue) const; bool setBright(int a, int b); bool setBrightPercentage(int a, double b); bool stopFade(int a); bool off(int a); bool on(int a); bool recallMaxLevel(int a); bool recallMinLevel(int a); int groupToAddr(int gp) const; // Core sending wrappers bool send(int a, uint8_t cmd); bool sendCmd(uint8_t addr, uint8_t cmd); bool sendExtCmd(int cmd, int value); // DTR helpers bool setDTR(int value); bool setDTR1(int value); bool setDTR2(int value); std::optional getDTR(int a); std::optional getDTR1(int a); std::optional getDTR2(int a); bool copyCurrentBrightToDTR(int a); // Colour value helpers (DT8 plumbing) bool queryColourValue(int a); bool storeDTRAsAddr(int a); bool storeDTRAsSceneBright(int a, int s); bool storeScene(int a, int s); bool removeScene(int a, int s); bool addToGroup(int a, int g); bool removeFromGroup(int a, int g); bool storeDTRAsFadeTime(int a); bool storeDTRAsFadeRate(int a); bool storeDTRAsPoweredBright(int a); bool storeDTRAsSystemFailureLevel(int a); bool storeDTRAsMinLevel(int a); bool storeDTRAsMaxLevel(int a); bool storeColourTempLimits(int a); std::optional getOnlineStatus(int a); std::optional getBright(int a); std::optional getDeviceType(int a); std::optional getPhysicalMinLevel(int a); std::optional getDeviceVersion(int a); bool dtSelect(int value); bool activate(int a); bool setDTRAsColourX(int a); bool setDTRAsColourY(int a); bool setDTRAsColourRGB(int a); bool setDTRAsColourTemp(int a); bool copyReportColourToTemp(int a); bool setGradualChangeSpeed(int a, int value); bool setGradualChangeRate(int a, int value); std::optional> getGradualChange(int a); std::optional getGradualChangeRate(int a); std::optional getGradualChangeSpeed(int a); bool setPowerOnLevel(int a, int value); std::optional getPowerOnLevel(int a); bool setSystemFailureLevel(int a, int value); std::optional getSystemFailureLevel(int a); bool setMinLevel(int a, int value); std::optional getMinLevel(int a); bool setMaxLevel(int a, int value); std::optional getMaxLevel(int a); bool setFadeTime(int a, int value); std::optional getFadeTime(int a); bool setFadeRate(int a, int value); std::optional getFadeRate(int a); std::optional getNextDeviceType(int a); std::optional getGroupH(int a); std::optional getGroupL(int a); std::optional getGroup(int a); bool setGroup(int a, int value); std::optional getScene(int a, int b); bool setScene(int a, int b); std::map getScenes(int a); std::optional getStatus(int a); std::optional getControlGearPresent(int a); std::optional getLampFailureStatus(int a); std::optional getLampPowerOnStatus(int a); std::optional getLimitError(int a); std::optional getResetStatus(int a); std::optional getMissingShortAddress(int a); bool terminate(); bool randomise(); bool initialiseAll(); bool initialise(); bool withdraw(); bool cancel(); bool physicalSelection(); bool queryAddressH(int addr); bool queryAddressM(int addr); bool queryAddressL(int addr); bool programShortAddr(int a); std::optional queryShortAddr(); std::optional verifyShortAddr(int a); std::optional compareAddress(); std::optional compare(int h, int m, int l); std::optional getRandomAddrH(int addr); std::optional getRandomAddrM(int addr); std::optional getRandomAddrL(int addr); // Exposed query helpers mirroring Dart API. std::optional query(int a, uint8_t cmd); std::optional queryCmd(uint8_t addr, uint8_t cmd); private: DaliComm& comm_; static uint8_t encodeCmdAddr(int dec_addr); static uint8_t encodeArcAddr(int dec_addr); };