From d724ec11281c5a24cae6602179c67e14b1c7ed8e Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 2 Mar 2017 20:24:01 +0100 Subject: [PATCH] Fixes #4136 - Reset all logical switch fields on change of function type - By @elecpower --- companion/src/modeledit/logicalswitches.cpp | 15 +++------------ radio/src/gui/128x64/model_logical_switches.cpp | 12 +++++++++++- radio/src/gui/212x64/model_logical_switches.cpp | 8 ++++---- radio/src/gui/480x272/model_logical_switches.cpp | 8 ++++---- 4 files changed, 22 insertions(+), 21 deletions(-) diff --git a/companion/src/modeledit/logicalswitches.cpp b/companion/src/modeledit/logicalswitches.cpp index 187e93e81..0e81ae84e 100644 --- a/companion/src/modeledit/logicalswitches.cpp +++ b/companion/src/modeledit/logicalswitches.cpp @@ -25,7 +25,7 @@ LogicalSwitchesPanel::LogicalSwitchesPanel(QWidget * parent, ModelData & model, ModelPanel(parent, model, generalSettings, firmware), selectedSwitch(0) { - Stopwatch s1("LogicalSwitchesPanel"); + Stopwatch s1("LogicalSwitchesPanel"); int channelsMax = model.getChannelsMax(true); @@ -213,23 +213,14 @@ void LogicalSwitchesPanel::edited() CSFunctionFamily newFuncFamily = model->logicalSw[i].getFunctionFamily(); if (oldFuncFamily != newFuncFamily) { + model->logicalSw[i].clear(); + model->logicalSw[i].func = csw[i]->itemData(csw[i]->currentIndex()).toInt(); if (newFuncFamily == LS_FAMILY_TIMER) { model->logicalSw[i].val1 = -119; model->logicalSw[i].val2 = -119; } else if (newFuncFamily == LS_FAMILY_EDGE) { - model->logicalSw[i].val1 = 0; model->logicalSw[i].val2 = -129; - model->logicalSw[i].val3 = 0; - } - else if (newFuncFamily == LS_FAMILY_STICKY) { - model->logicalSw[i].val1 = 0; - model->logicalSw[i].val2 = 0; - model->logicalSw[i].delay = 0; - } - else { - model->logicalSw[i].val1 = 0; - model->logicalSw[i].val2 = 0; } setSwitchWidgetVisibility(i); } diff --git a/radio/src/gui/128x64/model_logical_switches.cpp b/radio/src/gui/128x64/model_logical_switches.cpp index e638450aa..35d558f8e 100644 --- a/radio/src/gui/128x64/model_logical_switches.cpp +++ b/radio/src/gui/128x64/model_logical_switches.cpp @@ -445,7 +445,17 @@ void menuModelLogicalSwitches(event_t event) CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, LS_FUNC_MAX); uint8_t new_cstate = lswFamily(cs->func); if (cstate != new_cstate) { - cs->v1 = cs->v2 = (new_cstate==LS_FAMILY_TIMER ? -119/*1.0*/ : 0); +#if defined(CPUARM) + unsigned int save_func = cs->func; + memset(cs, 0, sizeof(LogicalSwitchData)); + cs->func = save_func; +#else + cs->v1 = cs->v2 = 0; + cs->andsw = 0; +#endif + if (new_cstate == LS_FAMILY_TIMER) { + cs->v1 = cs->v2 = -119; // 1.0 + } } break; } diff --git a/radio/src/gui/212x64/model_logical_switches.cpp b/radio/src/gui/212x64/model_logical_switches.cpp index 564d8b592..fa291bd98 100644 --- a/radio/src/gui/212x64/model_logical_switches.cpp +++ b/radio/src/gui/212x64/model_logical_switches.cpp @@ -212,14 +212,14 @@ void menuModelLogicalSwitches(event_t event) cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL, isLogicalSwitchFunctionAvailable); uint8_t new_cstate = lswFamily(cs->func); if (cstate != new_cstate) { + unsigned int save_func = cs->func; + memset(cs, 0, sizeof(LogicalSwitchData)); + cs->func = save_func; if (new_cstate == LS_FAMILY_TIMER) { cs->v1 = cs->v2 = -119; } else if (new_cstate == LS_FAMILY_EDGE) { - cs->v1 = 0; cs->v2 = -129; cs->v3 = 0; - } - else { - cs->v1 = cs->v2 = 0; + cs->v2 = -129; } } break; diff --git a/radio/src/gui/480x272/model_logical_switches.cpp b/radio/src/gui/480x272/model_logical_switches.cpp index 1f0e10e52..6738f58f8 100644 --- a/radio/src/gui/480x272/model_logical_switches.cpp +++ b/radio/src/gui/480x272/model_logical_switches.cpp @@ -204,14 +204,14 @@ bool menuModelLogicalSwitches(event_t event) cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL, isLogicalSwitchFunctionAvailable); uint8_t new_cstate = lswFamily(cs->func); if (cstate != new_cstate) { + unsigned int save_func = cs->func; + memset(cs, 0, sizeof(LogicalSwitchData)); + cs->func = save_func; if (new_cstate == LS_FAMILY_TIMER) { cs->v1 = cs->v2 = -119; } else if (new_cstate == LS_FAMILY_EDGE) { - cs->v1 = 0; cs->v2 = -129; cs->v3 = 0; - } - else { - cs->v1 = cs->v2 = 0; + cs->v2 = -129; } } break;