Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions src/main/fc/fc_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -483,9 +483,10 @@ void processRx(timeUs_t currentTimeUs)

updateActivatedModes();

if ((!cliMode) && (!FLIGHT_MODE(FAILSAFE_MODE))) {
updateAdjustmentStates();
processRcAdjustments(CONST_CAST(controlRateConfig_t*, currentControlRateProfile));
if (!cliMode) {
bool canUseRxData = rxIsReceivingSignal() && !FLIGHT_MODE(FAILSAFE_MODE);
updateAdjustmentStates(canUseRxData);
processRcAdjustments(CONST_CAST(controlRateConfig_t*, currentControlRateProfile), canUseRxData);
}

bool canUseHorizonMode = true;
Expand Down
19 changes: 10 additions & 9 deletions src/main/fc/rc_adjustments.c
Original file line number Diff line number Diff line change
Expand Up @@ -570,12 +570,10 @@ static void applySelectAdjustment(uint8_t adjustmentFunction, uint8_t position)

#define RESET_FREQUENCY_2HZ (1000 / 2)

void processRcAdjustments(controlRateConfig_t *controlRateConfig)
void processRcAdjustments(controlRateConfig_t *controlRateConfig, bool canUseRxData)
{
const uint32_t now = millis();

const bool canUseRxData = rxIsReceivingSignal();

for (int adjustmentIndex = 0; adjustmentIndex < MAX_SIMULTANEOUS_ADJUSTMENT_COUNT; adjustmentIndex++) {
adjustmentState_t * const adjustmentState = &adjustmentStates[adjustmentIndex];

Expand Down Expand Up @@ -636,23 +634,26 @@ void resetAdjustmentStates(void)
memset(adjustmentStates, 0, sizeof(adjustmentStates));
}

void updateAdjustmentStates(void)
void updateAdjustmentStates(bool canUseRxData)
{
for (int index = 0; index < MAX_ADJUSTMENT_RANGE_COUNT; index++) {
const adjustmentRange_t * const adjustmentRange = adjustmentRanges(index);
const adjustmentConfig_t *adjustmentConfig = &defaultAdjustmentConfigs[adjustmentRange->adjustmentFunction - ADJUSTMENT_FUNCTION_CONFIG_INDEX_OFFSET];

if (isRangeActive(adjustmentRange->auxChannelIndex, &adjustmentRange->range)) {

const adjustmentConfig_t *adjustmentConfig = &defaultAdjustmentConfigs[adjustmentRange->adjustmentFunction - ADJUSTMENT_FUNCTION_CONFIG_INDEX_OFFSET];

if (canUseRxData && isRangeActive(adjustmentRange->auxChannelIndex, &adjustmentRange->range)) {
configureAdjustment(adjustmentRange->adjustmentIndex, adjustmentRange->auxSwitchChannelIndex, adjustmentConfig);
} else {
adjustmentState_t * const adjustmentState = &adjustmentStates[index];
if (adjustmentState->config == adjustmentConfig) {
adjustmentState->config = NULL;
}
}
}
}

bool isAdjustmentFunctionSelected(uint8_t adjustmentFunction) {
for (uint8_t index = 0; index < MAX_SIMULTANEOUS_ADJUSTMENT_COUNT; ++index) {
if (adjustmentStates[index].config->adjustmentFunction == adjustmentFunction) {
if (adjustmentStates[index].config && adjustmentStates[index].config->adjustmentFunction == adjustmentFunction) {
return true;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/fc/rc_adjustments.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ typedef struct adjustmentState_s {
PG_DECLARE_ARRAY(adjustmentRange_t, MAX_ADJUSTMENT_RANGE_COUNT, adjustmentRanges);

void resetAdjustmentStates(void);
void updateAdjustmentStates(void);
void updateAdjustmentStates(bool canUseRxData);
struct controlRateConfig_s;
void processRcAdjustments(struct controlRateConfig_s *controlRateConfig);
void processRcAdjustments(struct controlRateConfig_s *controlRateConfig, bool canUseRxData);
bool isAdjustmentFunctionSelected(uint8_t adjustmentFunction);