added Fixed antibeat support

This commit is contained in:
2023-10-28 11:39:03 +02:00
parent f842815435
commit 5fc9592886
2 changed files with 17 additions and 5 deletions

View File

@@ -24,6 +24,7 @@ void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId,
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = false;
rule->inverse = false;
rule->lastPinState = false;
PutRule(rule);
}
@@ -38,6 +39,7 @@ void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId,
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = true;
rule->inverse = false;
rule->lastPinState = false;
PutRule(rule);
}
@@ -52,6 +54,7 @@ void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t target
rule->targetMeyPinId = targetMeyPinId;
rule->toggle = true;
rule->inverse = true;
rule->lastPinState = false;
PutRule(rule);
}
@@ -60,19 +63,26 @@ void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t target
void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule)
{
RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(rule->targetDevId);
RemotePinInfo *currentRemotePinInfo = remotePinInfo.FindOrAdd(rule->targetDevId);
if (currentRemotePinInfo == NULL) return;
if (currentPinState == NULL) return;
// check the new state with the last one. Needs to be done, as the UP switch might
// send it multiple times like "01 01" "01 01" for a single tip.(antibeat)
bool lastPinState = rule->lastPinState;
bool pinState = dt > 0;
if (rule->triggeredOnce && lastPinState == pinState) return;
rule->lastPinState = pinState;
rule->triggeredOnce = true;
bool pinState = state > 0;
if (rule->inverse)
pinState = !pinState;
if (rule->toggle)
pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true);
pinState = (currentRemotePinInfo->getPinState(rule->targetMeyPinId) ^ true);
BroadcastTriggerMeyPinCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState);
currentPinState->setPinState(rule->targetMeyPinId, pinState);
currentRemotePinInfo->setPinState(rule->targetMeyPinId, pinState);
}
void HandleTriggered(can_frame *frame)