mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 08:45:24 +03:00
Re #1443 - Reverting back d675ab1578
with some improvements:
* when telemetry is not streaming all logical switches that involve telemetry value evaluate to FALSE (same as before the change in above commit) * the duration and delay processing is now enabled for such logical switches (new functionality that was not present before above commit)
This commit is contained in:
parent
ee077a06e6
commit
b4e816b784
2 changed files with 101 additions and 17 deletions
|
@ -242,8 +242,8 @@ bool getLogicalSwitch(uint8_t idx)
|
|||
// Telemetry
|
||||
if (v1 >= MIXSRC_FIRST_TELEM) {
|
||||
if ((!TELEMETRY_STREAMING() && v1 >= MIXSRC_FIRST_TELEM+TELEM_FIRST_STREAMED_VALUE-1) || IS_FAI_FORBIDDEN(v1-1)) {
|
||||
x = 0; //replace actual value with zero and continue processing (needed for duraton and delay)
|
||||
//we could also return actual stored values (except when FAI FORBIDDEN, then we would return 0)
|
||||
result = false;
|
||||
goto DurationAndDelayProcessing;
|
||||
}
|
||||
|
||||
y = convertLswTelemValue(ls);
|
||||
|
@ -334,6 +334,10 @@ bool getLogicalSwitch(uint8_t idx)
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(FRSKY)
|
||||
DurationAndDelayProcessing:
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
if (ls->delay || ls->duration) {
|
||||
LogicalSwitchContext &context = lswFm[mixerCurrentFlightMode].lsw[idx];
|
||||
|
|
|
@ -431,7 +431,7 @@ TEST(getSwitch, nullSW)
|
|||
|
||||
|
||||
#if defined(PCBTARANIS) && defined(FRSKY)
|
||||
TEST(getSwitch, TelemetryValueWithDelay)
|
||||
TEST(getSwitch, VfasWithDelay)
|
||||
{
|
||||
MODEL_RESET();
|
||||
MIXER_RESET();
|
||||
|
@ -446,10 +446,10 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
|||
g_model.logicalSw[0] = {-40, 96, 0, 4, 5, 0, 0};
|
||||
frskyData.hub.vfas = 150; //unit is 100mV
|
||||
|
||||
//telemetry streaming is FALSE, so L1 should be FALSE no matter what value Vfas has
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
@ -467,21 +467,25 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
|||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
//every logicalSwitchesTimerTick() represents 100ms
|
||||
//so now after 5 ticks we should have a TRUE value
|
||||
//so now after 5 ticks we should still have a FALSE value
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
//now turn on telemetry
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||
frskyData.rssi[0].value = 50;
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), true);
|
||||
|
||||
//vfas is 15.0V so L1 should become FALSE
|
||||
//vfas is 15.0V so L1 should still be FALSE
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
|
@ -509,26 +513,57 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
|||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
//increase vfas
|
||||
frskyData.hub.vfas = 195;
|
||||
evalLogicalSwitches();
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
//now stop telemetry, L1 should become TRUE
|
||||
//now stop telemetry, L1 should become FALSE immediatelly
|
||||
frskyData.rssi[0].value = 0;
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||
evalLogicalSwitches();
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
}
|
||||
|
||||
TEST(getSwitch, RssiWithDuration)
|
||||
{
|
||||
MODEL_RESET();
|
||||
MIXER_RESET();
|
||||
memclear(&frskyData, sizeof(frskyData));
|
||||
/*
|
||||
Test for logical switch:
|
||||
L1 RSSI > 10 Duration (0.5s)
|
||||
|
||||
(gdb) print Open9xX9D::g_model.logicalSw[0]
|
||||
$1 = {v1 = -56 '\310', v2 = 10, v3 = 0, func = 3 '\003', delay = 0 '\000', duration = 5 '\005', andsw = 0 '\000'}
|
||||
*/
|
||||
g_model.logicalSw[0] = {-56, 10, 0, 3, 0, 5, 0};
|
||||
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||
|
||||
evalLogicalSwitches();
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
//now set RSSI to 5, L1 should still be FALSE
|
||||
frskyData.rssi[0].value = 5;
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
|
@ -538,14 +573,59 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
|||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
//now set RSSI to 100, L1 should become TRUE for 0.5s
|
||||
frskyData.rssi[0].value = 100;
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
//repeat telemetry streaming OFF and ON to test for duration processing
|
||||
frskyData.rssi[0].value = 0;
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
|
||||
//now set RSSI to 100, L1 should become TRUE for 0.5s
|
||||
frskyData.rssi[0].value = 100;
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(TELEMETRY_STREAMING(), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
logicalSwitchesTimerTick();
|
||||
evalLogicalSwitches();
|
||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||
}
|
||||
#endif // #if defined(PCBTARANIS) && defined(FRSKY)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue