added Fixed antibeat support
This commit is contained in:
@@ -24,6 +24,7 @@ void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId,
|
|||||||
rule->targetMeyPinId = targetMeyPinId;
|
rule->targetMeyPinId = targetMeyPinId;
|
||||||
rule->toggle = false;
|
rule->toggle = false;
|
||||||
rule->inverse = false;
|
rule->inverse = false;
|
||||||
|
rule->lastPinState = false;
|
||||||
|
|
||||||
PutRule(rule);
|
PutRule(rule);
|
||||||
}
|
}
|
||||||
@@ -38,6 +39,7 @@ void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId,
|
|||||||
rule->targetMeyPinId = targetMeyPinId;
|
rule->targetMeyPinId = targetMeyPinId;
|
||||||
rule->toggle = true;
|
rule->toggle = true;
|
||||||
rule->inverse = false;
|
rule->inverse = false;
|
||||||
|
rule->lastPinState = false;
|
||||||
|
|
||||||
PutRule(rule);
|
PutRule(rule);
|
||||||
}
|
}
|
||||||
@@ -52,6 +54,7 @@ void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t target
|
|||||||
rule->targetMeyPinId = targetMeyPinId;
|
rule->targetMeyPinId = targetMeyPinId;
|
||||||
rule->toggle = true;
|
rule->toggle = true;
|
||||||
rule->inverse = true;
|
rule->inverse = true;
|
||||||
|
rule->lastPinState = false;
|
||||||
|
|
||||||
PutRule(rule);
|
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)
|
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)
|
if (rule->inverse)
|
||||||
pinState = !pinState;
|
pinState = !pinState;
|
||||||
|
|
||||||
if (rule->toggle)
|
if (rule->toggle)
|
||||||
pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true);
|
pinState = (currentRemotePinInfo->getPinState(rule->targetMeyPinId) ^ true);
|
||||||
|
|
||||||
BroadcastTriggerMeyPinCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState);
|
BroadcastTriggerMeyPinCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState);
|
||||||
currentPinState->setPinState(rule->targetMeyPinId, pinState);
|
currentRemotePinInfo->setPinState(rule->targetMeyPinId, pinState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HandleTriggered(can_frame *frame)
|
void HandleTriggered(can_frame *frame)
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ struct Rule
|
|||||||
bool toggle;
|
bool toggle;
|
||||||
bool inverse;
|
bool inverse;
|
||||||
Rule *nextRule = NULL;
|
Rule *nextRule = NULL;
|
||||||
|
bool lastPinState = false;
|
||||||
|
bool triggeredOnce = false;
|
||||||
|
|
||||||
void AddRule(Rule *rule)
|
void AddRule(Rule *rule)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user