Skip to content

Commit

Permalink
Fix multi-range profile type adjustments (#9162)
Browse files Browse the repository at this point in the history
Fix multi-range profile type adjustments
  • Loading branch information
mikeller committed Nov 15, 2019
1 parent 3a7607a commit 1e5e3d3
Showing 1 changed file with 36 additions and 36 deletions.
72 changes: 36 additions & 36 deletions src/main/fc/rc_adjustments.c
Original file line number Diff line number Diff line change
Expand Up @@ -782,45 +782,45 @@ static void processContinuosAdjustments(controlRateConfig_t *controlRateConfig)
const adjustmentConfig_t *adjustmentConfig = &defaultAdjustmentConfigs[adjustmentRange->adjustmentConfig - ADJUSTMENT_FUNCTION_CONFIG_INDEX_OFFSET];
const adjustmentFunction_e adjustmentFunction = adjustmentConfig->adjustmentFunction;

if (!isRangeActive(adjustmentRange->auxChannelIndex, &adjustmentRange->range) ||
adjustmentFunction == ADJUSTMENT_NONE ||
rcData[channelIndex] == adjustmentState->lastRcData) {
continue;
}

adjustmentState->lastRcData = rcData[channelIndex];

int newValue = -1;

if (adjustmentConfig->mode == ADJUSTMENT_MODE_SELECT) {
int switchPositions = adjustmentConfig->data.switchPositions;
if (adjustmentFunction == ADJUSTMENT_RATE_PROFILE && systemConfig()->rateProfile6PosSwitch) {
switchPositions = 6;
}
const uint16_t rangeWidth = (2100 - 900) / switchPositions;
const uint8_t position = (constrain(rcData[channelIndex], 900, 2100 - 1) - 900) / rangeWidth;
newValue = applySelectAdjustment(adjustmentFunction, position);

setConfigDirtyIfNotPermanent(&adjustmentRange->range);
} else {
// If setting is defined for step adjustment and center value has been specified, apply values directly (scaled) from aux channel
if (adjustmentRange->adjustmentCenter &&
(adjustmentConfig->mode == ADJUSTMENT_MODE_STEP)) {
int value = (((rcData[channelIndex] - PWM_RANGE_MIDDLE) * adjustmentRange->adjustmentScale) / (PWM_RANGE_MIDDLE - PWM_RANGE_MIN)) + adjustmentRange->adjustmentCenter;

newValue = applyAbsoluteAdjustment(controlRateConfig, adjustmentFunction, value);

setConfigDirtyIfNotPermanent(&adjustmentRange->range);

pidInitConfig(currentPidProfile);
}
}

if (isRangeActive(adjustmentRange->auxChannelIndex, &adjustmentRange->range) &&
adjustmentFunction != ADJUSTMENT_NONE) {

if (rcData[channelIndex] != adjustmentState->lastRcData) {
int newValue = -1;

if (adjustmentConfig->mode == ADJUSTMENT_MODE_SELECT) {
int switchPositions = adjustmentConfig->data.switchPositions;
if (adjustmentFunction == ADJUSTMENT_RATE_PROFILE && systemConfig()->rateProfile6PosSwitch) {
switchPositions = 6;
}
const uint16_t rangeWidth = (2100 - 900) / switchPositions;
const uint8_t position = (constrain(rcData[channelIndex], 900, 2100 - 1) - 900) / rangeWidth;
newValue = applySelectAdjustment(adjustmentFunction, position);

setConfigDirtyIfNotPermanent(&adjustmentRange->range);
} else {
// If setting is defined for step adjustment and center value has been specified, apply values directly (scaled) from aux channel
if (adjustmentRange->adjustmentCenter &&
(adjustmentConfig->mode == ADJUSTMENT_MODE_STEP)) {
int value = (((rcData[channelIndex] - PWM_RANGE_MIDDLE) * adjustmentRange->adjustmentScale) / (PWM_RANGE_MIDDLE - PWM_RANGE_MIN)) + adjustmentRange->adjustmentCenter;

newValue = applyAbsoluteAdjustment(controlRateConfig, adjustmentFunction, value);

setConfigDirtyIfNotPermanent(&adjustmentRange->range);

pidInitConfig(currentPidProfile);
}
}
#if defined(USE_OSD) && defined(USE_OSD_ADJUSTMENTS)
updateOsdAdjustmentData(newValue, adjustmentConfig->adjustmentFunction);
updateOsdAdjustmentData(newValue, adjustmentConfig->adjustmentFunction);
#else
UNUSED(newValue);
UNUSED(newValue);
#endif
adjustmentState->lastRcData = rcData[channelIndex];
}
} else {
adjustmentState->lastRcData = 0;
}
}
}

Expand Down

0 comments on commit 1e5e3d3

Please sign in to comment.