mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 08:15:30 +03:00
Merge pull request #5851 from robertlacroix/graveyard
Add Paralyze mode support
This commit is contained in:
commit
ea8432b941
9 changed files with 164 additions and 4 deletions
|
@ -28,6 +28,7 @@ alignsensor_unittest_SRC := \
|
|||
|
||||
arming_prevention_unittest_SRC := \
|
||||
$(USER_DIR)/fc/fc_core.c \
|
||||
$(USER_DIR)/fc/fc_dispatch.c \
|
||||
$(USER_DIR)/fc/rc_controls.c \
|
||||
$(USER_DIR)/fc/rc_modes.c \
|
||||
$(USER_DIR)/fc/runtime_config.c \
|
||||
|
|
|
@ -609,6 +609,123 @@ TEST(ArmingPreventionTest, WhenUsingSwitched3DModeThenNormalThrottleArmingCondit
|
|||
EXPECT_EQ(0, getArmingDisableFlags());
|
||||
}
|
||||
|
||||
TEST(ArmingPreventionTest, Paralyze)
|
||||
{
|
||||
// given
|
||||
simulationFeatureFlags = 0;
|
||||
simulationTime = 30e6; // 30 seconds after boot
|
||||
gyroCalibDone = true;
|
||||
|
||||
// and
|
||||
modeActivationConditionsMutable(0)->auxChannelIndex = 0;
|
||||
modeActivationConditionsMutable(0)->modeId = BOXARM;
|
||||
modeActivationConditionsMutable(0)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||
modeActivationConditionsMutable(0)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||
modeActivationConditionsMutable(1)->auxChannelIndex = 1;
|
||||
modeActivationConditionsMutable(1)->modeId = BOXPARALYZE;
|
||||
modeActivationConditionsMutable(1)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||
modeActivationConditionsMutable(1)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||
modeActivationConditionsMutable(2)->auxChannelIndex = 2;
|
||||
modeActivationConditionsMutable(2)->modeId = BOXBEEPERON;
|
||||
modeActivationConditionsMutable(2)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||
modeActivationConditionsMutable(2)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||
modeActivationConditionsMutable(3)->auxChannelIndex = 3;
|
||||
modeActivationConditionsMutable(3)->modeId = BOXVTXPITMODE;
|
||||
modeActivationConditionsMutable(3)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||
modeActivationConditionsMutable(3)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||
useRcControlsConfig(NULL);
|
||||
|
||||
// and
|
||||
rxConfigMutable()->mincheck = 1050;
|
||||
|
||||
// given
|
||||
rcData[THROTTLE] = 1000;
|
||||
rcData[AUX1] = 1000;
|
||||
rcData[AUX2] = 1000;
|
||||
rcData[AUX3] = 1000;
|
||||
rcData[AUX4] = 1000;
|
||||
ENABLE_STATE(SMALL_ANGLE);
|
||||
|
||||
// when
|
||||
updateActivatedModes();
|
||||
updateArmingStatus();
|
||||
|
||||
// expect
|
||||
EXPECT_FALSE(ARMING_FLAG(ARMED));
|
||||
EXPECT_FALSE(isArmingDisabled());
|
||||
EXPECT_EQ(0, getArmingDisableFlags());
|
||||
|
||||
// given
|
||||
// arm
|
||||
rcData[AUX1] = 1800;
|
||||
|
||||
// when
|
||||
tryArm();
|
||||
updateActivatedModes();
|
||||
updateArmingStatus();
|
||||
|
||||
// expect
|
||||
EXPECT_TRUE(ARMING_FLAG(ARMED));
|
||||
EXPECT_FALSE(isArmingDisabled());
|
||||
EXPECT_EQ(0, getArmingDisableFlags());
|
||||
|
||||
// given
|
||||
// disarm
|
||||
rcData[AUX1] = 1000;
|
||||
|
||||
// when
|
||||
disarm();
|
||||
updateActivatedModes();
|
||||
updateArmingStatus();
|
||||
|
||||
// expect
|
||||
EXPECT_FALSE(ARMING_FLAG(ARMED));
|
||||
EXPECT_FALSE(isArmingDisabled());
|
||||
EXPECT_EQ(0, getArmingDisableFlags());
|
||||
|
||||
// given
|
||||
// paraylze and enter pit mode
|
||||
rcData[AUX2] = 1800;
|
||||
rcData[AUX4] = 1800;
|
||||
|
||||
// when
|
||||
updateActivatedModes();
|
||||
updateArmingStatus();
|
||||
|
||||
// expect
|
||||
EXPECT_TRUE(isArmingDisabled());
|
||||
EXPECT_EQ(ARMING_DISABLED_PARALYZE, getArmingDisableFlags());
|
||||
EXPECT_TRUE(IS_RC_MODE_ACTIVE(BOXVTXPITMODE));
|
||||
EXPECT_FALSE(IS_RC_MODE_ACTIVE(BOXBEEPERON));
|
||||
|
||||
// and
|
||||
preventModeChanges();
|
||||
|
||||
// given
|
||||
// Try exiting pit mode and enable beeper
|
||||
rcData[AUX4] = 1000;
|
||||
rcData[AUX3] = 1800;
|
||||
|
||||
// when
|
||||
updateActivatedModes();
|
||||
|
||||
// expect
|
||||
EXPECT_TRUE(IS_RC_MODE_ACTIVE(BOXVTXPITMODE));
|
||||
EXPECT_TRUE(IS_RC_MODE_ACTIVE(BOXBEEPERON));
|
||||
|
||||
// given
|
||||
// exit paralyze mode and ensure arming is still disabled
|
||||
rcData[AUX2] = 1000;
|
||||
|
||||
// when
|
||||
updateActivatedModes();
|
||||
updateArmingStatus();
|
||||
|
||||
// expect
|
||||
EXPECT_TRUE(isArmingDisabled());
|
||||
EXPECT_EQ(ARMING_DISABLED_PARALYZE, getArmingDisableFlags());
|
||||
}
|
||||
|
||||
// STUBS
|
||||
extern "C" {
|
||||
uint32_t micros(void) { return simulationTime; }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue