Enhance DALI command handling: add support for repeated forward commands and introduce delay for specific commands

Signed-off-by: Tony <tonylu@tony-cloud.com>
This commit is contained in:
Tony
2026-05-21 17:21:44 +08:00
parent 0c662ecdc3
commit ac73febc9c
+22 -3
View File
@@ -229,14 +229,30 @@ DaliCompareAddrResult DaliAddr::compareAddr(int ad, std::optional<int> /*minH*/,
int DaliAddr::compareMulti(int h, int m, int l, int ad) {
int addr = ad + 1;
int retL = l;
int retM = m;
int retH = h;
for (int i = 0; i < 64; i++) {
if (!base_.isAllocAddr) return addr - 1;
retL++;
if (retL > 255) break;
if (addr > 63) {
return addr - 1;
}
const auto ok = base_.compare(h, m, retL);
retL++;
if (retL > 255) {
retL = 0;
retM++;
if (retM > 255) {
retM = 0;
retH++;
if (retH > 255) {
break;
}
}
}
const auto ok = base_.compare(retH, retM, retL);
if (!ok.has_value() || !ok.value()) {
addr--;
break;
@@ -246,6 +262,9 @@ int DaliAddr::compareMulti(int h, int m, int l, int ad) {
const auto status = base_.getOnlineStatus(addr);
if (!status.has_value() || !status.value()) break;
addr++;
if (addr > 63) {
return addr - 1;
}
}
if (!base_.programShortAddr(addr)) continue;