mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-13 11:29:56 +03:00
7.1 mergeback
This commit is contained in:
commit
d35a895ad3
80 changed files with 2128 additions and 832 deletions
|
@ -97,7 +97,7 @@ static int logicConditionCompute(
|
|||
int temporaryValue;
|
||||
#if defined(USE_VTX_CONTROL)
|
||||
vtxDeviceCapability_t vtxDeviceCapability;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
switch (operation) {
|
||||
|
||||
|
@ -154,7 +154,7 @@ static int logicConditionCompute(
|
|||
|
||||
case LOGIC_CONDITION_NOR:
|
||||
return !(operandA || operandB);
|
||||
break;
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_NOT:
|
||||
return !operandA;
|
||||
|
@ -170,7 +170,7 @@ static int logicConditionCompute(
|
|||
return false;
|
||||
}
|
||||
|
||||
//When both operands are not met, keep current value
|
||||
//When both operands are not met, keep current value
|
||||
return currentValue;
|
||||
break;
|
||||
|
||||
|
@ -238,7 +238,7 @@ static int logicConditionCompute(
|
|||
gvSet(operandA, operandB);
|
||||
return operandB;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_GVAR_INC:
|
||||
temporaryValue = gvGet(operandA) + operandB;
|
||||
gvSet(operandA, temporaryValue);
|
||||
|
@ -270,7 +270,7 @@ static int logicConditionCompute(
|
|||
return operandA;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OVERRIDE_ARMING_SAFETY:
|
||||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_ARMING_SAFETY);
|
||||
return true;
|
||||
|
@ -287,11 +287,18 @@ static int logicConditionCompute(
|
|||
return true;
|
||||
break;
|
||||
|
||||
#ifdef USE_MAG
|
||||
case LOGIC_CONDITION_RESET_MAG_CALIBRATION:
|
||||
|
||||
ENABLE_STATE(CALIBRATE_MAG);
|
||||
return true;
|
||||
break;
|
||||
#endif
|
||||
case LOGIC_CONDITION_SET_VTX_POWER_LEVEL:
|
||||
#if defined(USE_VTX_CONTROL)
|
||||
#if defined(USE_VTX_CONTROL)
|
||||
#if(defined(USE_VTX_SMARTAUDIO) || defined(USE_VTX_TRAMP))
|
||||
if (
|
||||
logicConditionValuesByType[LOGIC_CONDITION_SET_VTX_POWER_LEVEL] != operandA &&
|
||||
logicConditionValuesByType[LOGIC_CONDITION_SET_VTX_POWER_LEVEL] != operandA &&
|
||||
vtxCommonGetDeviceCapability(vtxCommonDevice(), &vtxDeviceCapability)
|
||||
) {
|
||||
logicConditionValuesByType[LOGIC_CONDITION_SET_VTX_POWER_LEVEL] = constrain(operandA, VTX_SETTINGS_MIN_POWER, vtxDeviceCapability.powerCount);
|
||||
|
@ -339,18 +346,18 @@ static int logicConditionCompute(
|
|||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_INVERT_PITCH);
|
||||
return true;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_INVERT_YAW:
|
||||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_INVERT_YAW);
|
||||
return true;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OVERRIDE_THROTTLE:
|
||||
logicConditionValuesByType[LOGIC_CONDITION_OVERRIDE_THROTTLE] = operandA;
|
||||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_THROTTLE);
|
||||
return operandA;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_SET_OSD_LAYOUT:
|
||||
logicConditionValuesByType[LOGIC_CONDITION_SET_OSD_LAYOUT] = operandA;
|
||||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_OSD_LAYOUT);
|
||||
|
@ -366,18 +373,18 @@ static int logicConditionCompute(
|
|||
|
||||
case LOGIC_CONDITION_SIN:
|
||||
temporaryValue = (operandB == 0) ? 500 : operandB;
|
||||
return sin_approx(DEGREES_TO_RADIANS(operandA)) * temporaryValue;
|
||||
return sin_approx(DEGREES_TO_RADIANS(operandA)) * temporaryValue;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_COS:
|
||||
temporaryValue = (operandB == 0) ? 500 : operandB;
|
||||
return cos_approx(DEGREES_TO_RADIANS(operandA)) * temporaryValue;
|
||||
return cos_approx(DEGREES_TO_RADIANS(operandA)) * temporaryValue;
|
||||
break;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_TAN:
|
||||
temporaryValue = (operandB == 0) ? 500 : operandB;
|
||||
return tan_approx(DEGREES_TO_RADIANS(operandA)) * temporaryValue;
|
||||
return tan_approx(DEGREES_TO_RADIANS(operandA)) * temporaryValue;
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_MIN:
|
||||
|
@ -387,11 +394,11 @@ static int logicConditionCompute(
|
|||
case LOGIC_CONDITION_MAX:
|
||||
return (operandA > operandB) ? operandA : operandB;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_MAP_INPUT:
|
||||
return scaleRange(constrain(operandA, 0, operandB), 0, operandB, 0, 1000);
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_MAP_OUTPUT:
|
||||
return scaleRange(constrain(operandA, 0, 1000), 0, 1000, 0, operandB);
|
||||
break;
|
||||
|
@ -486,9 +493,20 @@ static int logicConditionCompute(
|
|||
return operandA;
|
||||
break;
|
||||
#endif
|
||||
#ifdef USE_GPS_FIX_ESTIMATION
|
||||
case LOGIC_CONDITION_DISABLE_GPS_FIX:
|
||||
if (operandA > 0) {
|
||||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_DISABLE_GPS_FIX);
|
||||
} else {
|
||||
LOGIC_CONDITION_GLOBAL_FLAG_DISABLE(LOGIC_CONDITION_GLOBAL_FLAG_DISABLE_GPS_FIX);
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
return false;
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -497,7 +515,7 @@ void logicConditionProcess(uint8_t i) {
|
|||
const int activatorValue = logicConditionGetValue(logicConditions(i)->activatorId);
|
||||
|
||||
if (logicConditions(i)->enabled && activatorValue && !cliMode) {
|
||||
|
||||
|
||||
/*
|
||||
* Process condition only when latch flag is not set
|
||||
* Latched LCs can only go from OFF to ON, not the other way
|
||||
|
@ -506,13 +524,13 @@ void logicConditionProcess(uint8_t i) {
|
|||
const int operandAValue = logicConditionGetOperandValue(logicConditions(i)->operandA.type, logicConditions(i)->operandA.value);
|
||||
const int operandBValue = logicConditionGetOperandValue(logicConditions(i)->operandB.type, logicConditions(i)->operandB.value);
|
||||
const int newValue = logicConditionCompute(
|
||||
logicConditionStates[i].value,
|
||||
logicConditions(i)->operation,
|
||||
operandAValue,
|
||||
logicConditionStates[i].value,
|
||||
logicConditions(i)->operation,
|
||||
operandAValue,
|
||||
operandBValue,
|
||||
i
|
||||
);
|
||||
|
||||
|
||||
logicConditionStates[i].value = newValue;
|
||||
|
||||
/*
|
||||
|
@ -587,7 +605,7 @@ static int logicConditionGetWaypointOperandValue(int operand) {
|
|||
return distance;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_WAYPOINTS_USER1_ACTION:
|
||||
return (NAV_Status.activeWpIndex > 0) ? ((posControl.waypointList[NAV_Status.activeWpIndex-1].p3 & NAV_WP_USER1) == NAV_WP_USER1) : 0;
|
||||
break;
|
||||
|
@ -633,11 +651,11 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
case LOGIC_CONDITION_OPERAND_FLIGHT_ARM_TIMER: // in s
|
||||
return constrain((uint32_t)getFlightTime(), 0, INT16_MAX);
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_HOME_DISTANCE: //in m
|
||||
return constrain(GPS_distanceToHome, 0, INT16_MAX);
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_TRIP_DISTANCE: //in m
|
||||
return constrain(getTotalTravelDistance() / 100, 0, INT16_MAX);
|
||||
break;
|
||||
|
@ -645,7 +663,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
case LOGIC_CONDITION_OPERAND_FLIGHT_RSSI:
|
||||
return constrain(getRSSI() * 100 / RSSI_MAX_VALUE, 0, 99);
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_VBAT: // V / 100
|
||||
return getBatteryVoltage();
|
||||
break;
|
||||
|
@ -661,19 +679,24 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
case LOGIC_CONDITION_OPERAND_FLIGHT_CURRENT: // Amp / 100
|
||||
return getAmperage();
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_MAH_DRAWN: // mAh
|
||||
return getMAhDrawn();
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_GPS_SATS:
|
||||
#ifdef USE_GPS_FIX_ESTIMATION
|
||||
if ( STATE(GPS_ESTIMATED_FIX) ){
|
||||
return gpsSol.numSat; //99
|
||||
} else
|
||||
#endif
|
||||
if (getHwGPSStatus() == HW_SENSOR_UNAVAILABLE || getHwGPSStatus() == HW_SENSOR_UNHEALTHY) {
|
||||
return 0;
|
||||
} else {
|
||||
return gpsSol.numSat;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_GPS_VALID: // 0/1
|
||||
return STATE(GPS_FIX) ? 1 : 0;
|
||||
break;
|
||||
|
@ -725,15 +748,15 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_AUTOLAUNCH: // 0/1
|
||||
return (navGetCurrentStateFlags() & NAV_CTL_LAUNCH) ? 1 : 0;
|
||||
break;
|
||||
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_ALTITUDE_CONTROL: // 0/1
|
||||
return (navGetCurrentStateFlags() & NAV_CTL_ALT) ? 1 : 0;
|
||||
break;
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_POSITION_CONTROL: // 0/1
|
||||
return (navGetCurrentStateFlags() & NAV_CTL_POS) ? 1 : 0;
|
||||
break;
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_EMERGENCY_LANDING: // 0/1
|
||||
return (navGetCurrentStateFlags() & NAV_CTL_EMERG) ? 1 : 0;
|
||||
|
@ -741,7 +764,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_RTH: // 0/1
|
||||
return (navGetCurrentStateFlags() & NAV_AUTO_RTH) ? 1 : 0;
|
||||
break;
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_LANDING: // 0/1
|
||||
#ifdef USE_FW_AUTOLAND
|
||||
|
@ -755,16 +778,16 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
case LOGIC_CONDITION_OPERAND_FLIGHT_IS_FAILSAFE: // 0/1
|
||||
return (failsafePhase() != FAILSAFE_IDLE) ? 1 : 0;
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_STABILIZED_YAW: //
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_STABILIZED_YAW: //
|
||||
return axisPID[YAW];
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_STABILIZED_ROLL: //
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_STABILIZED_ROLL: //
|
||||
return axisPID[ROLL];
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_STABILIZED_PITCH: //
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_STABILIZED_PITCH: //
|
||||
return axisPID[PITCH];
|
||||
break;
|
||||
|
||||
|
@ -791,7 +814,7 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
case LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_PROFILE: // int
|
||||
return getConfigProfile() + 1;
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_MIXER_PROFILE: // int
|
||||
return currentMixerProfileIndex + 1;
|
||||
break;
|
||||
|
@ -806,11 +829,11 @@ static int logicConditionGetFlightOperandValue(int operand) {
|
|||
case LOGIC_CONDITION_OPERAND_FLIGHT_AGL_STATUS:
|
||||
return isEstimatedAglTrusted();
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_AGL:
|
||||
return getEstimatedAglPosition();
|
||||
break;
|
||||
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_FLIGHT_RANGEFINDER_RAW:
|
||||
return rangefinderGetLatestRawAltitude();
|
||||
break;
|
||||
|
@ -918,7 +941,7 @@ int logicConditionGetOperandValue(logicOperandType_e type, int operand) {
|
|||
//Extract RC channel raw value
|
||||
if (operand >= 1 && operand <= MAX_SUPPORTED_RC_CHANNEL_COUNT) {
|
||||
retVal = rxGetChannelValue(operand - 1);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_TYPE_FLIGHT:
|
||||
|
@ -946,7 +969,7 @@ int logicConditionGetOperandValue(logicOperandType_e type, int operand) {
|
|||
retVal = programmingPidGetOutput(operand);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case LOGIC_CONDITION_OPERAND_TYPE_WAYPOINTS:
|
||||
retVal = logicConditionGetWaypointOperandValue(operand);
|
||||
break;
|
||||
|
@ -960,7 +983,7 @@ int logicConditionGetOperandValue(logicOperandType_e type, int operand) {
|
|||
|
||||
/*
|
||||
* conditionId == -1 is always evaluated as true
|
||||
*/
|
||||
*/
|
||||
int logicConditionGetValue(int8_t conditionId) {
|
||||
if (conditionId >= 0) {
|
||||
return logicConditionStates[conditionId].value;
|
||||
|
@ -1042,7 +1065,7 @@ int16_t getRcChannelOverride(uint8_t channel, int16_t originalValue) {
|
|||
|
||||
uint32_t getLoiterRadius(uint32_t loiterRadius) {
|
||||
#ifdef USE_PROGRAMMING_FRAMEWORK
|
||||
if (LOGIC_CONDITION_GLOBAL_FLAG(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_LOITER_RADIUS) &&
|
||||
if (LOGIC_CONDITION_GLOBAL_FLAG(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_LOITER_RADIUS) &&
|
||||
!(FLIGHT_MODE(FAILSAFE_MODE) || FLIGHT_MODE(NAV_RTH_MODE) || FLIGHT_MODE(NAV_WP_MODE) || navigationIsExecutingAnEmergencyLanding())) {
|
||||
return constrain(logicConditionValuesByType[LOGIC_CONDITION_LOITER_OVERRIDE], loiterRadius, 100000);
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue