[all] Mixer bugs fixed (slow / delays)
[stock] Flash saving [stock] PWM backlight fix [stock] NAVIGATION=STICKS pulled from er9x, thanks Mike! [Taranis] Telemetry logs in DEBUG mode correctly opened / closed (not tested)
This commit is contained in:
+64
-55
@@ -46,7 +46,10 @@ void doMixerCalculations();
|
||||
|
||||
#define MIXER_RESET() \
|
||||
memset(channelOutputs, 0, sizeof(channelOutputs)); \
|
||||
memset(ex_chans, 0, sizeof(ex_chans))
|
||||
memset(ex_chans, 0, sizeof(ex_chans)); \
|
||||
memset(act, 0, sizeof(act)); \
|
||||
memset(swOn, 0, sizeof(swOn)); \
|
||||
int32_t lastAct = 0; lastAct = lastAct; /* to avoid a warning */
|
||||
|
||||
uint16_t anaInValues[NUM_STICKS+NUM_POTS] = { 0 };
|
||||
uint16_t anaIn(uint8_t chan)
|
||||
@@ -282,8 +285,8 @@ TEST(FrSky, dateNtime)
|
||||
TEST(getSwitch, undefCSW)
|
||||
{
|
||||
MODEL_RESET();
|
||||
EXPECT_EQ(getSwitch(MAX_PSWITCH, 0), false);
|
||||
EXPECT_EQ(getSwitch(-MAX_PSWITCH, 0), true); // no good answer there!
|
||||
EXPECT_EQ(getSwitch(MAX_PSWITCH), false);
|
||||
EXPECT_EQ(getSwitch(-MAX_PSWITCH), true); // no good answer there!
|
||||
}
|
||||
|
||||
TEST(getSwitch, circularCSW)
|
||||
@@ -291,18 +294,16 @@ TEST(getSwitch, circularCSW)
|
||||
MODEL_RESET();
|
||||
g_model.customSw[0] = { MAX_SWITCH-NUM_CSW, MAX_SWITCH-NUM_CSW, CS_OR };
|
||||
g_model.customSw[1] = { MAX_SWITCH-NUM_CSW, MAX_SWITCH-NUM_CSW, CS_AND };
|
||||
EXPECT_EQ(getSwitch(MAX_SWITCH-NUM_CSW, 0), false);
|
||||
EXPECT_EQ(getSwitch(-(MAX_SWITCH-NUM_CSW), 0), true);
|
||||
EXPECT_EQ(getSwitch(1+MAX_SWITCH-NUM_CSW, 0), false);
|
||||
EXPECT_EQ(getSwitch(-(1+MAX_SWITCH-NUM_CSW), 0), true);
|
||||
EXPECT_EQ(getSwitch(MAX_SWITCH-NUM_CSW), false);
|
||||
EXPECT_EQ(getSwitch(-(MAX_SWITCH-NUM_CSW)), true);
|
||||
EXPECT_EQ(getSwitch(1+MAX_SWITCH-NUM_CSW), false);
|
||||
EXPECT_EQ(getSwitch(-(1+MAX_SWITCH-NUM_CSW)), true);
|
||||
}
|
||||
|
||||
TEST(getSwitch, nullSW)
|
||||
{
|
||||
MODEL_RESET();
|
||||
EXPECT_EQ(getSwitch(0, 0), false);
|
||||
EXPECT_EQ(getSwitch(0, true), true);
|
||||
EXPECT_EQ(getSwitch(0, 0), false);
|
||||
EXPECT_EQ(getSwitch(0), true);
|
||||
}
|
||||
|
||||
TEST(FlightModes, nullFadeOut_posFadeIn)
|
||||
@@ -465,6 +466,24 @@ TEST(Mixer, RecursiveAddChannel)
|
||||
EXPECT_EQ(chans[1], 0);
|
||||
}
|
||||
|
||||
#define CHECK_SLOW_MOVEMENT(channel, sign, duration) \
|
||||
do { \
|
||||
for (int i=1; i<=(duration); i++) { \
|
||||
perOut(e_perout_mode_normal, 1); \
|
||||
lastAct = lastAct + (sign) * (1<<19)/500; /* 100 on ARM */ \
|
||||
EXPECT_EQ(chans[(channel)], 256 * (lastAct >> 8)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define CHECK_DELAY(channel, duration) \
|
||||
do { \
|
||||
int32_t value = chans[(channel)]; \
|
||||
for (int i=1; i<=(duration); i++) { \
|
||||
perOut(e_perout_mode_normal, 1); \
|
||||
EXPECT_EQ(chans[(channel)], value); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
TEST(Mixer, SlowOnSwitch)
|
||||
{
|
||||
MODEL_RESET();
|
||||
@@ -481,19 +500,10 @@ TEST(Mixer, SlowOnSwitch)
|
||||
EXPECT_EQ(chans[0], 0);
|
||||
|
||||
simuSetSwitch(0, 1);
|
||||
int32_t lastAct = 0;
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct + (1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
||||
|
||||
simuSetSwitch(0, 0);
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct - (1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||
}
|
||||
|
||||
TEST(Mixer, SlowOnPhase)
|
||||
@@ -513,19 +523,10 @@ TEST(Mixer, SlowOnPhase)
|
||||
perOut(e_perout_mode_normal, 0);
|
||||
EXPECT_EQ(chans[0], 0);
|
||||
|
||||
int32_t lastAct = 0;
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct+(1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
||||
|
||||
s_perout_flight_phase = 1;
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct - (1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||
}
|
||||
|
||||
TEST(Mixer, SlowOnSwitchAndPhase)
|
||||
@@ -547,20 +548,11 @@ TEST(Mixer, SlowOnSwitchAndPhase)
|
||||
|
||||
simuSetSwitch(0, 1);
|
||||
s_perout_flight_phase = 0;
|
||||
int32_t lastAct = 0;
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct+(1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
||||
|
||||
simuSetSwitch(0, 0);
|
||||
s_perout_flight_phase = 1;
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct - (1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||
}
|
||||
|
||||
TEST(Mixer, SlowOnSwitchSource)
|
||||
@@ -575,21 +567,38 @@ TEST(Mixer, SlowOnSwitchSource)
|
||||
g_model.mixData[0].speedDown = 10;
|
||||
|
||||
simuSetSwitch(0, 0);
|
||||
int32_t lastAct = 0;
|
||||
for (int i=1; i<=250; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct - (1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
|
||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||
EXPECT_EQ(chans[0], -CHANNEL_MAX);
|
||||
|
||||
simuSetSwitch(0, 1);
|
||||
for (int i=1; i<=500; i++) {
|
||||
perOut(e_perout_mode_normal, 1);
|
||||
lastAct = lastAct + (1<<19)/500; /* 100 on ARM */
|
||||
EXPECT_EQ(chans[0], 256 * (lastAct >> 8));
|
||||
}
|
||||
CHECK_SLOW_MOVEMENT(0, +1, 500);
|
||||
}
|
||||
|
||||
TEST(Mixer, SlowAndDelayOnReplace3POSSource)
|
||||
{
|
||||
MODEL_RESET();
|
||||
MIXER_RESET();
|
||||
g_model.mixData[0].destCh = 0;
|
||||
g_model.mixData[0].mltpx = MLTPX_REP;
|
||||
g_model.mixData[0].srcRaw = MIXSRC_3POS;
|
||||
g_model.mixData[0].weight = 100;
|
||||
g_model.mixData[0].delayUp = 10;
|
||||
g_model.mixData[0].delayUp = 10;
|
||||
g_model.mixData[0].speedUp = 10;
|
||||
g_model.mixData[0].speedDown = 10;
|
||||
|
||||
simuSetSwitch(3, -1);
|
||||
CHECK_SLOW_MOVEMENT(0, -1, 250);
|
||||
EXPECT_EQ(chans[0], -CHANNEL_MAX);
|
||||
|
||||
simuSetSwitch(3, 0);
|
||||
CHECK_DELAY(0, 500);
|
||||
CHECK_SLOW_MOVEMENT(0, +1, 250/*half course*/);
|
||||
EXPECT_EQ(chans[0], 0);
|
||||
|
||||
simuSetSwitch(3, 1);
|
||||
CHECK_DELAY(0, 500);
|
||||
CHECK_SLOW_MOVEMENT(0, +1, 250);
|
||||
}
|
||||
|
||||
TEST(Curves, LinearIntpol)
|
||||
|
||||
Reference in New Issue
Block a user