1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-13 19:40:27 +03:00

change mode name + fixes

This commit is contained in:
breadoven 2023-10-27 15:39:20 +01:00
parent 98f7f43c1f
commit b461d8095b
16 changed files with 75 additions and 71 deletions

View file

@ -679,18 +679,19 @@ void processRx(timeUs_t currentTimeUs)
bool emergRearmAngleEnforce = STATE(MULTIROTOR) && emergRearmStabiliseTimeout > US2MS(currentTimeUs); bool emergRearmAngleEnforce = STATE(MULTIROTOR) && emergRearmStabiliseTimeout > US2MS(currentTimeUs);
bool autoEnableAngle = failsafeRequiresAngleMode() || navigationRequiresAngleMode() || emergRearmAngleEnforce; bool autoEnableAngle = failsafeRequiresAngleMode() || navigationRequiresAngleMode() || emergRearmAngleEnforce;
/* Disable modes initially, will be enabled as required with priority ANGLE > HORIZON > ATTITUDE HOLD */ /* Disable stabilised modes initially, will be enabled as required with priority ANGLE > HORIZON > ANGLEHOLD
* MANUAL mode has priority over these modes except when ANGLE auto enabled */
DISABLE_FLIGHT_MODE(ANGLE_MODE); DISABLE_FLIGHT_MODE(ANGLE_MODE);
DISABLE_FLIGHT_MODE(HORIZON_MODE); DISABLE_FLIGHT_MODE(HORIZON_MODE);
DISABLE_FLIGHT_MODE(ATTIHOLD_MODE); DISABLE_FLIGHT_MODE(ANGLEHOLD_MODE);
if (sensors(SENSOR_ACC)) { if (sensors(SENSOR_ACC) && (!FLIGHT_MODE(MANUAL_MODE) || autoEnableAngle)) {
if (IS_RC_MODE_ACTIVE(BOXANGLE) || autoEnableAngle) { if (IS_RC_MODE_ACTIVE(BOXANGLE) || autoEnableAngle) {
ENABLE_FLIGHT_MODE(ANGLE_MODE); ENABLE_FLIGHT_MODE(ANGLE_MODE);
} else if (IS_RC_MODE_ACTIVE(BOXHORIZON)) { } else if (IS_RC_MODE_ACTIVE(BOXHORIZON)) {
ENABLE_FLIGHT_MODE(HORIZON_MODE); ENABLE_FLIGHT_MODE(HORIZON_MODE);
} else if (STATE(AIRPLANE) && IS_RC_MODE_ACTIVE(BOXATTIHOLD)) { } else if (STATE(AIRPLANE) && IS_RC_MODE_ACTIVE(BOXANGLEHOLD)) {
ENABLE_FLIGHT_MODE(ATTIHOLD_MODE); ENABLE_FLIGHT_MODE(ANGLEHOLD_MODE);
} }
} }

View file

@ -102,7 +102,7 @@ static const box_t boxes[CHECKBOX_ITEM_COUNT + 1] = {
{ .boxId = BOXMULTIFUNCTION, .boxName = "MULTI FUNCTION", .permanentId = 61 }, { .boxId = BOXMULTIFUNCTION, .boxName = "MULTI FUNCTION", .permanentId = 61 },
{ .boxId = BOXMIXERPROFILE, .boxName = "MIXER PROFILE 2", .permanentId = 62 }, { .boxId = BOXMIXERPROFILE, .boxName = "MIXER PROFILE 2", .permanentId = 62 },
{ .boxId = BOXMIXERTRANSITION, .boxName = "MIXER TRANSITION", .permanentId = 63 }, { .boxId = BOXMIXERTRANSITION, .boxName = "MIXER TRANSITION", .permanentId = 63 },
{ .boxId = BOXATTIHOLD, .boxName = "ATTITUDE HOLD", .permanentId = 64 }, { .boxId = BOXANGLEHOLD, .boxName = "ANGLE HOLD", .permanentId = 64 },
{ .boxId = CHECKBOX_ITEM_COUNT, .boxName = NULL, .permanentId = 0xFF } { .boxId = CHECKBOX_ITEM_COUNT, .boxName = NULL, .permanentId = 0xFF }
}; };
@ -281,7 +281,7 @@ void initActiveBoxIds(void)
ADD_ACTIVE_BOX(BOXAUTOLEVEL); ADD_ACTIVE_BOX(BOXAUTOLEVEL);
} }
if (sensors(SENSOR_ACC)) { if (sensors(SENSOR_ACC)) {
ADD_ACTIVE_BOX(BOXATTIHOLD); ADD_ACTIVE_BOX(BOXANGLEHOLD);
} }
} }
@ -436,7 +436,7 @@ void packBoxModeFlags(boxBitmask_t * mspBoxModeFlags)
CHECK_ACTIVE_BOX(IS_ENABLED(currentMixerProfileIndex), BOXMIXERPROFILE); CHECK_ACTIVE_BOX(IS_ENABLED(currentMixerProfileIndex), BOXMIXERPROFILE);
CHECK_ACTIVE_BOX(IS_ENABLED(IS_RC_MODE_ACTIVE(BOXMIXERTRANSITION)), BOXMIXERTRANSITION); CHECK_ACTIVE_BOX(IS_ENABLED(IS_RC_MODE_ACTIVE(BOXMIXERTRANSITION)), BOXMIXERTRANSITION);
#endif #endif
CHECK_ACTIVE_BOX(IS_ENABLED(IS_RC_MODE_ACTIVE(BOXATTIHOLD)), BOXATTIHOLD); CHECK_ACTIVE_BOX(IS_ENABLED(IS_RC_MODE_ACTIVE(BOXANGLEHOLD)), BOXANGLEHOLD);
memset(mspBoxModeFlags, 0, sizeof(boxBitmask_t)); memset(mspBoxModeFlags, 0, sizeof(boxBitmask_t));
for (uint32_t i = 0; i < activeBoxIdCount; i++) { for (uint32_t i = 0; i < activeBoxIdCount; i++) {
if (activeBoxes[activeBoxIds[i]]) { if (activeBoxes[activeBoxIds[i]]) {

View file

@ -81,7 +81,7 @@ typedef enum {
BOXMULTIFUNCTION = 52, BOXMULTIFUNCTION = 52,
BOXMIXERPROFILE = 53, BOXMIXERPROFILE = 53,
BOXMIXERTRANSITION = 54, BOXMIXERTRANSITION = 54,
BOXATTIHOLD = 55, BOXANGLEHOLD = 55,
CHECKBOX_ITEM_COUNT CHECKBOX_ITEM_COUNT
} boxId_e; } boxId_e;

View file

@ -158,8 +158,8 @@ flightModeForTelemetry_e getFlightModeForTelemetry(void)
if (FLIGHT_MODE(HORIZON_MODE)) if (FLIGHT_MODE(HORIZON_MODE))
return FLM_HORIZON; return FLM_HORIZON;
if (FLIGHT_MODE(ATTIHOLD_MODE)) if (FLIGHT_MODE(ANGLEHOLD_MODE))
return FLM_ATTIHOLD; return FLM_ANGLEHOLD;
return STATE(AIRMODE_ACTIVE) ? FLM_ACRO_AIR : FLM_ACRO; return STATE(AIRMODE_ACTIVE) ? FLM_ACRO_AIR : FLM_ACRO;
} }

View file

@ -104,7 +104,7 @@ typedef enum {
TURN_ASSISTANT = (1 << 14), TURN_ASSISTANT = (1 << 14),
TURTLE_MODE = (1 << 15), TURTLE_MODE = (1 << 15),
SOARING_MODE = (1 << 16), SOARING_MODE = (1 << 16),
ATTIHOLD_MODE = (1 << 17), ANGLEHOLD_MODE = (1 << 17),
} flightModeFlags_e; } flightModeFlags_e;
extern uint32_t flightModeFlags; extern uint32_t flightModeFlags;
@ -163,7 +163,7 @@ typedef enum {
FLM_CRUISE, FLM_CRUISE,
FLM_LAUNCH, FLM_LAUNCH,
FLM_FAILSAFE, FLM_FAILSAFE,
FLM_ATTIHOLD, FLM_ANGLEHOLD,
FLM_COUNT FLM_COUNT
} flightModeForTelemetry_e; } flightModeForTelemetry_e;

View file

@ -159,7 +159,8 @@ typedef void (*pidControllerFnPtr)(pidState_t *pidState, flight_dynamics_index_t
static EXTENDED_FASTRAM pidControllerFnPtr pidControllerApplyFn; static EXTENDED_FASTRAM pidControllerFnPtr pidControllerApplyFn;
static EXTENDED_FASTRAM filterApplyFnPtr dTermLpfFilterApplyFn; static EXTENDED_FASTRAM filterApplyFnPtr dTermLpfFilterApplyFn;
static EXTENDED_FASTRAM bool levelingEnabled = false; static EXTENDED_FASTRAM bool levelingEnabled = false;
static EXTENDED_FASTRAM bool attiHoldIsLevel = false; static EXTENDED_FASTRAM bool restartAngleHoldMode = true;
static EXTENDED_FASTRAM bool angleHoldIsLevel = false;
#define FIXED_WING_LEVEL_TRIM_MAX_ANGLE 10.0f // Max angle auto trimming can demand #define FIXED_WING_LEVEL_TRIM_MAX_ANGLE 10.0f // Max angle auto trimming can demand
#define FIXED_WING_LEVEL_TRIM_DIVIDER 50.0f #define FIXED_WING_LEVEL_TRIM_DIVIDER 50.0f
@ -1065,58 +1066,57 @@ void checkItermFreezingActive(pidState_t *pidState, flight_dynamics_index_t axis
} }
bool isAttiholdLevel(void) bool isAngleHoldLevel(void)
{ {
return attiHoldIsLevel; return angleHoldIsLevel;
} }
void updateAttihold(float *angleTarget, uint8_t axis) void updateAngleHold(float *angleTarget, uint8_t axis)
{ {
int8_t navAttiHoldAxis = navCheckActiveAttiHoldAxis(); int8_t navAngleHoldAxis = navCheckActiveAngleHoldAxis();
static bool restartAttiMode = true; // static bool restartAngleHoldMode = true;
if (!restartAttiMode) { // reset flags for when attitude hold is inactive if (!restartAngleHoldMode) { // set restart flag when attitude hold is inactive
restartAttiMode = !FLIGHT_MODE(ATTIHOLD_MODE) && navAttiHoldAxis == -1; restartAngleHoldMode = !FLIGHT_MODE(ANGLEHOLD_MODE) && navAngleHoldAxis == -1;
attiHoldIsLevel = restartAttiMode ? false: attiHoldIsLevel;
} }
if ((FLIGHT_MODE(ATTIHOLD_MODE) || axis == navAttiHoldAxis) && !isFlightAxisAngleOverrideActive(axis)) { if ((FLIGHT_MODE(ANGLEHOLD_MODE) || axis == navAngleHoldAxis) && !isFlightAxisAngleOverrideActive(axis)) {
/* attiHoldTarget stores attitude values using a zero datum when level. /* angleHoldTarget stores attitude values using a zero datum when level.
* This requires attiHoldTarget pitch to be corrected for fixedWingLevelTrim so it is 0 * This requires angleHoldTarget pitch to be corrected for fixedWingLevelTrim so it is 0
* when the craft is level even though attitude pitch is non zero in this case. * when the craft is level even though attitude pitch is non zero in this case.
* angleTarget pitch is corrected back to fixedWingLevelTrim datum on return from function */ * angleTarget pitch is corrected back to fixedWingLevelTrim datum on return from function */
static int16_t attiHoldTarget[2]; static int16_t angleHoldTarget[2];
if (restartAttiMode) { // set target attitude to current attitude on activation if (restartAngleHoldMode) { // set target attitude to current attitude on activation
attiHoldTarget[FD_ROLL] = attitude.raw[FD_ROLL]; angleHoldTarget[FD_ROLL] = attitude.raw[FD_ROLL];
attiHoldTarget[FD_PITCH] = attitude.raw[FD_PITCH] + DEGREES_TO_DECIDEGREES(fixedWingLevelTrim); angleHoldTarget[FD_PITCH] = attitude.raw[FD_PITCH] + DEGREES_TO_DECIDEGREES(fixedWingLevelTrim);
restartAttiMode = false; restartAngleHoldMode = false;
} }
// set flag indicating attitude hold is level // set flag indicating attitude hold is level
if (FLIGHT_MODE(ATTIHOLD_MODE)) { if (FLIGHT_MODE(ANGLEHOLD_MODE)) {
attiHoldIsLevel = attiHoldTarget[FD_ROLL] == 0 && attiHoldTarget[FD_PITCH] == 0; angleHoldIsLevel = angleHoldTarget[FD_ROLL] == 0 && angleHoldTarget[FD_PITCH] == 0;
} else { } else {
attiHoldIsLevel = attiHoldTarget[navAttiHoldAxis] == 0; angleHoldIsLevel = angleHoldTarget[navAngleHoldAxis] == 0;
} }
uint16_t bankLimit = pidProfile()->max_angle_inclination[axis]; uint16_t bankLimit = pidProfile()->max_angle_inclination[axis];
// use Nav bank angle limits if Nav active // use Nav bank angle limits if Nav active
if (navAttiHoldAxis == FD_ROLL) { if (navAngleHoldAxis == FD_ROLL) {
bankLimit = DEGREES_TO_DECIDEGREES(navConfig()->fw.max_bank_angle); bankLimit = DEGREES_TO_DECIDEGREES(navConfig()->fw.max_bank_angle);
} else if (navAttiHoldAxis == FD_PITCH) { } else if (navAngleHoldAxis == FD_PITCH) {
bankLimit = DEGREES_TO_DECIDEGREES(navConfig()->fw.max_climb_angle); bankLimit = DEGREES_TO_DECIDEGREES(navConfig()->fw.max_climb_angle);
} }
int16_t levelTrim = axis == FD_PITCH ? DEGREES_TO_DECIDEGREES(fixedWingLevelTrim) : 0; int16_t levelTrim = axis == FD_PITCH ? DEGREES_TO_DECIDEGREES(fixedWingLevelTrim) : 0;
if (calculateRollPitchCenterStatus() == CENTERED) { if (calculateRollPitchCenterStatus() == CENTERED) {
attiHoldTarget[axis] = ABS(attiHoldTarget[axis]) < 30 ? 0 : attiHoldTarget[axis]; // snap to level when within 3 degs of level angleHoldTarget[axis] = ABS(angleHoldTarget[axis]) < 30 ? 0 : angleHoldTarget[axis]; // snap to level when within 3 degs of level
*angleTarget = constrain(attiHoldTarget[axis] - levelTrim, -bankLimit, bankLimit); *angleTarget = constrain(angleHoldTarget[axis] - levelTrim, -bankLimit, bankLimit);
} else { } else {
*angleTarget = constrain(attitude.raw[axis] + *angleTarget + levelTrim, -bankLimit, bankLimit); *angleTarget = constrain(attitude.raw[axis] + *angleTarget + levelTrim, -bankLimit, bankLimit);
attiHoldTarget[axis] = attitude.raw[axis] + levelTrim; angleHoldTarget[axis] = attitude.raw[axis] + levelTrim;
} }
} }
} }
@ -1174,20 +1174,23 @@ void FAST_CODE pidController(float dT)
// Step 3: Run control for ANGLE_MODE, HORIZON_MODE and ATTI_MODE // Step 3: Run control for ANGLE_MODE, HORIZON_MODE and ATTI_MODE
const float horizonRateMagnitude = FLIGHT_MODE(HORIZON_MODE) ? calcHorizonRateMagnitude() : 0.0f; const float horizonRateMagnitude = FLIGHT_MODE(HORIZON_MODE) ? calcHorizonRateMagnitude() : 0.0f;
levelingEnabled = false; levelingEnabled = false;
angleHoldIsLevel = false;
for (uint8_t axis = FD_ROLL; axis <= FD_PITCH; axis++) { for (uint8_t axis = FD_ROLL; axis <= FD_PITCH; axis++) {
if (FLIGHT_MODE(ANGLE_MODE) || FLIGHT_MODE(HORIZON_MODE) || FLIGHT_MODE(ATTIHOLD_MODE) || isFlightAxisAngleOverrideActive(axis)) { if (FLIGHT_MODE(ANGLE_MODE) || FLIGHT_MODE(HORIZON_MODE) || FLIGHT_MODE(ANGLEHOLD_MODE) || isFlightAxisAngleOverrideActive(axis)) {
// If axis angle override, get the correct angle from Logic Conditions // If axis angle override, get the correct angle from Logic Conditions
float angleTarget = getFlightAxisAngleOverride(axis, computePidLevelTarget(axis)); float angleTarget = getFlightAxisAngleOverride(axis, computePidLevelTarget(axis));
if (STATE(AIRPLANE)) { // update attitude hold mode if (STATE(AIRPLANE)) { // update attitude hold mode
updateAttihold(&angleTarget, axis); updateAngleHold(&angleTarget, axis);
} }
// Apply the Level PID controller // Apply the Level PID controller
pidLevel(angleTarget, &pidState[axis], axis, horizonRateMagnitude, dT); pidLevel(angleTarget, &pidState[axis], axis, horizonRateMagnitude, dT);
canUseFpvCameraMix = false; // FPVANGLEMIX is incompatible with ANGLE/HORIZON canUseFpvCameraMix = false; // FPVANGLEMIX is incompatible with ANGLE/HORIZON
levelingEnabled = true; levelingEnabled = true;
} else {
restartAngleHoldMode = true;
} }
} }
@ -1335,7 +1338,7 @@ bool isFixedWingLevelTrimActive(void)
return IS_RC_MODE_ACTIVE(BOXAUTOLEVEL) && !areSticksDeflected() && return IS_RC_MODE_ACTIVE(BOXAUTOLEVEL) && !areSticksDeflected() &&
(FLIGHT_MODE(ANGLE_MODE) || FLIGHT_MODE(HORIZON_MODE)) && (FLIGHT_MODE(ANGLE_MODE) || FLIGHT_MODE(HORIZON_MODE)) &&
!FLIGHT_MODE(SOARING_MODE) && !FLIGHT_MODE(MANUAL_MODE) && !FLIGHT_MODE(SOARING_MODE) && !FLIGHT_MODE(MANUAL_MODE) &&
!navigationIsControllingAltitude() && !(navCheckActiveAttiHoldAxis() == FD_PITCH && !attiHoldIsLevel); !navigationIsControllingAltitude() && !(navCheckActiveAngleHoldAxis() == FD_PITCH && !angleHoldIsLevel);
} }
void updateFixedWingLevelTrim(timeUs_t currentTimeUs) void updateFixedWingLevelTrim(timeUs_t currentTimeUs)

View file

@ -220,4 +220,4 @@ pidType_e pidIndexGetType(pidIndex_e pidIndex);
bool isFixedWingLevelTrimActive(void); bool isFixedWingLevelTrimActive(void);
void updateFixedWingLevelTrim(timeUs_t currentTimeUs); void updateFixedWingLevelTrim(timeUs_t currentTimeUs);
float getFixedWingLevelTrim(void); float getFixedWingLevelTrim(void);
bool isAttiholdLevel(void); bool isAngleHoldLevel(void);

View file

@ -1726,7 +1726,7 @@ static bool osdDrawSingleElement(uint8_t item)
tfp_sprintf(buff, "%5d", (int)getMAhDrawn()); // Use 5 digits to allow packs below 100Ah tfp_sprintf(buff, "%5d", (int)getMAhDrawn()); // Use 5 digits to allow packs below 100Ah
buff[5] = SYM_MAH; buff[5] = SYM_MAH;
buff[6] = '\0'; buff[6] = '\0';
} else } else
#endif #endif
{ {
if (osdFormatCentiNumber(buff, getMAhDrawn() * 100, 1000, 0, (mah_digits - 2), mah_digits, false)) { if (osdFormatCentiNumber(buff, getMAhDrawn() * 100, 1000, 0, (mah_digits - 2), mah_digits, false)) {
@ -1760,7 +1760,7 @@ static bool osdDrawSingleElement(uint8_t item)
tfp_sprintf(buff, " NF"); tfp_sprintf(buff, " NF");
else if (currentBatteryProfile->capacity.unit == BAT_CAPACITY_UNIT_MAH) { else if (currentBatteryProfile->capacity.unit == BAT_CAPACITY_UNIT_MAH) {
uint8_t mah_digits = osdConfig()->mAh_precision; // Initialize to config value uint8_t mah_digits = osdConfig()->mAh_precision; // Initialize to config value
#ifndef DISABLE_MSP_BF_COMPAT // IF BFCOMPAT is not supported, there's no need to check for it #ifndef DISABLE_MSP_BF_COMPAT // IF BFCOMPAT is not supported, there's no need to check for it
if (isBfCompatibleVideoSystem(osdConfig())) { if (isBfCompatibleVideoSystem(osdConfig())) {
//BFcompat is unable to work with scaled values and it only has mAh symbol to work with //BFcompat is unable to work with scaled values and it only has mAh symbol to work with
@ -1768,7 +1768,7 @@ static bool osdDrawSingleElement(uint8_t item)
buff[5] = SYM_MAH; buff[5] = SYM_MAH;
buff[6] = '\0'; buff[6] = '\0';
unitsDrawn = true; unitsDrawn = true;
} else } else
#endif #endif
{ {
if (osdFormatCentiNumber(buff, getBatteryRemainingCapacity() * 100, 1000, 0, (mah_digits - 2), mah_digits, false)) { if (osdFormatCentiNumber(buff, getBatteryRemainingCapacity() * 100, 1000, 0, (mah_digits - 2), mah_digits, false)) {
@ -2266,8 +2266,8 @@ static bool osdDrawSingleElement(uint8_t item)
p = "ANGL"; p = "ANGL";
else if (FLIGHT_MODE(HORIZON_MODE)) else if (FLIGHT_MODE(HORIZON_MODE))
p = "HOR "; p = "HOR ";
else if (FLIGHT_MODE(ATTIHOLD_MODE)) else if (FLIGHT_MODE(ANGLEHOLD_MODE))
p = "ATTI"; p = "AHLD";
displayWrite(osdDisplayPort, elemPosX, elemPosY, p); displayWrite(osdDisplayPort, elemPosX, elemPosY, p);
return true; return true;
@ -5198,14 +5198,14 @@ textAttributes_t osdGetSystemMessage(char *buff, size_t buff_size, bool isCenter
if (STATE(LANDING_DETECTED)) { if (STATE(LANDING_DETECTED)) {
messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_LANDED); messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_LANDED);
} }
if (IS_RC_MODE_ACTIVE(BOXATTIHOLD)) { if (IS_RC_MODE_ACTIVE(BOXANGLEHOLD)) {
int8_t navAttiHoldAxis = navCheckActiveAttiHoldAxis(); int8_t navAngleHoldAxis = navCheckActiveAngleHoldAxis();
if (isAttiholdLevel()) { if (isAngleHoldLevel()) {
messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_ATTI_LEVEL); messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_ANGLEHOLD_LEVEL);
} else if (navAttiHoldAxis == FD_ROLL) { } else if (navAngleHoldAxis == FD_ROLL) {
messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_ATTI_ROLL); messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_ANGLEHOLD_ROLL);
} else if (navAttiHoldAxis == FD_PITCH) { } else if (navAngleHoldAxis == FD_PITCH) {
messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_ATTI_PITCH); messages[messageCount++] = OSD_MESSAGE_STR(OSD_MSG_ANGLEHOLD_PITCH);
} }
} }
} }

View file

@ -118,9 +118,9 @@
#define OSD_MSG_UNABLE_ARM "UNABLE TO ARM" #define OSD_MSG_UNABLE_ARM "UNABLE TO ARM"
#define OSD_MSG_SAVING_SETTNGS "** SAVING SETTINGS **" #define OSD_MSG_SAVING_SETTNGS "** SAVING SETTINGS **"
#define OSD_MSG_SETTINGS_SAVED "** SETTINGS SAVED **" #define OSD_MSG_SETTINGS_SAVED "** SETTINGS SAVED **"
#define OSD_MSG_ATTI_ROLL "(ATTI ROLL)" #define OSD_MSG_ANGLEHOLD_ROLL "(ANGLEHOLD ROLL)"
#define OSD_MSG_ATTI_PITCH "(ATTI PITCH)" #define OSD_MSG_ANGLEHOLD_PITCH "(ANGLEHOLD PITCH)"
#define OSD_MSG_ATTI_LEVEL "(ATTI LEVEL)" #define OSD_MSG_ANGLEHOLD_LEVEL "(ANGLEHOLD LEVEL)"
#ifdef USE_DEV_TOOLS #ifdef USE_DEV_TOOLS
#define OSD_MSG_GRD_TEST_MODE "GRD TEST > MOTORS DISABLED" #define OSD_MSG_GRD_TEST_MODE "GRD TEST > MOTORS DISABLED"
@ -416,7 +416,7 @@ typedef struct osdConfig_s {
#ifdef USE_WIND_ESTIMATOR #ifdef USE_WIND_ESTIMATOR
bool estimations_wind_compensation; // use wind compensation for estimated remaining flight/distance bool estimations_wind_compensation; // use wind compensation for estimated remaining flight/distance
#endif #endif
uint8_t coordinate_digits; uint8_t coordinate_digits;
bool osd_failsafe_switch_layout; bool osd_failsafe_switch_layout;
uint8_t plus_code_digits; // Number of digits to use in OSD_PLUS_CODE uint8_t plus_code_digits; // Number of digits to use in OSD_PLUS_CODE

View file

@ -300,7 +300,7 @@ static void djiPackBoxModeBitmask(boxBitmask_t * flightModeBitmask)
case FLM_ALTITUDE_HOLD: case FLM_ALTITUDE_HOLD:
case FLM_POSITION_HOLD: case FLM_POSITION_HOLD:
case FLM_MISSION: case FLM_MISSION:
case FLM_ATTIHOLD: case FLM_ANGLEHOLD:
default: default:
// Unsupported ATM, keep at ANGLE // Unsupported ATM, keep at ANGLE
bitArraySet(flightModeBitmask->bits, 1); // DJI: 1 << 1 : ANGLE bitArraySet(flightModeBitmask->bits, 1); // DJI: 1 << 1 : ANGLE

View file

@ -4566,11 +4566,11 @@ int32_t navigationGetHeadingError(void)
return wrap_18000(posControl.desiredState.yaw - posControl.actualState.cog); return wrap_18000(posControl.desiredState.yaw - posControl.actualState.cog);
} }
int8_t navCheckActiveAttiHoldAxis(void) int8_t navCheckActiveAngleHoldAxis(void)
{ {
int8_t activeAxis = -1; int8_t activeAxis = -1;
if (IS_RC_MODE_ACTIVE(BOXATTIHOLD)) { if (IS_RC_MODE_ACTIVE(BOXANGLEHOLD)) {
navigationFSMStateFlags_t stateFlags = navGetCurrentStateFlags(); navigationFSMStateFlags_t stateFlags = navGetCurrentStateFlags();
bool altholdActive = stateFlags & NAV_REQUIRE_ANGLE_FW && !(stateFlags & NAV_REQUIRE_ANGLE); bool altholdActive = stateFlags & NAV_REQUIRE_ANGLE_FW && !(stateFlags & NAV_REQUIRE_ANGLE);

View file

@ -627,7 +627,7 @@ bool isEstimatedAglTrusted(void);
void checkManualEmergencyLandingControl(bool forcedActivation); void checkManualEmergencyLandingControl(bool forcedActivation);
float updateBaroAltitudeRate(float newBaroAltRate, bool updateValue); float updateBaroAltitudeRate(float newBaroAltRate, bool updateValue);
int8_t navCheckActiveAttiHoldAxis(void); int8_t navCheckActiveAngleHoldAxis(void);
/* Returns the heading recorded when home position was acquired. /* Returns the heading recorded when home position was acquired.
* Note that the navigation system uses deg*100 as unit and angles * Note that the navigation system uses deg*100 as unit and angles

View file

@ -775,7 +775,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
case LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_PROFILE: // int case LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_PROFILE: // int
return getConfigProfile() + 1; return getConfigProfile() + 1;
break; break;
case LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_MIXER_PROFILE: // int case LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_MIXER_PROFILE: // int
return currentMixerProfileIndex + 1; return currentMixerProfileIndex + 1;
break; break;
@ -849,8 +849,8 @@ static int logicConditionGetFlightModeOperandValue(int operand) {
return (bool) FLIGHT_MODE(HORIZON_MODE); return (bool) FLIGHT_MODE(HORIZON_MODE);
break; break;
case LOGIC_CONDITION_OPERAND_FLIGHT_MODE_ATTIMODE: case LOGIC_CONDITION_OPERAND_FLIGHT_MODE_ANGLEHOLD:
return (bool) FLIGHT_MODE(ATTIHOLD_MODE); return (bool) FLIGHT_MODE(ANGLEHOLD_MODE);
break; break;
case LOGIC_CONDITION_OPERAND_FLIGHT_MODE_AIR: case LOGIC_CONDITION_OPERAND_FLIGHT_MODE_AIR:

View file

@ -157,7 +157,7 @@ typedef enum {
LOGIC_CONDITION_OPERAND_FLIGHT_MODE_USER4, // 13 LOGIC_CONDITION_OPERAND_FLIGHT_MODE_USER4, // 13
LOGIC_CONDITION_OPERAND_FLIGHT_MODE_ACRO, // 14 LOGIC_CONDITION_OPERAND_FLIGHT_MODE_ACRO, // 14
LOGIC_CONDITION_OPERAND_FLIGHT_MODE_WAYPOINT_MISSION, // 15 LOGIC_CONDITION_OPERAND_FLIGHT_MODE_WAYPOINT_MISSION, // 15
LOGIC_CONDITION_OPERAND_FLIGHT_MODE_ATTIMODE, // 16 LOGIC_CONDITION_OPERAND_FLIGHT_MODE_ANGLEHOLD, // 16
} logicFlightModeOperands_e; } logicFlightModeOperands_e;
typedef enum { typedef enum {

View file

@ -352,8 +352,8 @@ static void crsfFrameFlightMode(sbuf_t *dst)
flightMode = "ANGL"; flightMode = "ANGL";
} else if (FLIGHT_MODE(HORIZON_MODE)) { } else if (FLIGHT_MODE(HORIZON_MODE)) {
flightMode = "HOR"; flightMode = "HOR";
} else if (FLIGHT_MODE(ATTIHOLD_MODE)) { } else if (FLIGHT_MODE(ANGLEHOLD_MODE)) {
flightMode = "ATTI"; flightMode = "AHLD";
} }
#ifdef USE_GPS #ifdef USE_GPS
} else if (feature(FEATURE_GPS) && navConfig()->general.flags.extra_arming_safety && (!STATE(GPS_FIX) || !STATE(GPS_FIX_HOME))) { } else if (feature(FEATURE_GPS) && navConfig()->general.flags.extra_arming_safety && (!STATE(GPS_FIX) || !STATE(GPS_FIX_HOME))) {

View file

@ -191,7 +191,7 @@ static APM_COPTER_MODE inavToArduCopterMap(flightModeForTelemetry_e flightMode)
case FLM_ACRO_AIR: return COPTER_MODE_ACRO; case FLM_ACRO_AIR: return COPTER_MODE_ACRO;
case FLM_ANGLE: return COPTER_MODE_STABILIZE; case FLM_ANGLE: return COPTER_MODE_STABILIZE;
case FLM_HORIZON: return COPTER_MODE_STABILIZE; case FLM_HORIZON: return COPTER_MODE_STABILIZE;
case FLM_ATTIHOLD: return COPTER_MODE_STABILIZE; case FLM_ANGLEHOLD: return COPTER_MODE_STABILIZE;
case FLM_ALTITUDE_HOLD: return COPTER_MODE_ALT_HOLD; case FLM_ALTITUDE_HOLD: return COPTER_MODE_ALT_HOLD;
case FLM_POSITION_HOLD: return COPTER_MODE_POSHOLD; case FLM_POSITION_HOLD: return COPTER_MODE_POSHOLD;
case FLM_RTH: return COPTER_MODE_RTL; case FLM_RTH: return COPTER_MODE_RTL;
@ -221,7 +221,7 @@ static APM_PLANE_MODE inavToArduPlaneMap(flightModeForTelemetry_e flightMode)
case FLM_ACRO_AIR: return PLANE_MODE_ACRO; case FLM_ACRO_AIR: return PLANE_MODE_ACRO;
case FLM_ANGLE: return PLANE_MODE_FLY_BY_WIRE_A; case FLM_ANGLE: return PLANE_MODE_FLY_BY_WIRE_A;
case FLM_HORIZON: return PLANE_MODE_STABILIZE; case FLM_HORIZON: return PLANE_MODE_STABILIZE;
case FLM_ATTIHOLD: return PLANE_MODE_STABILIZE; case FLM_ANGLEHOLD: return PLANE_MODE_STABILIZE;
case FLM_ALTITUDE_HOLD: return PLANE_MODE_FLY_BY_WIRE_B; case FLM_ALTITUDE_HOLD: return PLANE_MODE_FLY_BY_WIRE_B;
case FLM_POSITION_HOLD: return PLANE_MODE_LOITER; case FLM_POSITION_HOLD: return PLANE_MODE_LOITER;
case FLM_RTH: return PLANE_MODE_RTL; case FLM_RTH: return PLANE_MODE_RTL;