diff --git a/src/main/config/config.c b/src/main/config/config.c index 6764ad4abd..1c884eeadd 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -829,6 +829,8 @@ void readEEPROM(void) if (!isEEPROMContentValid()) failureMode(10); + suspendRxSignal(); + // Read flash memcpy(&masterConfig, (char *) CONFIG_START_FLASH_ADDRESS, sizeof(master_t)); @@ -844,6 +846,8 @@ void readEEPROM(void) validateAndFixConfig(); activateConfig(); + + resumeRxSignal(); } void readEEPROMAndNotify(void) @@ -862,6 +866,8 @@ void writeEEPROM(void) uint32_t wordOffset; int8_t attemptsRemaining = 3; + suspendRxSignal(); + // prepare checksum/version constants masterConfig.version = EEPROM_CONF_VERSION; masterConfig.size = sizeof(master_t); @@ -903,6 +909,8 @@ void writeEEPROM(void) if (status != FLASH_COMPLETE || !isEEPROMContentValid()) { failureMode(10); } + + resumeRxSignal(); } void ensureEEPROMContainsValidData(void) diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c index 78016c43bb..0d77bedaeb 100644 --- a/src/main/rx/rx.c +++ b/src/main/rx/rx.c @@ -71,6 +71,7 @@ static bool rxFlightChannelsValid = false; static uint32_t rxUpdateAt = 0; static uint32_t needRxSignalBefore = 0; +static uint8_t skipRxSamples = 0; int16_t rcRaw[MAX_SUPPORTED_RC_CHANNEL_COUNT]; // interval [1000;2000] int16_t rcData[MAX_SUPPORTED_RC_CHANNEL_COUNT]; // interval [1000;2000] @@ -79,6 +80,8 @@ int16_t rcData[MAX_SUPPORTED_RC_CHANNEL_COUNT]; // interval [1000;2000] #define DELAY_50_HZ (1000000 / 50) #define DELAY_10_HZ (1000000 / 10) +#define SKIP_RC_SAMPLES_ON_SUSPEND 75 // approx. 1.5 seconds of samples at 50Hz +#define SKIP_RC_SAMPLES_ON_RESUME 2 // flush 2 samples to drop wrong measurements rxRuntimeConfig_t rxRuntimeConfig; static rxConfig_t *rxConfig; @@ -261,6 +264,16 @@ static void resetRxSignalReceivedFlagIfNeeded(uint32_t currentTime) } } +void suspendRxSignal(void) +{ + skipRxSamples = SKIP_RC_SAMPLES_ON_SUSPEND; +} + +void resumeRxSignal(void) +{ + skipRxSamples = SKIP_RC_SAMPLES_ON_RESUME; +} + void updateRx(uint32_t currentTime) { resetRxSignalReceivedFlagIfNeeded(currentTime); @@ -467,6 +480,11 @@ void calculateRxChannelsAndUpdateFailsafe(uint32_t currentTime) } } + if (skipRxSamples) { + skipRxSamples--; + return; + } + readRxChannelsApplyRanges(); detectAndApplySignalLossBehaviour(); diff --git a/src/main/rx/rx.h b/src/main/rx/rx.h index 7ab45f1066..ef6c3df431 100644 --- a/src/main/rx/rx.h +++ b/src/main/rx/rx.h @@ -142,3 +142,5 @@ uint8_t serialRxFrameStatus(rxConfig_t *rxConfig); void updateRSSI(uint32_t currentTime); void resetAllRxChannelRangeConfigurations(rxChannelRangeConfiguration_t *rxChannelRangeConfiguration); +void suspendRxSignal(void); +void resumeRxSignal(void);