Merge pull request #1455 from opentx/projectkk2glider/issue_1440

Fixes #1440 - Logical switches state not reset after model load
This commit is contained in:
Bertrand Songis
2014-07-05 19:22:42 +02:00
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(PCBTARANIS)
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(PCBTARANIS)
TEST(getSwitch, nullSW)
{
MODEL_RESET();