57 lines
1.4 KiB
C++
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_;
|
|
};
|