1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-24 00:35:34 +03:00

Merge pull request #3482 from iNavFlight/de_rcdata_ignore_failsafe

Ignore RC channel values sent by receiver in failsafe
This commit is contained in:
Konstantin Sharlaimov 2018-07-16 21:05:16 +02:00 committed by GitHub
commit 3e670db83c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 4 deletions

View file

@ -486,7 +486,7 @@ static bool mspFcProcessOutCommand(uint16_t cmdMSP, sbuf_t *dst, mspPostProcessF
case MSP_RC:
for (int i = 0; i < rxRuntimeConfig.channelCount; i++) {
sbufWriteU16(dst, rcData[i]);
sbufWriteU16(dst, rcRaw[i]);
}
break;

View file

@ -470,6 +470,7 @@ bool calculateRxChannelsAndUpdateFailsafe(timeUs_t currentTimeUs)
{
UNUSED(currentTimeUs);
int16_t rcStaging[MAX_SUPPORTED_RC_CHANNEL_COUNT];
const timeMs_t currentTimeMs = millis();
if (auxiliaryProcessingRequired) {
@ -520,11 +521,21 @@ bool calculateRxChannelsAndUpdateFailsafe(timeUs_t currentTimeUs)
rcInvalidPulsPeriod[channel] = currentTimeMs + MAX_INVALID_PULS_TIME;
}
// Update rcData channel value
// Save channel value
rcStaging[channel] = sample;
}
// Update rcData channel value if receiver is not in failsafe mode
// If receiver is in failsafe (not receiving signal or sending invalid channel values) - last good rcData values are retained
if (rxFlightChannelsValid && rxSignalReceived) {
if (rxRuntimeConfig.requireFiltering) {
rcData[channel] = applyChannelFiltering(channel, sample);
for (int channel = 0; channel < rxRuntimeConfig.channelCount; channel++) {
rcData[channel] = applyChannelFiltering(channel, rcStaging[channel]);
}
} else {
rcData[channel] = sample;
for (int channel = 0; channel < rxRuntimeConfig.channelCount; channel++) {
rcData[channel] = rcStaging[channel];
}
}
}

View file

@ -93,6 +93,7 @@ typedef enum {
extern const char rcChannelLetters[];
extern int16_t rcRaw[MAX_SUPPORTED_RC_CHANNEL_COUNT]; // interval [1000;2000]
extern int16_t rcData[MAX_SUPPORTED_RC_CHANNEL_COUNT]; // interval [1000;2000]
#define MAX_MAPPABLE_RX_INPUTS 4