Fixes #1440 - Logical switches state not reset after model load:

* logical switches reset not called anymore when user selects "Reset Flight", but only after model load
* logical switches reset now includes a reset of switches state (set to false)
This commit is contained in:
Damjan Adamic
2014-07-05 19:11:16 +02:00
parent 7d85d40f68
commit 30a68cf170
5 changed files with 40 additions and 5 deletions
+1
View File
@@ -386,6 +386,7 @@ void eeLoadModel(uint8_t id)
}
flightReset();
logicalSwitchesReset();
if (pulsesStarted()) {
checkAll();
+1
View File
@@ -970,6 +970,7 @@ void eeLoadModel(uint8_t id)
}
flightReset();
logicalSwitchesReset();
if (pulsesStarted()) {
checkAll();
-5
View File
@@ -1625,11 +1625,6 @@ void flightReset()
telemetryReset();
#endif
logicalSwitchesReset();
#if !defined(CPUARM)
s_last_switch_value = 0;
#endif
s_mixer_first_run_done = false;
START_SILENCE_PERIOD();
+6
View File
@@ -801,6 +801,12 @@ int16_t lswTimerValue(delayval_t val)
void logicalSwitchesReset()
{
#if defined(CPUARM)
memset(lswFm, 0, sizeof(lswFm));
#else
s_last_switch_value = 0;
#endif
#if defined(CPUARM)
for (uint8_t fm=0; fm<MAX_FLIGHT_MODES; fm++) {
#endif
+32
View File
@@ -389,6 +389,38 @@ TEST(getSwitch, circularCSW)
EXPECT_EQ(getSwitch(-SWSRC_SW2), true);
}
#if defined(CPUARM)
TEST(getSwitch, OldTypeStickyCSW)
{
MODEL_RESET();
MIXER_RESET();
g_model.logicalSw[0] = { SWSRC_SA0, 0, 0, LS_FUNC_AND };
g_model.logicalSw[1] = { SWSRC_SW1, SWSRC_SW2, 0, LS_FUNC_OR };
evalLogicalSwitches();
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
EXPECT_EQ(getSwitch(SWSRC_SW2), false);
// now trigger SA0, both switches should become true
simuSetSwitch(0, -1);
evalLogicalSwitches();
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
EXPECT_EQ(getSwitch(SWSRC_SW2), true);
// now release SA0 and SW2 should stay true
simuSetSwitch(0, 0);
evalLogicalSwitches();
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
EXPECT_EQ(getSwitch(SWSRC_SW2), true);
// now reset logical switches
logicalSwitchesReset();
evalLogicalSwitches();
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
EXPECT_EQ(getSwitch(SWSRC_SW2), false);
}
#endif // #if defined(CPUARM)
TEST(getSwitch, nullSW)
{
MODEL_RESET();