From 25c6b038d9ce2c7991711786cc8993da5d85aff6 Mon Sep 17 00:00:00 2001 From: Bruce Luckcuck Date: Sun, 29 Jul 2018 17:16:01 -0400 Subject: [PATCH] Changes from review Used HZ_TO_INTERVAL_US() instead of hardcoded 500us. Moved tests into a dedicated function. --- src/main/fc/config.c | 5 ++++- src/main/sensors/gyro.c | 2 +- src/main/sensors/gyro.h | 2 -- src/main/sensors/gyroanalyse.c | 3 +++ src/main/sensors/gyroanalyse.h | 1 + 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/fc/config.c b/src/main/fc/config.c index f431fbb1b2..0e34b57449 100644 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -60,6 +60,7 @@ #include "sensors/acceleration.h" #include "sensors/battery.h" #include "sensors/gyro.h" +#include "sensors/gyroanalyse.h" #ifndef USE_OSD_SLAVE pidProfile_t *currentPidProfile; @@ -410,10 +411,12 @@ static void validateAndFixConfig(void) #ifndef USE_OSD_SLAVE void validateAndFixGyroConfig(void) { +#ifdef USE_GYRO_DATA_ANALYSE // Disable dynamic filter if gyro loop is less than 2KHz - if (gyro.targetLooptime > GYRO_LOOPTIME_2KHZ) { + if (!dynamicFilterAllowed()) { featureClear(FEATURE_DYNAMIC_FILTER); } +#endif // Prevent invalid notch cutoff if (gyroConfig()->gyro_soft_notch_cutoff_1 >= gyroConfig()->gyro_soft_notch_hz_1) { diff --git a/src/main/sensors/gyro.c b/src/main/sensors/gyro.c index 9fece16361..1e505651e6 100644 --- a/src/main/sensors/gyro.c +++ b/src/main/sensors/gyro.c @@ -743,7 +743,7 @@ static void gyroInitFilterNotch2(gyroSensor_t *gyroSensor, uint16_t notchHz, uin #ifdef USE_GYRO_DATA_ANALYSE static bool isDynamicFilterActive(void) { - return feature(FEATURE_DYNAMIC_FILTER) && (gyro.targetLooptime <= GYRO_LOOPTIME_2KHZ); + return feature(FEATURE_DYNAMIC_FILTER) && dynamicFilterAllowed(); } static void gyroInitFilterDynamicNotch(gyroSensor_t *gyroSensor) diff --git a/src/main/sensors/gyro.h b/src/main/sensors/gyro.h index 58fc175404..b726620343 100644 --- a/src/main/sensors/gyro.h +++ b/src/main/sensors/gyro.h @@ -26,8 +26,6 @@ #include "drivers/bus.h" #include "drivers/sensor.h" -#define GYRO_LOOPTIME_2KHZ 500 - typedef enum { GYRO_NONE = 0, GYRO_DEFAULT, diff --git a/src/main/sensors/gyroanalyse.c b/src/main/sensors/gyroanalyse.c index 236126739e..c69e731f4a 100644 --- a/src/main/sensors/gyroanalyse.c +++ b/src/main/sensors/gyroanalyse.c @@ -304,4 +304,7 @@ static FAST_CODE_NOINLINE void gyroDataAnalyseUpdate(gyroAnalyseState_t *state, state->updateStep = (state->updateStep + 1) % STEP_COUNT; } +bool dynamicFilterAllowed(void) { + return (gyro.targetLooptime <= HZ_TO_INTERVAL_US(2000)); +} #endif // USE_GYRO_DATA_ANALYSE diff --git a/src/main/sensors/gyroanalyse.h b/src/main/sensors/gyroanalyse.h index 89d4401f3f..58a3449c63 100644 --- a/src/main/sensors/gyroanalyse.h +++ b/src/main/sensors/gyroanalyse.h @@ -61,3 +61,4 @@ void gyroDataAnalyseInit(void); void gyroDataAnalyseStateInit(gyroAnalyseState_t *gyroAnalyse, uint32_t targetLooptime); void gyroDataAnalysePush(gyroAnalyseState_t *gyroAnalyse, int axis, float sample); void gyroDataAnalyse(gyroAnalyseState_t *gyroAnalyse, biquadFilter_t *notchFilterDyn); +bool dynamicFilterAllowed(void);