mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-26 17:55:28 +03:00
Add turtle mode function
This commit is contained in:
parent
36caed01ab
commit
9871c6edee
5 changed files with 29 additions and 12 deletions
|
@ -56,6 +56,7 @@ FILE_COMPILE_FOR_SPEED
|
|||
#include "fc/cli.h"
|
||||
#include "fc/config.h"
|
||||
#include "fc/controlrate_profile.h"
|
||||
#include "fc/multifunction.h"
|
||||
#include "fc/rc_adjustments.h"
|
||||
#include "fc/rc_smoothing.h"
|
||||
#include "fc/rc_controls.h"
|
||||
|
@ -512,7 +513,7 @@ void tryArm(void)
|
|||
}
|
||||
|
||||
#ifdef USE_DSHOT
|
||||
if (STATE(MULTIROTOR) && IS_RC_MODE_ACTIVE(BOXTURTLE) && !FLIGHT_MODE(TURTLE_MODE) &&
|
||||
if (STATE(MULTIROTOR) && (IS_RC_MODE_ACTIVE(BOXTURTLE) || MULTI_FUNC_FLAG(MF_TURTLE_MODE)) && !FLIGHT_MODE(TURTLE_MODE) &&
|
||||
emergencyArmingCanOverrideArmingDisabled() && isMotorProtocolDshot()
|
||||
) {
|
||||
sendDShotCommand(DSHOT_CMD_SPIN_DIRECTION_REVERSED);
|
||||
|
|
|
@ -50,16 +50,23 @@ static void multiFunctionApply(multi_function_e selectedItem)
|
|||
case MULTI_FUNC_3: // toggle Safehome suspend
|
||||
#if defined(USE_SAFE_HOME)
|
||||
if (navConfig()->general.flags.safehome_usage_mode != SAFEHOME_USAGE_OFF) {
|
||||
MULTI_FUNC_FLAG(SUSPEND_SAFEHOMES) ? MULTI_FUNC_FLAG_DISABLE(SUSPEND_SAFEHOMES) : MULTI_FUNC_FLAG_ENABLE(SUSPEND_SAFEHOMES);
|
||||
MULTI_FUNC_FLAG(MF_SUSPEND_SAFEHOMES) ? MULTI_FUNC_FLAG_DISABLE(MF_SUSPEND_SAFEHOMES) : MULTI_FUNC_FLAG_ENABLE(MF_SUSPEND_SAFEHOMES);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case MULTI_FUNC_4:
|
||||
case MULTI_FUNC_4: // toggle RTH Trackback suspend
|
||||
if (navConfig()->general.flags.rth_trackback_mode != RTH_TRACKBACK_OFF) {
|
||||
MULTI_FUNC_FLAG(SUSPEND_TRACKBACK) ? MULTI_FUNC_FLAG_DISABLE(SUSPEND_TRACKBACK) : MULTI_FUNC_FLAG_ENABLE(SUSPEND_TRACKBACK);
|
||||
MULTI_FUNC_FLAG(MF_SUSPEND_TRACKBACK) ? MULTI_FUNC_FLAG_DISABLE(MF_SUSPEND_TRACKBACK) : MULTI_FUNC_FLAG_ENABLE(MF_SUSPEND_TRACKBACK);
|
||||
}
|
||||
break;
|
||||
case MULTI_FUNC_5: // emergency ARM
|
||||
case MULTI_FUNC_5:
|
||||
#ifdef USE_DSHOT
|
||||
if (STATE(MULTIROTOR)) { // toggle Turtle mode
|
||||
MULTI_FUNC_FLAG(MF_TURTLE_MODE) ? MULTI_FUNC_FLAG_DISABLE(MF_TURTLE_MODE) : MULTI_FUNC_FLAG_ENABLE(MF_TURTLE_MODE);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case MULTI_FUNC_6: // emergency ARM
|
||||
if (!ARMING_FLAG(ARMED)) {
|
||||
emergencyArmingUpdate(true, true);
|
||||
}
|
||||
|
@ -97,7 +104,7 @@ multi_function_e multiFunctionSelection(void)
|
|||
selectedItem = selectedItem == MULTI_FUNC_END - 1 ? MULTI_FUNC_1 : selectedItem + 1;
|
||||
}
|
||||
selectTimer = 0;
|
||||
if (currentTime - startTimer > 2000) { // 2s reset delay after mode deselected
|
||||
if (currentTime - startTimer > 3000) { // 3s reset delay after mode deselected
|
||||
startTimer = 0;
|
||||
selectedItem = MULTI_FUNC_NONE;
|
||||
}
|
||||
|
|
|
@ -31,8 +31,9 @@ extern uint8_t multiFunctionFlags;
|
|||
#define MULTI_FUNC_FLAG(mask) (multiFunctionFlags & (mask))
|
||||
|
||||
typedef enum {
|
||||
SUSPEND_SAFEHOMES = (1 << 0),
|
||||
SUSPEND_TRACKBACK = (1 << 1),
|
||||
MF_SUSPEND_SAFEHOMES = (1 << 0),
|
||||
MF_SUSPEND_TRACKBACK = (1 << 1),
|
||||
MF_TURTLE_MODE = (1 << 2),
|
||||
} multiFunctionFlags_e;
|
||||
|
||||
typedef enum {
|
||||
|
@ -42,6 +43,7 @@ typedef enum {
|
|||
MULTI_FUNC_3,
|
||||
MULTI_FUNC_4,
|
||||
MULTI_FUNC_5,
|
||||
MULTI_FUNC_6,
|
||||
MULTI_FUNC_END,
|
||||
} multi_function_e;
|
||||
|
||||
|
|
|
@ -4763,16 +4763,23 @@ static textAttributes_t osdGetMultiFunctionMessage(char *buff)
|
|||
case MULTI_FUNC_3:
|
||||
#if defined(USE_SAFE_HOME)
|
||||
if (navConfig()->general.flags.safehome_usage_mode != SAFEHOME_USAGE_OFF) {
|
||||
message = MULTI_FUNC_FLAG(SUSPEND_SAFEHOMES) ? "USE SFHOME" : "SUS SFHOME";
|
||||
message = MULTI_FUNC_FLAG(MF_SUSPEND_SAFEHOMES) ? "USE SFHOME" : "SUS SFHOME";
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case MULTI_FUNC_4:
|
||||
if (navConfig()->general.flags.rth_trackback_mode != RTH_TRACKBACK_OFF) {
|
||||
message = MULTI_FUNC_FLAG(SUSPEND_TRACKBACK) ? "USE TKBACK" : "SUS TKBACK";
|
||||
message = MULTI_FUNC_FLAG(MF_SUSPEND_TRACKBACK) ? "USE TKBACK" : "SUS TKBACK";
|
||||
}
|
||||
break;
|
||||
case MULTI_FUNC_5:
|
||||
#ifdef USE_DSHOT
|
||||
if (STATE(MULTIROTOR)) {
|
||||
message = MULTI_FUNC_FLAG(MF_TURTLE_MODE) ? "USE TURTLE" : "END TURTLE";
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case MULTI_FUNC_6:
|
||||
message = ARMING_FLAG(ARMED) ? "NOW ARMED " : "EMERG ARM ";
|
||||
break;
|
||||
case MULTI_FUNC_END:
|
||||
|
|
|
@ -1313,7 +1313,7 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_RTH_TRACKBACK(navigatio
|
|||
if (posControl.flags.estPosStatus >= EST_USABLE) {
|
||||
const int32_t distFromStartTrackback = calculateDistanceToDestination(&posControl.rthTBPointsList[posControl.rthTBLastSavedIndex]) / 100;
|
||||
const bool cancelTrackback = distFromStartTrackback > navConfig()->general.rth_trackback_distance ||
|
||||
((rthAltControlStickOverrideCheck(ROLL) || MULTI_FUNC_FLAG(SUSPEND_TRACKBACK)) && !posControl.flags.forcedRTHActivated);
|
||||
((rthAltControlStickOverrideCheck(ROLL) || MULTI_FUNC_FLAG(MF_SUSPEND_TRACKBACK)) && !posControl.flags.forcedRTHActivated);
|
||||
|
||||
if (posControl.activeRthTBPointIndex < 0 || cancelTrackback) {
|
||||
posControl.rthTBWrapAroundCounter = posControl.activeRthTBPointIndex = -1;
|
||||
|
@ -2460,7 +2460,7 @@ static navigationHomeFlags_t navigationActualStateHomeValidity(void)
|
|||
void checkSafeHomeState(bool shouldBeEnabled)
|
||||
{
|
||||
const bool safehomeNotApplicable = navConfig()->general.flags.safehome_usage_mode == SAFEHOME_USAGE_OFF ||
|
||||
(MULTI_FUNC_FLAG(SUSPEND_SAFEHOMES) && !posControl.flags.forcedRTHActivated) ||
|
||||
(MULTI_FUNC_FLAG(MF_SUSPEND_SAFEHOMES) && !posControl.flags.forcedRTHActivated) ||
|
||||
posControl.flags.rthTrackbackActive ||
|
||||
(!posControl.safehomeState.isApplied && posControl.homeDistance < navConfig()->general.min_rth_distance);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue