Files
dali_cpp/include/addr.hpp
2026-03-26 12:04:08 +08:00

57 lines
1.4 KiB
C++

#pragma once
#include "base.hpp"
#include <optional>
#include <utility>
#include <vector>
struct DaliCompareAddrResult {
int retH = 0;
int retM = 0;
int retL = 0;
int nextAddr = 0;
};
class DaliAddr {
public:
explicit DaliAddr(DaliBase& base);
std::vector<int> 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<int> searchAddr(int addr = 63);
std::vector<int> searchAddrRange(int start = 0, int end = 63);
void stopSearch();
bool compareSingleAddress(int typ, int addr);
std::pair<int, int> precompareNew(int typ, int m = 0);
int compareAddress(int typ);
int compareAddressNew(int typ, int m = 0);
DaliCompareAddrResult compareAddr(int ad, std::optional<int> minH, std::optional<int> minM,
std::optional<int> 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<int> getSceneBright(int addr, int scene);
bool resetAndAllocAddr(int n = 0, bool removeAddrFirst = false, bool closeLight = false);
private:
DaliBase& base_;
};