diff --git a/Makefile b/Makefile
index 25ee31456..add849a2b 100644
--- a/Makefile
+++ b/Makefile
@@ -403,6 +403,7 @@ COMMON_SRC = \
common/typeconversion.c \
config/config.c \
config/config_eeprom.c \
+ config/feature.c \
fc/runtime_config.c \
drivers/adc.c \
drivers/buf_writer.c \
diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c
index a0833a9a1..7192e79d7 100644
--- a/src/main/blackbox/blackbox.c
+++ b/src/main/blackbox/blackbox.c
@@ -81,6 +81,7 @@
#include "config/config.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#include "blackbox.h"
#include "blackbox_io.h"
diff --git a/src/main/config/config.c b/src/main/config/config.c
index cf0c217c8..fac719dd4 100755
--- a/src/main/config/config.c
+++ b/src/main/config/config.c
@@ -80,6 +80,7 @@
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#ifndef DEFAULT_RX_FEATURE
#define DEFAULT_RX_FEATURE FEATURE_RX_PARALLEL_PWM
@@ -97,11 +98,15 @@ void targetConfiguration(master_t *config);
master_t masterConfig; // master config struct with data independent from profiles
profile_t *currentProfile;
-static uint32_t activeFeaturesLatch = 0;
static uint8_t currentControlRateProfileIndex = 0;
controlRateConfig_t *currentControlRateProfile;
+
+void intFeatureClearAll(master_t *config);
+void intFeatureSet(uint32_t mask, master_t *config);
+void intFeatureClear(uint32_t mask, master_t *config);
+
static void resetAccelerometerTrims(flightDynamicsTrims_t *accelerometerTrims)
{
accelerometerTrims->values.pitch = 0;
@@ -371,10 +376,6 @@ uint16_t getCurrentMinthrottle(void)
return masterConfig.escAndServoConfig.minthrottle;
}
-static void intFeatureClearAll(master_t *config);
-static void intFeatureSet(uint32_t mask, master_t *config);
-static void intFeatureClear(uint32_t mask, master_t *config);
-
// Default settings
void createDefaultConfig(master_t *config)
{
@@ -865,56 +866,6 @@ void changeControlRateProfile(uint8_t profileIndex)
activateControlRateConfig();
}
-void latchActiveFeatures()
-{
- activeFeaturesLatch = masterConfig.enabledFeatures;
-}
-
-bool featureConfigured(uint32_t mask)
-{
- return masterConfig.enabledFeatures & mask;
-}
-
-bool feature(uint32_t mask)
-{
- return activeFeaturesLatch & mask;
-}
-
-void featureSet(uint32_t mask)
-{
- intFeatureSet(mask, &masterConfig);
-}
-
-static void intFeatureSet(uint32_t mask, master_t *config)
-{
- config->enabledFeatures |= mask;
-}
-
-void featureClear(uint32_t mask)
-{
- intFeatureClear(mask, &masterConfig);
-}
-
-static void intFeatureClear(uint32_t mask, master_t *config)
-{
- config->enabledFeatures &= ~(mask);
-}
-
-void featureClearAll()
-{
- intFeatureClearAll(&masterConfig);
-}
-
-static void intFeatureClearAll(master_t *config)
-{
- config->enabledFeatures = 0;
-}
-
-uint32_t featureMask(void)
-{
- return masterConfig.enabledFeatures;
-}
-
void beeperOffSet(uint32_t mask)
{
masterConfig.beeper_off_flags |= mask;
diff --git a/src/main/config/config.h b/src/main/config/config.h
index 9878adc87..292fb13af 100644
--- a/src/main/config/config.h
+++ b/src/main/config/config.h
@@ -55,13 +55,6 @@ typedef enum {
FEATURE_SOFTSPI = 1 << 26,
} features_e;
-void latchActiveFeatures(void);
-bool featureConfigured(uint32_t mask);
-bool feature(uint32_t mask);
-void featureSet(uint32_t mask);
-void featureClear(uint32_t mask);
-void featureClearAll(void);
-uint32_t featureMask(void);
void beeperOffSet(uint32_t mask);
void beeperOffSetAll(uint8_t beeperCount);
void beeperOffClear(uint32_t mask);
diff --git a/src/main/config/feature.c b/src/main/config/feature.c
new file mode 100644
index 000000000..77b9069f3
--- /dev/null
+++ b/src/main/config/feature.c
@@ -0,0 +1,124 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#include
+#include
+#include
+
+#include "platform.h"
+
+#include "build/build_config.h"
+
+#include "common/color.h"
+#include "common/axis.h"
+
+#include "drivers/sensor.h"
+#include "drivers/accgyro.h"
+#include "drivers/compass.h"
+#include "drivers/system.h"
+#include "drivers/timer.h"
+#include "drivers/pwm_rx.h"
+#include "drivers/serial.h"
+
+#include "sensors/sensors.h"
+#include "sensors/gyro.h"
+#include "sensors/compass.h"
+#include "sensors/acceleration.h"
+#include "sensors/barometer.h"
+#include "sensors/boardalignment.h"
+#include "sensors/battery.h"
+
+#include "io/beeper.h"
+#include "io/serial.h"
+#include "io/gimbal.h"
+#include "io/escservo.h"
+#include "fc/rc_controls.h"
+#include "fc/rc_curves.h"
+#include "io/ledstrip.h"
+#include "io/gps.h"
+#include "io/osd.h"
+#include "io/vtx.h"
+
+#include "rx/rx.h"
+
+#include "telemetry/telemetry.h"
+
+#include "flight/mixer.h"
+#include "flight/pid.h"
+#include "flight/imu.h"
+#include "flight/failsafe.h"
+#include "flight/altitudehold.h"
+#include "flight/navigation.h"
+
+#include "config/config.h"
+#include "config/config_profile.h"
+#include "config/config_master.h"
+#include "config/feature.h"
+
+static uint32_t activeFeaturesLatch = 0;
+
+void intFeatureSet(uint32_t mask, master_t *config)
+{
+ config->enabledFeatures |= mask;
+}
+
+void intFeatureClear(uint32_t mask, master_t *config)
+{
+ config->enabledFeatures &= ~(mask);
+}
+
+void intFeatureClearAll(master_t *config)
+{
+ config->enabledFeatures = 0;
+}
+
+void latchActiveFeatures()
+{
+ activeFeaturesLatch = masterConfig.enabledFeatures;
+}
+
+bool featureConfigured(uint32_t mask)
+{
+ return masterConfig.enabledFeatures & mask;
+}
+
+bool feature(uint32_t mask)
+{
+ return activeFeaturesLatch & mask;
+}
+
+void featureSet(uint32_t mask)
+{
+ intFeatureSet(mask, &masterConfig);
+}
+
+void featureClear(uint32_t mask)
+{
+ intFeatureClear(mask, &masterConfig);
+}
+
+void featureClearAll()
+{
+ intFeatureClearAll(&masterConfig);
+}
+
+uint32_t featureMask(void)
+{
+ return masterConfig.enabledFeatures;
+}
+
+
diff --git a/src/main/config/feature.h b/src/main/config/feature.h
new file mode 100644
index 000000000..526d73c83
--- /dev/null
+++ b/src/main/config/feature.h
@@ -0,0 +1,26 @@
+/*
+ * This file is part of Cleanflight.
+ *
+ * Cleanflight is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Cleanflight is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cleanflight. If not, see .
+ */
+
+#pragma once
+
+void latchActiveFeatures(void);
+bool featureConfigured(uint32_t mask);
+bool feature(uint32_t mask);
+void featureSet(uint32_t mask);
+void featureClear(uint32_t mask);
+void featureClearAll(void);
+uint32_t featureMask(void);
diff --git a/src/main/fc/mw.c b/src/main/fc/mw.c
index 9737e4c7a..507c400b2 100644
--- a/src/main/fc/mw.c
+++ b/src/main/fc/mw.c
@@ -87,6 +87,7 @@
#include "config/config.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#include "scheduler/scheduler.h"
#include "scheduler/scheduler_tasks.h"
diff --git a/src/main/fc/rc_controls.c b/src/main/fc/rc_controls.c
index dd2903a6c..dcbeedf8b 100644
--- a/src/main/fc/rc_controls.c
+++ b/src/main/fc/rc_controls.c
@@ -29,6 +29,7 @@
#include "common/maths.h"
#include "config/config.h"
+#include "config/feature.h"
#include "fc/runtime_config.h"
diff --git a/src/main/fc/rc_curves.c b/src/main/fc/rc_curves.c
index 55cdce524..ee69070d4 100644
--- a/src/main/fc/rc_curves.c
+++ b/src/main/fc/rc_curves.c
@@ -21,6 +21,7 @@
#include "platform.h"
#include "config/config.h"
+#include "config/feature.h"
#include "io/escservo.h"
diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c
index eb24f5bb1..43bd2bbe2 100755
--- a/src/main/flight/mixer.c
+++ b/src/main/flight/mixer.c
@@ -55,6 +55,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
uint8_t motorCount;
diff --git a/src/main/io/beeper.c b/src/main/io/beeper.c
index e015172be..8ee23cd3b 100644
--- a/src/main/io/beeper.c
+++ b/src/main/io/beeper.c
@@ -41,6 +41,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
#include "io/beeper.h"
diff --git a/src/main/io/display.c b/src/main/io/display.c
index ce18ee370..3002ea7d3 100644
--- a/src/main/io/display.c
+++ b/src/main/io/display.c
@@ -58,6 +58,7 @@
#endif
#include "config/config.h"
+#include "config/feature.h"
#include "fc/runtime_config.h"
#include "config/config_profile.h"
diff --git a/src/main/io/gps.c b/src/main/io/gps.c
index 11a9f0873..ac3cfefea 100755
--- a/src/main/io/gps.c
+++ b/src/main/io/gps.c
@@ -50,6 +50,7 @@
#include "flight/navigation.h"
#include "config/config.h"
+#include "config/feature.h"
#include "fc/runtime_config.h"
diff --git a/src/main/io/ledstrip.c b/src/main/io/ledstrip.c
index 14697322b..38bbef5ff 100644
--- a/src/main/io/ledstrip.c
+++ b/src/main/io/ledstrip.c
@@ -40,7 +40,7 @@
#include "drivers/timer.h"
#include "drivers/pwm_rx.h"
-#include
+#include "common/printf.h"
#include "common/axis.h"
#include "common/utils.h"
@@ -77,6 +77,7 @@
#include "config/config.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
/*
PG_REGISTER_ARR_WITH_RESET_FN(ledConfig_t, LED_MAX_STRIP_LENGTH, ledConfigs, PG_LED_STRIP_CONFIG, 0);
diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c
index a8eb7a3e5..e4efae4f6 100644
--- a/src/main/io/serial_cli.c
+++ b/src/main/io/serial_cli.c
@@ -89,6 +89,7 @@
#include "config/config_eeprom.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#include "common/printf.h"
diff --git a/src/main/io/serial_msp.c b/src/main/io/serial_msp.c
index 25b157108..dd2feb6b2 100644
--- a/src/main/io/serial_msp.c
+++ b/src/main/io/serial_msp.c
@@ -94,6 +94,7 @@
#include "config/config_eeprom.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#ifdef USE_HARDWARE_REVISION_DETECTION
#include "hardware_revision.h"
diff --git a/src/main/main.c b/src/main/main.c
index 98d06a167..4d1023d58 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -108,6 +108,7 @@
#include "config/config_eeprom.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#define LOOPTIME_SUSPEND_TIME 3 // Prevent too long busy wait times
diff --git a/src/main/rx/pwm.c b/src/main/rx/pwm.c
index a85fd9475..e01653e2f 100644
--- a/src/main/rx/pwm.c
+++ b/src/main/rx/pwm.c
@@ -32,6 +32,7 @@
#include "drivers/pwm_rx.h"
#include "config/config.h"
+#include "config/feature.h"
#include "rx/rx.h"
#include "rx/pwm.h"
diff --git a/src/main/rx/rx.c b/src/main/rx/rx.c
index d5629bfae..8667f38f9 100644
--- a/src/main/rx/rx.c
+++ b/src/main/rx/rx.c
@@ -29,6 +29,7 @@
#include "common/maths.h"
#include "config/config.h"
+#include "config/feature.h"
#include "drivers/serial.h"
#include "drivers/adc.h"
diff --git a/src/main/sensors/acceleration.c b/src/main/sensors/acceleration.c
index 07cd90b20..97b75326c 100644
--- a/src/main/sensors/acceleration.c
+++ b/src/main/sensors/acceleration.c
@@ -34,6 +34,7 @@
#include "io/beeper.h"
#include "sensors/boardalignment.h"
#include "config/config.h"
+#include "config/feature.h"
#include "sensors/acceleration.h"
diff --git a/src/main/sensors/battery.c b/src/main/sensors/battery.c
index 33eec1689..fab68e1c1 100644
--- a/src/main/sensors/battery.c
+++ b/src/main/sensors/battery.c
@@ -31,6 +31,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
#include "sensors/battery.h"
diff --git a/src/main/sensors/sonar.c b/src/main/sensors/sonar.c
index 88e2f2c47..2e11e64d9 100644
--- a/src/main/sensors/sonar.c
+++ b/src/main/sensors/sonar.c
@@ -33,6 +33,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
#include "sensors/sensors.h"
#include "sensors/battery.h"
diff --git a/src/main/telemetry/frsky.c b/src/main/telemetry/frsky.c
index 20552b01a..aa704142a 100644
--- a/src/main/telemetry/frsky.c
+++ b/src/main/telemetry/frsky.c
@@ -59,6 +59,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
#include "telemetry/telemetry.h"
#include "telemetry/frsky.h"
diff --git a/src/main/telemetry/smartport.c b/src/main/telemetry/smartport.c
index fcf26b010..402bf6a4f 100644
--- a/src/main/telemetry/smartport.c
+++ b/src/main/telemetry/smartport.c
@@ -62,6 +62,8 @@
#include "config/config.h"
#include "config/config_profile.h"
+#include "config/feature.h"
+
extern profile_t *currentProfile;
extern controlRateConfig_t *currentControlRateProfile;