mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 14:25:20 +03:00
Unified BOX3DDISABLE
and BOX3DONASWITCH
switches.
This commit is contained in:
parent
a301a0019e
commit
232fc4e8de
9 changed files with 23 additions and 23 deletions
|
@ -237,8 +237,8 @@ void updateArmingStatus(void)
|
||||||
|
|
||||||
/* Ignore ARMING_DISABLED_THROTTLE (once arm switch is on) if we are in 3D mode */
|
/* Ignore ARMING_DISABLED_THROTTLE (once arm switch is on) if we are in 3D mode */
|
||||||
bool ignoreThrottle = feature(FEATURE_3D)
|
bool ignoreThrottle = feature(FEATURE_3D)
|
||||||
&& !IS_RC_MODE_ACTIVE(BOX3DDISABLE)
|
&& !IS_RC_MODE_ACTIVE(BOX3D)
|
||||||
&& !isModeActivationConditionPresent(BOX3DONASWITCH)
|
&& !flight3DConfig()->switched_mode3d
|
||||||
&& !(getArmingDisableFlags() & ~(ARMING_DISABLED_ARM_SWITCH | ARMING_DISABLED_THROTTLE));
|
&& !(getArmingDisableFlags() & ~(ARMING_DISABLED_ARM_SWITCH | ARMING_DISABLED_THROTTLE));
|
||||||
|
|
||||||
#ifdef USE_RUNAWAY_TAKEOFF
|
#ifdef USE_RUNAWAY_TAKEOFF
|
||||||
|
@ -452,8 +452,8 @@ uint8_t calculateThrottlePercent(void)
|
||||||
{
|
{
|
||||||
uint8_t ret = 0;
|
uint8_t ret = 0;
|
||||||
if (feature(FEATURE_3D)
|
if (feature(FEATURE_3D)
|
||||||
&& !IS_RC_MODE_ACTIVE(BOX3DDISABLE)
|
&& !IS_RC_MODE_ACTIVE(BOX3D)
|
||||||
&& !isModeActivationConditionPresent(BOX3DONASWITCH)) {
|
&& !flight3DConfig()->switched_mode3d) {
|
||||||
|
|
||||||
if ((rcData[THROTTLE] >= PWM_RANGE_MAX) || (rcData[THROTTLE] <= PWM_RANGE_MIN)) {
|
if ((rcData[THROTTLE] >= PWM_RANGE_MAX) || (rcData[THROTTLE] <= PWM_RANGE_MIN)) {
|
||||||
ret = 100;
|
ret = 100;
|
||||||
|
|
|
@ -324,21 +324,20 @@ void updateRcCommands(void)
|
||||||
|
|
||||||
rcCommand[THROTTLE] = rcLookupThrottle(tmp);
|
rcCommand[THROTTLE] = rcLookupThrottle(tmp);
|
||||||
|
|
||||||
if (feature(FEATURE_3D) && IS_RC_MODE_ACTIVE(BOX3DDISABLE) && !failsafeIsActive()) {
|
if (feature(FEATURE_3D) && IS_RC_MODE_ACTIVE(BOX3D) && !failsafeIsActive()) {
|
||||||
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
||||||
rcCommand[THROTTLE] = rxConfig()->midrc + qMultiply(throttleScaler, PWM_RANGE_MAX - rxConfig()->midrc);
|
rcCommand[THROTTLE] = rxConfig()->midrc + qMultiply(throttleScaler, PWM_RANGE_MAX - rxConfig()->midrc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (feature(FEATURE_3D) && isModeActivationConditionPresent(BOX3DONASWITCH) && !failsafeIsActive()) {
|
if (feature(FEATURE_3D) && flight3DConfig()->switched_mode3d && !failsafeIsActive()) {
|
||||||
if (IS_RC_MODE_ACTIVE(BOX3DONASWITCH)) {
|
if (IS_RC_MODE_ACTIVE(BOX3D)) {
|
||||||
reverseMotors = true;
|
|
||||||
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
|
||||||
rcCommand[THROTTLE] = rxConfig()->midrc + qMultiply(throttleScaler, PWM_RANGE_MIN - rxConfig()->midrc);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
reverseMotors = false;
|
reverseMotors = false;
|
||||||
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
||||||
rcCommand[THROTTLE] = rxConfig()->midrc + qMultiply(throttleScaler, PWM_RANGE_MAX - rxConfig()->midrc);
|
rcCommand[THROTTLE] = rxConfig()->midrc + qMultiply(throttleScaler, PWM_RANGE_MAX - rxConfig()->midrc);
|
||||||
|
} else {
|
||||||
|
reverseMotors = true;
|
||||||
|
fix12_t throttleScaler = qConstruct(rcCommand[THROTTLE] - 1000, 1000);
|
||||||
|
rcCommand[THROTTLE] = rxConfig()->midrc + qMultiply(throttleScaler, PWM_RANGE_MIN - rxConfig()->midrc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (FLIGHT_MODE(HEADFREE_MODE)) {
|
if (FLIGHT_MODE(HEADFREE_MODE)) {
|
||||||
|
|
|
@ -91,7 +91,8 @@ PG_RESET_TEMPLATE(flight3DConfig_t, flight3DConfig,
|
||||||
.deadband3d_low = 1406,
|
.deadband3d_low = 1406,
|
||||||
.deadband3d_high = 1514,
|
.deadband3d_high = 1514,
|
||||||
.neutral3d = 1460,
|
.neutral3d = 1460,
|
||||||
.deadband3d_throttle = 50
|
.deadband3d_throttle = 50,
|
||||||
|
.switched_mode3d = false
|
||||||
);
|
);
|
||||||
|
|
||||||
bool isUsingSticksForArming(void)
|
bool isUsingSticksForArming(void)
|
||||||
|
@ -107,7 +108,7 @@ bool areSticksInApModePosition(uint16_t ap_mode)
|
||||||
throttleStatus_e calculateThrottleStatus(void)
|
throttleStatus_e calculateThrottleStatus(void)
|
||||||
{
|
{
|
||||||
if (feature(FEATURE_3D)) {
|
if (feature(FEATURE_3D)) {
|
||||||
if (IS_RC_MODE_ACTIVE(BOX3DDISABLE) || isModeActivationConditionPresent(BOX3DONASWITCH)) {
|
if (IS_RC_MODE_ACTIVE(BOX3D) || flight3DConfig()->switched_mode3d) {
|
||||||
if (rcData[THROTTLE] < rxConfig()->mincheck) {
|
if (rcData[THROTTLE] < rxConfig()->mincheck) {
|
||||||
return THROTTLE_LOW;
|
return THROTTLE_LOW;
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,6 +94,7 @@ typedef struct flight3DConfig_s {
|
||||||
uint16_t deadband3d_high; // max 3d value
|
uint16_t deadband3d_high; // max 3d value
|
||||||
uint16_t neutral3d; // center 3d value
|
uint16_t neutral3d; // center 3d value
|
||||||
uint16_t deadband3d_throttle; // default throttle deadband from MIDRC
|
uint16_t deadband3d_throttle; // default throttle deadband from MIDRC
|
||||||
|
uint8_t switched_mode3d; // enable '3D Switched Mode'
|
||||||
} flight3DConfig_t;
|
} flight3DConfig_t;
|
||||||
|
|
||||||
PG_DECLARE(flight3DConfig_t, flight3DConfig);
|
PG_DECLARE(flight3DConfig_t, flight3DConfig);
|
||||||
|
|
|
@ -56,7 +56,7 @@ typedef enum {
|
||||||
BOXSERVO3,
|
BOXSERVO3,
|
||||||
BOXBLACKBOX,
|
BOXBLACKBOX,
|
||||||
BOXAIRMODE,
|
BOXAIRMODE,
|
||||||
BOX3DDISABLE,
|
BOX3D,
|
||||||
BOXFPVANGLEMIX,
|
BOXFPVANGLEMIX,
|
||||||
BOXBLACKBOXERASE,
|
BOXBLACKBOXERASE,
|
||||||
BOXCAMERA1,
|
BOXCAMERA1,
|
||||||
|
@ -65,7 +65,6 @@ typedef enum {
|
||||||
BOXFLIPOVERAFTERCRASH,
|
BOXFLIPOVERAFTERCRASH,
|
||||||
BOXPREARM,
|
BOXPREARM,
|
||||||
BOXBEEPGPSCOUNT,
|
BOXBEEPGPSCOUNT,
|
||||||
BOX3DONASWITCH,
|
|
||||||
BOXVTXPITMODE,
|
BOXVTXPITMODE,
|
||||||
BOXUSER1,
|
BOXUSER1,
|
||||||
BOXUSER2,
|
BOXUSER2,
|
||||||
|
|
|
@ -577,7 +577,7 @@ static void calculateThrottleAndCurrentMotorEndpoints(timeUs_t currentTimeUs)
|
||||||
throttle = rcCommand[THROTTLE] - rcCommand3dDeadBandHigh;
|
throttle = rcCommand[THROTTLE] - rcCommand3dDeadBandHigh;
|
||||||
currentThrottleInputRange = rcCommandThrottleRange3dHigh;
|
currentThrottleInputRange = rcCommandThrottleRange3dHigh;
|
||||||
} else if ((rcThrottlePrevious <= rcCommand3dDeadBandLow &&
|
} else if ((rcThrottlePrevious <= rcCommand3dDeadBandLow &&
|
||||||
!isModeActivationConditionPresent(BOX3DONASWITCH)) ||
|
!flight3DConfigMutable()->switched_mode3d) ||
|
||||||
isMotorsReversed()) {
|
isMotorsReversed()) {
|
||||||
// INVERTED_TO_DEADBAND
|
// INVERTED_TO_DEADBAND
|
||||||
motorRangeMin = motorOutputLow;
|
motorRangeMin = motorOutputLow;
|
||||||
|
|
|
@ -73,7 +73,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = {
|
||||||
{ BOXBLACKBOX, "BLACKBOX", 26 },
|
{ BOXBLACKBOX, "BLACKBOX", 26 },
|
||||||
{ BOXFAILSAFE, "FAILSAFE", 27 },
|
{ BOXFAILSAFE, "FAILSAFE", 27 },
|
||||||
{ BOXAIRMODE, "AIR MODE", 28 },
|
{ BOXAIRMODE, "AIR MODE", 28 },
|
||||||
{ BOX3DDISABLE, "DISABLE 3D", 29},
|
{ BOX3D, "DISABLE / SWITCH 3D", 29},
|
||||||
{ BOXFPVANGLEMIX, "FPV ANGLE MIX", 30},
|
{ BOXFPVANGLEMIX, "FPV ANGLE MIX", 30},
|
||||||
{ BOXBLACKBOXERASE, "BLACKBOX ERASE (>30s)", 31 },
|
{ BOXBLACKBOXERASE, "BLACKBOX ERASE (>30s)", 31 },
|
||||||
{ BOXCAMERA1, "CAMERA CONTROL 1", 32},
|
{ BOXCAMERA1, "CAMERA CONTROL 1", 32},
|
||||||
|
@ -82,7 +82,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT] = {
|
||||||
{ BOXFLIPOVERAFTERCRASH, "FLIP OVER AFTER CRASH", 35 },
|
{ BOXFLIPOVERAFTERCRASH, "FLIP OVER AFTER CRASH", 35 },
|
||||||
{ BOXPREARM, "PREARM", 36 },
|
{ BOXPREARM, "PREARM", 36 },
|
||||||
{ BOXBEEPGPSCOUNT, "BEEP GPS SATELLITE COUNT", 37 },
|
{ BOXBEEPGPSCOUNT, "BEEP GPS SATELLITE COUNT", 37 },
|
||||||
{ BOX3DONASWITCH, "3D ON A SWITCH", 38 },
|
// { BOX3DONASWITCH, "3D ON A SWITCH", 38 }, (removed)
|
||||||
{ BOXVTXPITMODE, "VTX PIT MODE", 39 },
|
{ BOXVTXPITMODE, "VTX PIT MODE", 39 },
|
||||||
{ BOXUSER1, "USER1", 40 },
|
{ BOXUSER1, "USER1", 40 },
|
||||||
{ BOXUSER2, "USER2", 41 },
|
{ BOXUSER2, "USER2", 41 },
|
||||||
|
@ -224,8 +224,7 @@ void initActiveBoxIds(void)
|
||||||
BME(BOXFPVANGLEMIX);
|
BME(BOXFPVANGLEMIX);
|
||||||
|
|
||||||
if (feature(FEATURE_3D)) {
|
if (feature(FEATURE_3D)) {
|
||||||
BME(BOX3DDISABLE);
|
BME(BOX3D);
|
||||||
BME(BOX3DONASWITCH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMotorProtocolDshot()) {
|
if (isMotorProtocolDshot()) {
|
||||||
|
|
|
@ -527,6 +527,7 @@ const clivalue_t valueTable[] = {
|
||||||
{ "3d_deadband_high", VAR_UINT16 | MASTER_VALUE, .config.minmax = { PWM_RANGE_MIDDLE, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_high) },
|
{ "3d_deadband_high", VAR_UINT16 | MASTER_VALUE, .config.minmax = { PWM_RANGE_MIDDLE, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_high) },
|
||||||
{ "3d_neutral", VAR_UINT16 | MASTER_VALUE, .config.minmax = { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, neutral3d) },
|
{ "3d_neutral", VAR_UINT16 | MASTER_VALUE, .config.minmax = { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, neutral3d) },
|
||||||
{ "3d_deadband_throttle", VAR_UINT16 | MASTER_VALUE, .config.minmax = { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_throttle) },
|
{ "3d_deadband_throttle", VAR_UINT16 | MASTER_VALUE, .config.minmax = { PWM_PULSE_MIN, PWM_PULSE_MAX }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, deadband3d_throttle) },
|
||||||
|
{ "3d_switched_mode", VAR_UINT8 | MASTER_VALUE | MODE_LOOKUP, .config.lookup = { TABLE_OFF_ON }, PG_MOTOR_3D_CONFIG, offsetof(flight3DConfig_t, switched_mode3d) },
|
||||||
|
|
||||||
// PG_SERVO_CONFIG
|
// PG_SERVO_CONFIG
|
||||||
#ifdef USE_SERVOS
|
#ifdef USE_SERVOS
|
||||||
|
|
|
@ -427,7 +427,7 @@ TEST(ArmingPreventionTest, When3DModeDisabledThenNormalThrottleArmingConditionAp
|
||||||
modeActivationConditionsMutable(0)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
modeActivationConditionsMutable(0)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||||
modeActivationConditionsMutable(0)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
modeActivationConditionsMutable(0)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||||
modeActivationConditionsMutable(1)->auxChannelIndex = 1;
|
modeActivationConditionsMutable(1)->auxChannelIndex = 1;
|
||||||
modeActivationConditionsMutable(1)->modeId = BOX3DDISABLE;
|
modeActivationConditionsMutable(1)->modeId = BOX3D;
|
||||||
modeActivationConditionsMutable(1)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
modeActivationConditionsMutable(1)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||||
modeActivationConditionsMutable(1)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
modeActivationConditionsMutable(1)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||||
useRcControlsConfig(NULL);
|
useRcControlsConfig(NULL);
|
||||||
|
@ -528,7 +528,7 @@ TEST(ArmingPreventionTest, WhenUsingSwitched3DModeThenNormalThrottleArmingCondit
|
||||||
modeActivationConditionsMutable(0)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
modeActivationConditionsMutable(0)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||||
modeActivationConditionsMutable(0)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
modeActivationConditionsMutable(0)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||||
modeActivationConditionsMutable(1)->auxChannelIndex = 1;
|
modeActivationConditionsMutable(1)->auxChannelIndex = 1;
|
||||||
modeActivationConditionsMutable(1)->modeId = BOX3DONASWITCH;
|
modeActivationConditionsMutable(1)->modeId = BOX3D;
|
||||||
modeActivationConditionsMutable(1)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
modeActivationConditionsMutable(1)->range.startStep = CHANNEL_VALUE_TO_STEP(1750);
|
||||||
modeActivationConditionsMutable(1)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
modeActivationConditionsMutable(1)->range.endStep = CHANNEL_VALUE_TO_STEP(CHANNEL_RANGE_MAX);
|
||||||
useRcControlsConfig(NULL);
|
useRcControlsConfig(NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue