diff --git a/src/main/flight/navigation_rewrite.c b/src/main/flight/navigation_rewrite.c index 46e8fbe9a4..75772a9161 100755 --- a/src/main/flight/navigation_rewrite.c +++ b/src/main/flight/navigation_rewrite.c @@ -36,6 +36,7 @@ #include "sensors/boardalignment.h" #include "io/beeper.h" +#include "io/gps.h" #include "flight/pid.h" #include "flight/imu.h" @@ -512,7 +513,9 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_ALTHOLD_IN_PROGRESS(nav static navigationFSMEvent_t navOnEnteringState_NAV_STATE_POSHOLD_2D_INITIALIZE(navigationFSMState_t previousState) { - if ((navGetStateFlags(previousState) & NAV_CTL_POS) == 0) { + navigationFSMStateFlags_t prevFlags = navGetStateFlags(previousState); + + if (((prevFlags & NAV_CTL_POS) == 0) || ((prevFlags & NAV_AUTO_RTH) != 0) || ((prevFlags & NAV_AUTO_WP) != 0)) { t_fp_vector targetHoldPos; resetPositionController(); @@ -531,7 +534,9 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_POSHOLD_2D_IN_PROGRESS( static navigationFSMEvent_t navOnEnteringState_NAV_STATE_POSHOLD_3D_INITIALIZE(navigationFSMState_t previousState) { - if ((navGetStateFlags(previousState) & NAV_CTL_ALT) == 0) { + navigationFSMStateFlags_t prevFlags = navGetStateFlags(previousState); + + if (((prevFlags & NAV_CTL_ALT) == 0) || ((prevFlags & NAV_AUTO_RTH) != 0) || ((prevFlags & NAV_AUTO_WP) != 0)) { resetAltitudeController(); setupAltitudeController(); @@ -540,7 +545,7 @@ static navigationFSMEvent_t navOnEnteringState_NAV_STATE_POSHOLD_3D_INITIALIZE(n setDesiredPosition(&posControl.actualState.pos, posControl.actualState.yaw, NAV_POS_UPDATE_Z); } - if ((navGetStateFlags(previousState) & NAV_CTL_POS) == 0) { + if (((prevFlags & NAV_CTL_POS) == 0) || ((prevFlags & NAV_AUTO_RTH) != 0) || ((prevFlags & NAV_AUTO_WP) != 0)) { t_fp_vector targetHoldPos; resetPositionController(); @@ -1588,12 +1593,10 @@ void applyWaypointNavigationAndAltitudeHold(void) #if defined(NAV_BLACKBOX) navFlags = 0; - if (posControl.flags.verticalPositionNewData) navFlags |= (1 << 0); - if (posControl.flags.horizontalPositionNewData) navFlags |= (1 << 1); - if (posControl.flags.headingNewData) navFlags |= (1 << 2); - if (posControl.flags.hasValidAltitudeSensor) navFlags |= (1 << 3); - if (posControl.flags.hasValidSurfaceSensor) navFlags |= (1 << 4); - if (posControl.flags.hasValidPositionSensor) navFlags |= (1 << 5); + if (posControl.flags.hasValidAltitudeSensor) navFlags |= (1 << 0); + if (posControl.flags.hasValidSurfaceSensor) navFlags |= (1 << 1); + if (posControl.flags.hasValidPositionSensor) navFlags |= (1 << 2); + if ((STATE(GPS_FIX) && GPS_numSat >= 5)) navFlags |= (1 << 3); #endif // No navigation when disarmed @@ -1679,7 +1682,8 @@ static navigationFSMEvent_t selectNavEventFromBoxModeInput(void) } if (IS_RC_MODE_ACTIVE(BOXNAVWP)) { - return NAV_FSM_EVENT_SWITCH_TO_WAYPOINT; + if (canActivatePosHold && canActivateAltHold && STATE(GPS_FIX_HOME) && ARMING_FLAG(ARMED)) + return NAV_FSM_EVENT_SWITCH_TO_WAYPOINT; } if (IS_RC_MODE_ACTIVE(BOXNAVPOSHOLD) && IS_RC_MODE_ACTIVE(BOXNAVALTHOLD)) { diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index 1625152a31..18738bb61e 100644 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -2411,7 +2411,7 @@ static void cliVersion(char *cmdline) { UNUSED(cmdline); - printf("# Cleanflight/%s %s %s / %s (%s)", + printf("# iNav/%s %s %s / %s (%s)", targetName, FC_VERSION_STRING, buildDate, diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c index d46c90c0d5..a8d5df4ab8 100644 --- a/src/main/io/serial_msp.c +++ b/src/main/io/serial_msp.c @@ -139,10 +139,11 @@ void useRcControlsConfig(modeActivationCondition_t *modeActivationConditions, es #define MULTIWII_IDENTIFIER "MWII"; #define CLEANFLIGHT_IDENTIFIER "CLFL" +#define INAV_IDENTIFIER "INAV" #define BASEFLIGHT_IDENTIFIER "BAFL"; #define FLIGHT_CONTROLLER_IDENTIFIER_LENGTH 4 -static const char * const flightControllerIdentifier = CLEANFLIGHT_IDENTIFIER; // 4 UPPER CASE alpha numeric characters that identify the flight controller. +static const char * const flightControllerIdentifier = INAV_IDENTIFIER; // 4 UPPER CASE alpha numeric characters that identify the flight controller. #define FLIGHT_CONTROLLER_VERSION_LENGTH 3 #define FLIGHT_CONTROLLER_VERSION_MASK 0xFFF diff --git a/src/main/mw.c b/src/main/mw.c index 74971e72e0..cc4cd58e59 100755 --- a/src/main/mw.c +++ b/src/main/mw.c @@ -575,36 +575,26 @@ void processRx(void) } #if defined(MAG) -#if defined(NAV) - if (naivationGetHeadingControlState() != NAV_HEADING_CONTROL_NONE) { - DISABLE_FLIGHT_MODE(MAG_MODE); - DISABLE_FLIGHT_MODE(HEADFREE_MODE); - } - else { -#endif - if (sensors(SENSOR_ACC) || sensors(SENSOR_MAG)) { - if (IS_RC_MODE_ACTIVE(BOXMAG)) { - if (!FLIGHT_MODE(MAG_MODE)) { - ENABLE_FLIGHT_MODE(MAG_MODE); - magHold = DECIDEGREES_TO_DEGREES(attitude.values.yaw); - } - } else { - DISABLE_FLIGHT_MODE(MAG_MODE); - } - if (IS_RC_MODE_ACTIVE(BOXHEADFREE)) { - if (!FLIGHT_MODE(HEADFREE_MODE)) { - ENABLE_FLIGHT_MODE(HEADFREE_MODE); - } - } else { - DISABLE_FLIGHT_MODE(HEADFREE_MODE); - } - if (IS_RC_MODE_ACTIVE(BOXHEADADJ)) { - headFreeModeHold = DECIDEGREES_TO_DEGREES(attitude.values.yaw); // acquire new heading + if (sensors(SENSOR_ACC) || sensors(SENSOR_MAG)) { + if (IS_RC_MODE_ACTIVE(BOXMAG)) { + if (!FLIGHT_MODE(MAG_MODE)) { + ENABLE_FLIGHT_MODE(MAG_MODE); + magHold = DECIDEGREES_TO_DEGREES(attitude.values.yaw); } + } else { + DISABLE_FLIGHT_MODE(MAG_MODE); + } + if (IS_RC_MODE_ACTIVE(BOXHEADFREE)) { + if (!FLIGHT_MODE(HEADFREE_MODE)) { + ENABLE_FLIGHT_MODE(HEADFREE_MODE); + } + } else { + DISABLE_FLIGHT_MODE(HEADFREE_MODE); + } + if (IS_RC_MODE_ACTIVE(BOXHEADADJ)) { + headFreeModeHold = DECIDEGREES_TO_DEGREES(attitude.values.yaw); // acquire new heading } -#if defined(NAV) } -#endif #endif if (IS_RC_MODE_ACTIVE(BOXPASSTHRU)) {