fix: Invalid 'active' state of Sticky LS when no source set (#1430)

* The set/reset switches for a logical switch are only processed if the are valid.

* added coment

* Move / elaborate on comment

Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
Wilhelm
2022-02-27 11:37:32 +10:00
committed by GitHub
co-authored by Peter Feerick
parent 0391174e06
commit 79e0a212e7
+16 -12
View File
@@ -908,22 +908,26 @@ void logicalSwitchesTimerTick()
ls_sticky_struct & lastValue = (ls_sticky_struct &)LS_LAST_VALUE(fm, i);
bool before = lastValue.last & 0x01;
if (lastValue.state) {
bool now = getSwitch(ls->v2);
if (now != before) {
lastValue.last ^= 1;
if (!before) {
lastValue.state = 0;
if (ls->v2 != SWSRC_NONE) { // only if used / source set
bool now = getSwitch(ls->v2);
if (now != before) {
lastValue.last ^= 1;
if (!before) {
lastValue.state = 0;
}
}
}
}
}
else {
bool now = getSwitch(ls->v1);
if (before != now) {
lastValue.last ^= 1;
if (!before) {
lastValue.state = 1;
if (ls->v1 != SWSRC_NONE) { // only if used / source set
bool now = getSwitch(ls->v1);
if (before != now) {
lastValue.last ^= 1;
if (!before) {
lastValue.state = 1;
}
}
}
}
}
}
else if (ls->func == LS_FUNC_EDGE) {