#pragma once #include "base.hpp" #include #include #include struct DaliCompareAddrResult { int retH = 0; int retM = 0; int retL = 0; int nextAddr = 0; }; class DaliAddr { public: explicit DaliAddr(DaliBase& base); std::vector onlineDevices; bool isSearching = false; int scanRangeStart = 0; int scanRangeEnd = 63; bool isAllocAddr() const; void setIsAllocAddr(bool value); int lastAllocAddr() const; void setLastAllocAddr(int value); void selectDevice(int address); bool writeAddr(int addr, int newAddr); bool removeAddr(int addr); bool removeAllAddr(); std::vector searchAddr(int addr = 63); std::vector searchAddrRange(int start = 0, int end = 63); void stopSearch(); bool compareSingleAddress(int typ, int addr); std::pair precompareNew(int typ, int m = 0); int compareAddress(int typ); int compareAddressNew(int typ, int m = 0); DaliCompareAddrResult compareAddr(int ad, std::optional minH, std::optional minM, std::optional minL); int compareMulti(int h, int m, int l, int ad); bool allocateAllAddr(int ads = 0); void stopAllocAddr(); bool removeFromScene(int addr, int scene); std::optional getSceneBright(int addr, int scene); bool resetAndAllocAddr(int n = 0, bool removeAddrFirst = false, bool closeLight = false); private: DaliBase& base_; };