[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:
bsongis@gmail.com
2013-05-31 19:33:20 +00:00
parent 7e7b1914ff
commit c9171c6d79
15 changed files with 311 additions and 169 deletions
+64 -55
View File
@@ -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)