mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-15 20:35:29 +03:00
add mixer profile switching by logic
This commit is contained in:
parent
0b247d9bfc
commit
fcf9ca14de
4 changed files with 35 additions and 3 deletions
|
@ -3057,7 +3057,7 @@ static void cliMixerProfile(char *cmdline)
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
const int i = fastA2I(cmdline) - 1;
|
const int i = fastA2I(cmdline) - 1;
|
||||||
if (i >= 0 && i < MAX_PROFILE_COUNT) {
|
if (i >= 0 && i < MAX_MIXER_PROFILE_COUNT) {
|
||||||
setConfigMixerProfileAndWriteEEPROM(i);
|
setConfigMixerProfileAndWriteEEPROM(i);
|
||||||
cliMixerProfile("");
|
cliMixerProfile("");
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,7 +240,7 @@ static uint16_t getValueOffset(const setting_t *value)
|
||||||
case BATTERY_CONFIG_VALUE:
|
case BATTERY_CONFIG_VALUE:
|
||||||
return value->offset + sizeof(batteryProfile_t) * getConfigBatteryProfile();
|
return value->offset + sizeof(batteryProfile_t) * getConfigBatteryProfile();
|
||||||
case MIXER_CONFIG_VALUE:
|
case MIXER_CONFIG_VALUE:
|
||||||
return value->offset + sizeof(batteryProfile_t) * getConfigBatteryProfile();
|
return value->offset + sizeof(mixerProfile_t) * getConfigMixerProfile();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,10 @@
|
||||||
#include "io/osd_common.h"
|
#include "io/osd_common.h"
|
||||||
#include "sensors/diagnostics.h"
|
#include "sensors/diagnostics.h"
|
||||||
|
|
||||||
|
#include "flight/mixer.h"
|
||||||
|
#include "flight/servos.h"
|
||||||
|
#include "drivers/pwm_mapping.h"
|
||||||
|
|
||||||
#include "navigation/navigation.h"
|
#include "navigation/navigation.h"
|
||||||
#include "navigation/navigation_private.h"
|
#include "navigation/navigation_private.h"
|
||||||
|
|
||||||
|
@ -361,6 +365,28 @@ static int logicConditionCompute(
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LOGIC_CONDITION_SET_MIXER_PROFILE:
|
||||||
|
operandA--;
|
||||||
|
if ( getConfigMixerProfile() != operandA && (operandA >= 0 && operandA < MAX_MIXER_PROFILE_COUNT)) {
|
||||||
|
bool mixerprofileChanged = false;
|
||||||
|
if (setConfigMixerProfile(operandA)) {
|
||||||
|
stopMotors();
|
||||||
|
stopPwmAllMotors();
|
||||||
|
servosInit();
|
||||||
|
mixerUpdateStateFlags();
|
||||||
|
mixerInit();
|
||||||
|
pwmMotorAndServoInit();
|
||||||
|
if (!STATE(ALTITUDE_CONTROL)) {
|
||||||
|
featureClear(FEATURE_AIRMODE);
|
||||||
|
}
|
||||||
|
mixerprofileChanged = true;
|
||||||
|
}
|
||||||
|
return mixerprofileChanged;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case LOGIC_CONDITION_LOITER_OVERRIDE:
|
case LOGIC_CONDITION_LOITER_OVERRIDE:
|
||||||
logicConditionValuesByType[LOGIC_CONDITION_LOITER_OVERRIDE] = constrain(operandA, 0, 100000);
|
logicConditionValuesByType[LOGIC_CONDITION_LOITER_OVERRIDE] = constrain(operandA, 0, 100000);
|
||||||
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_LOITER_RADIUS);
|
LOGIC_CONDITION_GLOBAL_FLAG_ENABLE(LOGIC_CONDITION_GLOBAL_FLAG_OVERRIDE_LOITER_RADIUS);
|
||||||
|
@ -610,6 +636,10 @@ 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
|
||||||
|
return getConfigMixerProfile() + 1;
|
||||||
|
break;
|
||||||
|
|
||||||
case LOGIC_CONDITION_OPERAND_FLIGHT_LOITER_RADIUS:
|
case LOGIC_CONDITION_OPERAND_FLIGHT_LOITER_RADIUS:
|
||||||
return getLoiterRadius(navConfig()->fw.loiter_radius);
|
return getLoiterRadius(navConfig()->fw.loiter_radius);
|
||||||
|
|
|
@ -76,7 +76,8 @@ typedef enum {
|
||||||
LOGIC_CONDITION_MAX = 44,
|
LOGIC_CONDITION_MAX = 44,
|
||||||
LOGIC_CONDITION_FLIGHT_AXIS_ANGLE_OVERRIDE = 45,
|
LOGIC_CONDITION_FLIGHT_AXIS_ANGLE_OVERRIDE = 45,
|
||||||
LOGIC_CONDITION_FLIGHT_AXIS_RATE_OVERRIDE = 46,
|
LOGIC_CONDITION_FLIGHT_AXIS_RATE_OVERRIDE = 46,
|
||||||
LOGIC_CONDITION_LAST = 47,
|
LOGIC_CONDITION_SET_MIXER_PROFILE = 47,
|
||||||
|
LOGIC_CONDITION_LAST = 48,
|
||||||
} logicOperation_e;
|
} logicOperation_e;
|
||||||
|
|
||||||
typedef enum logicOperandType_s {
|
typedef enum logicOperandType_s {
|
||||||
|
@ -132,6 +133,7 @@ typedef enum {
|
||||||
LOGIC_CONDITION_OPERAND_FLIGHT_AGL_STATUS, //0,1,2 // 38
|
LOGIC_CONDITION_OPERAND_FLIGHT_AGL_STATUS, //0,1,2 // 38
|
||||||
LOGIC_CONDITION_OPERAND_FLIGHT_AGL, //0,1,2 // 39
|
LOGIC_CONDITION_OPERAND_FLIGHT_AGL, //0,1,2 // 39
|
||||||
LOGIC_CONDITION_OPERAND_FLIGHT_RANGEFINDER_RAW, //int // 40
|
LOGIC_CONDITION_OPERAND_FLIGHT_RANGEFINDER_RAW, //int // 40
|
||||||
|
LOGIC_CONDITION_OPERAND_FLIGHT_ACTIVE_MIXER_PROFILE, //int // 41
|
||||||
} logicFlightOperands_e;
|
} logicFlightOperands_e;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue