mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-02-04 12:15:38 +00:00
BETTER STABILITY FOR TOGGLE CHANNEL ON TOGGLE (protect against random rare high level /low level spikes)
This commit is contained in:
@ -2080,30 +2080,40 @@ void PIN_ticks(void* param)
|
||||
#endif
|
||||
}
|
||||
else if (g_cfg.pins.roles[i] == IOR_ToggleChannelOnToggle) {
|
||||
// we must detect a toggle, but with debouncing
|
||||
value = PIN_ReadDigitalInputValue_WithInversionIncluded(i);
|
||||
// debouncing
|
||||
if (g_times[i] <= 0) {
|
||||
if (g_lastValidState[i] != value) {
|
||||
// became up
|
||||
g_lastValidState[i] = value;
|
||||
|
||||
|
||||
if (CFG_HasFlag(OBK_FLAG_BUTTON_DISABLE_ALL)) {
|
||||
addLogAdv(LOG_INFO, LOG_FEATURE_GENERAL, "Child lock!");
|
||||
|
||||
if (value) {
|
||||
if (g_times[i] > debounceMS) {
|
||||
if (g_lastValidState[i] != value) {
|
||||
g_lastValidState[i] = value;
|
||||
|
||||
if (!CFG_HasFlag(OBK_FLAG_BUTTON_DISABLE_ALL)) {
|
||||
CHANNEL_Toggle(g_cfg.pins.channels[i]);
|
||||
EventHandlers_FireEvent(CMD_EVENT_PIN_ONTOGGLE, i);
|
||||
} else {
|
||||
addLogAdv(LOG_INFO, LOG_FEATURE_GENERAL, "Child lock!");
|
||||
}
|
||||
}
|
||||
else {
|
||||
CHANNEL_Toggle(g_cfg.pins.channels[i]);
|
||||
// fire event - IOR_ToggleChannelOnToggle has been toggle
|
||||
// Argument is a pin number (NOT channel)
|
||||
EventHandlers_FireEvent(CMD_EVENT_PIN_ONTOGGLE, i);
|
||||
}
|
||||
// lock for given time
|
||||
g_times[i] = debounceMS;
|
||||
} else {
|
||||
g_times[i] += t_diff;
|
||||
}
|
||||
}
|
||||
else {
|
||||
g_times[i] -= t_diff;
|
||||
g_times2[i] = 0;
|
||||
} else {
|
||||
if (g_times2[i] > debounceMS) {
|
||||
if (g_lastValidState[i] != value) {
|
||||
g_lastValidState[i] = value;
|
||||
|
||||
if (!CFG_HasFlag(OBK_FLAG_BUTTON_DISABLE_ALL)) {
|
||||
CHANNEL_Toggle(g_cfg.pins.channels[i]);
|
||||
EventHandlers_FireEvent(CMD_EVENT_PIN_ONTOGGLE, i);
|
||||
} else {
|
||||
addLogAdv(LOG_INFO, LOG_FEATURE_GENERAL, "Child lock!");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
g_times2[i] += t_diff;
|
||||
}
|
||||
g_times[i] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user