1
0
Fork 0
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:
shota 2022-11-06 16:40:16 +09:00
parent 0b247d9bfc
commit fcf9ca14de
4 changed files with 35 additions and 3 deletions

View file

@ -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("");
} }

View file

@ -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;
} }

View file

@ -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);

View file

@ -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 {