mirror of
https://github.com/opentx/opentx.git
synced 2025-07-26 01:35:21 +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
|
// Telemetry
|
||||||
if (v1 >= MIXSRC_FIRST_TELEM) {
|
if (v1 >= MIXSRC_FIRST_TELEM) {
|
||||||
if ((!TELEMETRY_STREAMING() && v1 >= MIXSRC_FIRST_TELEM+TELEM_FIRST_STREAMED_VALUE-1) || IS_FAI_FORBIDDEN(v1-1)) {
|
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)
|
result = false;
|
||||||
//we could also return actual stored values (except when FAI FORBIDDEN, then we would return 0)
|
goto DurationAndDelayProcessing;
|
||||||
}
|
}
|
||||||
|
|
||||||
y = convertLswTelemValue(ls);
|
y = convertLswTelemValue(ls);
|
||||||
|
@ -334,6 +334,10 @@ bool getLogicalSwitch(uint8_t idx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(FRSKY)
|
||||||
|
DurationAndDelayProcessing:
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
if (ls->delay || ls->duration) {
|
if (ls->delay || ls->duration) {
|
||||||
LogicalSwitchContext &context = lswFm[mixerCurrentFlightMode].lsw[idx];
|
LogicalSwitchContext &context = lswFm[mixerCurrentFlightMode].lsw[idx];
|
||||||
|
|
|
@ -431,7 +431,7 @@ TEST(getSwitch, nullSW)
|
||||||
|
|
||||||
|
|
||||||
#if defined(PCBTARANIS) && defined(FRSKY)
|
#if defined(PCBTARANIS) && defined(FRSKY)
|
||||||
TEST(getSwitch, TelemetryValueWithDelay)
|
TEST(getSwitch, VfasWithDelay)
|
||||||
{
|
{
|
||||||
MODEL_RESET();
|
MODEL_RESET();
|
||||||
MIXER_RESET();
|
MIXER_RESET();
|
||||||
|
@ -446,10 +446,10 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
||||||
g_model.logicalSw[0] = {-40, 96, 0, 4, 5, 0, 0};
|
g_model.logicalSw[0] = {-40, 96, 0, 4, 5, 0, 0};
|
||||||
frskyData.hub.vfas = 150; //unit is 100mV
|
frskyData.hub.vfas = 150; //unit is 100mV
|
||||||
|
|
||||||
|
//telemetry streaming is FALSE, so L1 should be FALSE no matter what value Vfas has
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||||
|
|
||||||
|
|
||||||
logicalSwitchesTimerTick();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||||
|
@ -467,21 +467,25 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||||
|
|
||||||
//every logicalSwitchesTimerTick() represents 100ms
|
//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();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||||
|
|
||||||
//now turn on telemetry
|
//now turn on telemetry
|
||||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||||
frskyData.rssi[0].value = 50;
|
frskyData.rssi[0].value = 50;
|
||||||
EXPECT_EQ(TELEMETRY_STREAMING(), true);
|
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();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||||
logicalSwitchesTimerTick();
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
||||||
|
|
||||||
|
@ -509,26 +513,57 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||||
|
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
logicalSwitchesTimerTick();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
||||||
|
|
||||||
//increase vfas
|
|
||||||
frskyData.hub.vfas = 195;
|
|
||||||
evalLogicalSwitches();
|
|
||||||
|
|
||||||
logicalSwitchesTimerTick();
|
//now stop telemetry, L1 should become FALSE immediatelly
|
||||||
evalLogicalSwitches();
|
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
|
||||||
|
|
||||||
//now stop telemetry, L1 should become TRUE
|
|
||||||
frskyData.rssi[0].value = 0;
|
frskyData.rssi[0].value = 0;
|
||||||
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
EXPECT_EQ(TELEMETRY_STREAMING(), false);
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
|
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
|
logicalSwitchesTimerTick();
|
||||||
logicalSwitchesTimerTick();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
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();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
|
@ -538,14 +573,59 @@ TEST(getSwitch, TelemetryValueWithDelay)
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
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();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), false);
|
EXPECT_EQ(TELEMETRY_STREAMING(), true);
|
||||||
|
|
||||||
logicalSwitchesTimerTick();
|
logicalSwitchesTimerTick();
|
||||||
evalLogicalSwitches();
|
evalLogicalSwitches();
|
||||||
EXPECT_EQ(getSwitch(SWSRC_SW1), true);
|
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)
|
#endif // #if defined(PCBTARANIS) && defined(FRSKY)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue