@@ -548,7 +548,7 @@ void tryArm(void)
548548 if (STATE (MULTIROTOR ) && turtleIsActive && !FLIGHT_MODE (TURTLE_MODE ) && emergencyArmingCanOverrideArmingDisabled () && isMotorProtocolDshot ()) {
549549 sendDShotCommand (DSHOT_CMD_SPIN_DIRECTION_REVERSED );
550550 ENABLE_ARMING_FLAG (ARMED );
551- enableFlightMode (TURTLE_MODE );
551+ ENABLE_FLIGHT_MODE (TURTLE_MODE );
552552 return ;
553553 }
554554#endif
@@ -678,28 +678,21 @@ void processRx(timeUs_t currentTimeUs)
678678 // Angle mode forced on briefly after emergency inflight rearm to help stabilise attitude (currently limited to MR)
679679 bool emergRearmAngleEnforce = STATE (MULTIROTOR ) && emergRearmStabiliseTimeout > US2MS (currentTimeUs );
680680 bool autoEnableAngle = failsafeRequiresAngleMode () || navigationRequiresAngleMode () || emergRearmAngleEnforce ;
681- bool canUseHorizonMode = true;
682681
683- if (sensors (SENSOR_ACC ) && (IS_RC_MODE_ACTIVE (BOXANGLE ) || autoEnableAngle )) {
684- // bumpless transfer to Level mode
685- canUseHorizonMode = false;
682+ /* Disable stabilised modes initially, will be enabled as required with priority ANGLE > HORIZON > ANGLEHOLD
683+ * MANUAL mode has priority over these modes except when ANGLE auto enabled */
684+ DISABLE_FLIGHT_MODE (ANGLE_MODE );
685+ DISABLE_FLIGHT_MODE (HORIZON_MODE );
686+ DISABLE_FLIGHT_MODE (ANGLEHOLD_MODE );
686687
687- if (!FLIGHT_MODE (ANGLE_MODE )) {
688+ if (sensors (SENSOR_ACC ) && (!FLIGHT_MODE (MANUAL_MODE ) || autoEnableAngle )) {
689+ if (IS_RC_MODE_ACTIVE (BOXANGLE ) || autoEnableAngle ) {
688690 ENABLE_FLIGHT_MODE (ANGLE_MODE );
689- }
690- } else {
691- DISABLE_FLIGHT_MODE (ANGLE_MODE ); // failsafe support
692- }
693-
694- if (IS_RC_MODE_ACTIVE (BOXHORIZON ) && canUseHorizonMode ) {
695-
696- DISABLE_FLIGHT_MODE (ANGLE_MODE );
697-
698- if (!FLIGHT_MODE (HORIZON_MODE )) {
691+ } else if (IS_RC_MODE_ACTIVE (BOXHORIZON )) {
699692 ENABLE_FLIGHT_MODE (HORIZON_MODE );
693+ } else if (STATE (AIRPLANE ) && IS_RC_MODE_ACTIVE (BOXANGLEHOLD )) {
694+ ENABLE_FLIGHT_MODE (ANGLEHOLD_MODE );
700695 }
701- } else {
702- DISABLE_FLIGHT_MODE (HORIZON_MODE );
703696 }
704697
705698 if (FLIGHT_MODE (ANGLE_MODE ) || FLIGHT_MODE (HORIZON_MODE )) {
@@ -710,18 +703,14 @@ void processRx(timeUs_t currentTimeUs)
710703
711704 /* Flaperon mode */
712705 if (IS_RC_MODE_ACTIVE (BOXFLAPERON ) && STATE (FLAPERON_AVAILABLE )) {
713- if (!FLIGHT_MODE (FLAPERON )) {
714- ENABLE_FLIGHT_MODE (FLAPERON );
715- }
706+ ENABLE_FLIGHT_MODE (FLAPERON );
716707 } else {
717708 DISABLE_FLIGHT_MODE (FLAPERON );
718709 }
719710
720711 /* Turn assistant mode */
721712 if (IS_RC_MODE_ACTIVE (BOXTURNASSIST )) {
722- if (!FLIGHT_MODE (TURN_ASSISTANT )) {
723- ENABLE_FLIGHT_MODE (TURN_ASSISTANT );
724- }
713+ ENABLE_FLIGHT_MODE (TURN_ASSISTANT );
725714 } else {
726715 DISABLE_FLIGHT_MODE (TURN_ASSISTANT );
727716 }
@@ -740,9 +729,7 @@ void processRx(timeUs_t currentTimeUs)
740729#if defined(USE_MAG )
741730 if (sensors (SENSOR_ACC ) || sensors (SENSOR_MAG )) {
742731 if (IS_RC_MODE_ACTIVE (BOXHEADFREE ) && STATE (MULTIROTOR )) {
743- if (!FLIGHT_MODE (HEADFREE_MODE )) {
744- ENABLE_FLIGHT_MODE (HEADFREE_MODE );
745- }
732+ ENABLE_FLIGHT_MODE (HEADFREE_MODE );
746733 } else {
747734 DISABLE_FLIGHT_MODE (HEADFREE_MODE );
748735 }
@@ -760,7 +747,7 @@ void processRx(timeUs_t currentTimeUs)
760747 } else {
761748 DISABLE_FLIGHT_MODE (MANUAL_MODE );
762749 }
763- }else {
750+ } else {
764751 DISABLE_FLIGHT_MODE (MANUAL_MODE );
765752 }
766753
@@ -781,52 +768,52 @@ void processRx(timeUs_t currentTimeUs)
781768 }
782769 else if (rcControlsConfig ()-> airmodeHandlingType == STICK_CENTER ) {
783770 if (throttleIsLow ) {
784- if (STATE (AIRMODE_ACTIVE )) {
785- if ((rollPitchStatus == CENTERED ) || (ifMotorstopFeatureEnabled () && !STATE (FIXED_WING_LEGACY ))) {
786- ENABLE_STATE (ANTI_WINDUP );
787- }
788- else {
789- DISABLE_STATE (ANTI_WINDUP );
790- }
791- }
792- else {
793- DISABLE_STATE (ANTI_WINDUP );
794- pidResetErrorAccumulators ();
795- }
796- }
797- else {
798- DISABLE_STATE (ANTI_WINDUP );
799- }
771+ if (STATE (AIRMODE_ACTIVE )) {
772+ if ((rollPitchStatus == CENTERED ) || (ifMotorstopFeatureEnabled () && !STATE (FIXED_WING_LEGACY ))) {
773+ ENABLE_STATE (ANTI_WINDUP );
774+ }
775+ else {
776+ DISABLE_STATE (ANTI_WINDUP );
777+ }
778+ }
779+ else {
780+ DISABLE_STATE (ANTI_WINDUP );
781+ pidResetErrorAccumulators ();
782+ }
783+ }
784+ else {
785+ DISABLE_STATE (ANTI_WINDUP );
786+ }
800787 }
801788 else if (rcControlsConfig ()-> airmodeHandlingType == STICK_CENTER_ONCE ) {
802789 if (throttleIsLow ) {
803- if (STATE (AIRMODE_ACTIVE )) {
804- if ((rollPitchStatus == CENTERED ) && !STATE (ANTI_WINDUP_DEACTIVATED )) {
805- ENABLE_STATE (ANTI_WINDUP );
806- }
807- else {
808- DISABLE_STATE (ANTI_WINDUP );
809- }
810- }
811- else {
812- DISABLE_STATE (ANTI_WINDUP );
813- pidResetErrorAccumulators ();
814- }
815- }
816- else {
817- DISABLE_STATE (ANTI_WINDUP );
818- if (rollPitchStatus != CENTERED ) {
819- ENABLE_STATE (ANTI_WINDUP_DEACTIVATED );
820- }
821- }
790+ if (STATE (AIRMODE_ACTIVE )) {
791+ if ((rollPitchStatus == CENTERED ) && !STATE (ANTI_WINDUP_DEACTIVATED )) {
792+ ENABLE_STATE (ANTI_WINDUP );
793+ }
794+ else {
795+ DISABLE_STATE (ANTI_WINDUP );
796+ }
797+ }
798+ else {
799+ DISABLE_STATE (ANTI_WINDUP );
800+ pidResetErrorAccumulators ();
801+ }
802+ }
803+ else {
804+ DISABLE_STATE (ANTI_WINDUP );
805+ if (rollPitchStatus != CENTERED ) {
806+ ENABLE_STATE (ANTI_WINDUP_DEACTIVATED );
807+ }
808+ }
822809 }
823810 else if (rcControlsConfig ()-> airmodeHandlingType == THROTTLE_THRESHOLD ) {
824- DISABLE_STATE (ANTI_WINDUP );
825- //This case applies only to MR when Airmode management is throttle threshold activated
826- if (throttleIsLow && !STATE (AIRMODE_ACTIVE )) {
827- pidResetErrorAccumulators ();
828- }
829- }
811+ DISABLE_STATE (ANTI_WINDUP );
812+ //This case applies only to MR when Airmode management is throttle threshold activated
813+ if (throttleIsLow && !STATE (AIRMODE_ACTIVE )) {
814+ pidResetErrorAccumulators ();
815+ }
816+ }
830817//---------------------------------------------------------
831818 if (currentMixerConfig .platformType == PLATFORM_AIRPLANE ) {
832819 DISABLE_FLIGHT_MODE (HEADFREE_MODE );
@@ -849,6 +836,8 @@ void processRx(timeUs_t currentTimeUs)
849836 }
850837 }
851838#endif
839+ // Sound a beeper if the flight mode state has changed
840+ updateFlightModeChangeBeeper ();
852841}
853842
854843// Function for loop trigger
0 commit comments