Bsongis/issue 5338 (#5344)

Fixes #5338
This commit is contained in:
Bertrand Songis
2017-11-12 14:15:19 +01:00
committed by GitHub
parent b8b67ba864
commit 9d7dab724b
5 changed files with 56 additions and 51 deletions
+1 -1
View File
@@ -151,10 +151,10 @@ const SwitchInfo Boards::getSwitchInfo(Board::Type board, unsigned index)
}
else {
const Board::SwitchInfo switches[] = {
{SWITCH_3POS, "3POS"},
{SWITCH_2POS, "THR"},
{SWITCH_2POS, "RUD"},
{SWITCH_2POS, "ELE"},
{SWITCH_3POS, "3POS"},
{SWITCH_2POS, "AIL"},
{SWITCH_2POS, "GEA"},
{SWITCH_TOGGLE, "TRN"}
+17 -17
View File
@@ -308,40 +308,40 @@ void simuSetSwitch(uint8_t swtch, int8_t state)
SWITCH_3_CASE(17, SWITCHES_GPIO_REG_R_L, SWITCHES_GPIO_REG_R_H, SWITCHES_GPIO_PIN_R_L, SWITCHES_GPIO_PIN_R_H)
#endif
#elif defined(PCBSKY9X)
SWITCH_CASE(0, PIOC->PIO_PDSR, 1<<20)
SWITCH_CASE(1, PIOA->PIO_PDSR, 1<<15)
SWITCH_CASE(2, PIOC->PIO_PDSR, 1<<31)
SWITCH_3_CASE(3, PIOC->PIO_PDSR, PIOC->PIO_PDSR, 0x00004000, 0x00000800)
SWITCH_3_CASE(0, PIOC->PIO_PDSR, PIOC->PIO_PDSR, 0x00004000, 0x00000800)
SWITCH_CASE(1, PIOC->PIO_PDSR, 1<<20)
SWITCH_CASE(2, PIOA->PIO_PDSR, 1<<15)
SWITCH_CASE(3, PIOC->PIO_PDSR, 1<<31)
SWITCH_CASE(4, PIOA->PIO_PDSR, 1<<2)
SWITCH_CASE(5, PIOC->PIO_PDSR, 1<<16)
SWITCH_CASE(6, PIOC->PIO_PDSR, 1<<8)
#elif defined(PCBGRUVIN9X)
SWITCH_CASE(0, ping, 1<<INP_G_ThrCt)
SWITCH_CASE(1, ping, 1<<INP_G_RuddDR)
SWITCH_CASE(2, pinc, 1<<INP_C_ElevDR)
SWITCH_3_CASE(3, ping, pinb, (1<<INP_G_ID1), (1<<INP_B_ID2))
SWITCH_3_CASE(0, ping, pinb, (1<<INP_G_ID1), (1<<INP_B_ID2))
SWITCH_CASE(1, ping, 1<<INP_G_ThrCt)
SWITCH_CASE(2, ping, 1<<INP_G_RuddDR)
SWITCH_CASE(3, pinc, 1<<INP_C_ElevDR)
SWITCH_CASE(4, pinc, 1<<INP_C_AileDR)
SWITCH_CASE(5, ping, 1<<INP_G_Gear)
SWITCH_CASE(6, pinb, 1<<INP_B_Trainer)
#elif defined(PCBMEGA2560)
SWITCH_CASE(0, ping, 1<<INP_G_ThrCt)
SWITCH_CASE(1, ping, 1<<INP_G_RuddDR)
SWITCH_CASE(2, pinc, 1<<INP_L_ElevDR)
SWITCH_3_CASE(3, pinc, pinc, (1<<INP_C_ID1), (1<<INP_C_ID2))
SWITCH_3_CASE(0, pinc, pinc, (1<<INP_C_ID1), (1<<INP_C_ID2))
SWITCH_CASE(1, ping, 1<<INP_G_ThrCt)
SWITCH_CASE(2, ping, 1<<INP_G_RuddDR)
SWITCH_CASE(3, pinc, 1<<INP_L_ElevDR)
SWITCH_CASE(4, pinc, 1<<INP_C_AileDR)
SWITCH_CASE(5, ping, 1<<INP_G_Gear)
SWITCH_CASE(6, pinb, 1<<INP_L_Trainer)
#else // PCB9X
SWITCH_3_CASE(0, ping, pine, (1<<INP_G_ID1), (1<<INP_E_ID2))
#if defined(TELEMETRY_JETI) || defined(TELEMETRY_FRSKY) || defined(TELEMETRY_NMEA) || defined(TELEMETRY_ARDUPILOT) || defined(TELEMETRY_MAVLINK)
SWITCH_CASE(0, pinc, 1<<INP_C_ThrCt)
SWITCH_CASE(1, pinc, 1<<INP_C_ThrCt)
SWITCH_CASE(4, pinc, 1<<INP_C_AileDR)
#else
SWITCH_CASE(0, pine, 1<<INP_E_ThrCt)
SWITCH_CASE(1, pine, 1<<INP_E_ThrCt)
SWITCH_CASE(4, pine, 1<<INP_E_AileDR)
#endif
SWITCH_3_CASE(3, ping, pine, (1<<INP_G_ID1), (1<<INP_E_ID2))
SWITCH_CASE(1, ping, 1<<INP_G_RuddDR)
SWITCH_CASE(2, pine, 1<<INP_E_ElevDR)
SWITCH_CASE(2, ping, 1<<INP_G_RuddDR)
SWITCH_CASE(3, pine, 1<<INP_E_ElevDR)
SWITCH_CASE(5, pine, 1<<INP_E_Gear)
SWITCH_CASE(6, pine, 1<<INP_E_Trainer)
#endif
+3
View File
@@ -49,6 +49,9 @@ inline void SYSTEM_RESET()
#endif
generalDefault();
g_eeGeneral.templateSetup = 0;
for (int i=0; i<NUM_SWITCHES; i++) {
simuSetSwitch(i, -1);
}
}
inline void MODEL_RESET()
+32 -30
View File
@@ -444,15 +444,15 @@ TEST_F(MixerTest, R2029Comment)
g_model.mixData[1].swtch = SWSRC_THR;
g_model.mixData[1].weight = 100;
anaInValues[THR_STICK] = 1024;
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], 0);
EXPECT_EQ(chans[1], CHANNEL_MAX);
simuSetSwitch(0, 0);
simuSetSwitch(1, 0);
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], 0);
EXPECT_EQ(chans[1], 0);
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], 0);
EXPECT_EQ(chans[1], CHANNEL_MAX);
@@ -473,7 +473,7 @@ TEST_F(MixerTest, Cascaded3Channels)
g_model.mixData[2].destCh = 2;
g_model.mixData[2].srcRaw = MIXSRC_THR;
g_model.mixData[2].weight = 100;
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], CHANNEL_MAX);
EXPECT_EQ(chans[1], CHANNEL_MAX);
@@ -488,7 +488,7 @@ TEST_F(MixerTest, CascadedOrderedChannels)
g_model.mixData[1].destCh = 1;
g_model.mixData[1].srcRaw = MIXSRC_CH1;
g_model.mixData[1].weight = 100;
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], CHANNEL_MAX);
EXPECT_EQ(chans[1], CHANNEL_MAX);
@@ -512,14 +512,14 @@ TEST_F(MixerTest, Cascaded5Channels)
g_model.mixData[4].srcRaw = MIXSRC_THR;
g_model.mixData[4].weight = 100;
for (uint8_t i=0; i<10; i++) {
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
evalMixes(1);
EXPECT_EQ(chans[0], CHANNEL_MAX);
EXPECT_EQ(chans[1], CHANNEL_MAX);
EXPECT_EQ(chans[2], CHANNEL_MAX);
EXPECT_EQ(chans[3], CHANNEL_MAX);
EXPECT_EQ(chans[4], CHANNEL_MAX);
simuSetSwitch(0, 0);
simuSetSwitch(1, 0);
evalMixes(1);
EXPECT_EQ(chans[0], -CHANNEL_MAX);
EXPECT_EQ(chans[1], -CHANNEL_MAX);
@@ -616,10 +616,10 @@ TEST_F(MixerTest, SlowOnSwitch)
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], 0);
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
CHECK_SLOW_MOVEMENT(0, +1, 250);
simuSetSwitch(0, -1);
simuSetSwitch(1, -1);
CHECK_SLOW_MOVEMENT(0, -1, 250);
}
@@ -633,20 +633,20 @@ TEST_F(MixerTest, SlowUpOnSwitch)
g_model.mixData[0].speedUp = SLOW_STEP*5;
g_model.mixData[0].speedDown = 0;
simuSetSwitch(0, 0);
simuSetSwitch(1, 0);
evalFlightModeMixes(e_perout_mode_normal, 0);
s_mixer_first_run_done = true;
EXPECT_EQ(chans[0], 0);
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
CHECK_SLOW_MOVEMENT(0, +1, 250);
simuSetSwitch(0, 0);
simuSetSwitch(1, 0);
evalFlightModeMixes(e_perout_mode_normal, 1);
EXPECT_EQ(chans[0], 0);
lastAct = 0;
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
CHECK_SLOW_MOVEMENT(0, +1, 100);
}
#endif
@@ -694,11 +694,11 @@ TEST_F(MixerTest, SlowOnSwitchAndPhase)
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], 0);
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
mixerCurrentFlightMode = 0;
CHECK_SLOW_MOVEMENT(0, +1, 250);
simuSetSwitch(0, -1);
simuSetSwitch(1, -1);
mixerCurrentFlightMode = 1;
CHECK_SLOW_MOVEMENT(0, -1, 250);
}
@@ -709,24 +709,24 @@ TEST_F(MixerTest, SlowOnSwitchSource)
g_model.mixData[0].destCh = 0;
g_model.mixData[0].mltpx = MLTPX_ADD;
#if defined(PCBTARANIS) || defined(PCBHORUS)
g_eeGeneral.switchConfig = 0x03;
g_model.mixData[0].srcRaw = MIXSRC_SA;
int switch_index = 0;
#else
g_model.mixData[0].srcRaw = MIXSRC_THR;
int switch_index = 1;
#endif
g_model.mixData[0].weight = 100;
g_model.mixData[0].speedUp = SLOW_STEP*5;
g_model.mixData[0].speedDown = SLOW_STEP*5;
#if defined(PCBTARANIS) || defined(PCBHORUS)
g_eeGeneral.switchConfig = 0x03;
#endif
s_mixer_first_run_done = true;
simuSetSwitch(0, -1);
simuSetSwitch(switch_index, -1);
CHECK_SLOW_MOVEMENT(0, -1, 250);
EXPECT_EQ(chans[0], -CHANNEL_MAX);
simuSetSwitch(0, 1);
simuSetSwitch(switch_index, 1);
CHECK_SLOW_MOVEMENT(0, +1, 500);
}
@@ -751,8 +751,10 @@ TEST_F(MixerTest, DelayOnSwitch)
g_model.mixData[0].weight = 100;
#if defined(PCBTARANIS) || defined(PCBHORUS)
g_model.mixData[0].swtch = SWSRC_SA2;
int switch_index = 0;
#else
g_model.mixData[0].swtch = SWSRC_THR;
int switch_index = 1;
#endif
g_model.mixData[0].delayUp = DELAY_STEP*5;
g_model.mixData[0].delayDown = DELAY_STEP*5;
@@ -760,13 +762,13 @@ TEST_F(MixerTest, DelayOnSwitch)
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], 0);
simuSetSwitch(0, 1);
simuSetSwitch(switch_index, 1);
CHECK_DELAY(0, 500);
evalFlightModeMixes(e_perout_mode_normal, 1);
EXPECT_EQ(chans[0], CHANNEL_MAX);
simuSetSwitch(0, 0);
simuSetSwitch(switch_index, 0);
CHECK_DELAY(0, 500);
evalFlightModeMixes(e_perout_mode_normal, 1);
@@ -786,16 +788,16 @@ TEST_F(MixerTest, SlowAndDelayOnReplace3POSSource)
s_mixer_first_run_done = true;
simuSetSwitch(3, -1);
simuSetSwitch(0, -1);
CHECK_SLOW_MOVEMENT(0, -1, 250);
EXPECT_EQ(chans[0], -CHANNEL_MAX);
simuSetSwitch(3, 0);
simuSetSwitch(0, 0);
CHECK_DELAY(0, 500);
CHECK_SLOW_MOVEMENT(0, +1, 250/*half course*/);
EXPECT_EQ(chans[0], 0);
simuSetSwitch(3, 1);
simuSetSwitch(0, 1);
CHECK_DELAY(0, 500);
CHECK_SLOW_MOVEMENT(0, +1, 250);
}
@@ -815,16 +817,16 @@ TEST_F(MixerTest, SlowOnSwitchReplace)
g_model.mixData[1].swtch = SWSRC_THR;
g_model.mixData[1].speedDown = SLOW_STEP*5;
simuSetSwitch(0, 0);
simuSetSwitch(1, 0);
evalFlightModeMixes(e_perout_mode_normal, 1);
EXPECT_EQ(chans[0], CHANNEL_MAX/2);
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
evalFlightModeMixes(e_perout_mode_normal, 1);
// slow is not applied, but it's better than the first mix not applied at all!
EXPECT_EQ(chans[0], CHANNEL_MAX);
simuSetSwitch(0, 0);
simuSetSwitch(1, 0);
evalFlightModeMixes(e_perout_mode_normal, 1);
// slow is not applied, but it's better than the first mix not applied at all!
EXPECT_EQ(chans[0], CHANNEL_MAX/2);
@@ -845,10 +847,10 @@ TEST_F(MixerTest, NoTrimOnInactiveMix)
s_mixer_first_run_done = true;
simuSetSwitch(0, 1);
simuSetSwitch(1, 1);
CHECK_SLOW_MOVEMENT(0, 1, 100);
simuSetSwitch(0, -1);
simuSetSwitch(1, -1);
CHECK_SLOW_MOVEMENT(0, -1, 100);
}
#endif
+3 -3
View File
@@ -108,8 +108,8 @@ TEST(getSwitch, recursiveSW)
g_model.logicalSw[0] = { SWSRC_RUD, -SWSRC_SW2, LS_FUNC_OR };
g_model.logicalSw[1] = { SWSRC_ELE, -SWSRC_SW1, LS_FUNC_OR };
simuSetSwitch(1, 0); // RUD 0
simuSetSwitch(2, 0); // ELE 0
simuSetSwitch(2, 0); // RUD 0
simuSetSwitch(3, 0); // ELE 0
evalLogicalSwitches();
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
EXPECT_EQ(getSwitch(SWSRC_SW2), true);
@@ -119,7 +119,7 @@ TEST(getSwitch, recursiveSW)
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
EXPECT_EQ(getSwitch(SWSRC_SW2), true);
simuSetSwitch(1, 1); // RUD 1
simuSetSwitch(2, 1); // RUD 1
LS_RECURSIVE_EVALUATION_RESET();
evalLogicalSwitches();
EXPECT_EQ(getSwitch(SWSRC_SW1), true);