diff --git a/Makefile b/Makefile
index bdad0725fc..de89a9ed8c 100644
--- a/Makefile
+++ b/Makefile
@@ -371,6 +371,7 @@ COMMON_SRC = \
common/typeconversion.c \
common/streambuf.c \
config/config.c \
+ config/feature.c \
fc/runtime_config.c \
drivers/logging.c \
drivers/adc.c \
diff --git a/src/main/blackbox/blackbox.c b/src/main/blackbox/blackbox.c
index 319abe9d7c..b423d382c1 100644
--- a/src/main/blackbox/blackbox.c
+++ b/src/main/blackbox/blackbox.c
@@ -77,6 +77,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 42802b5a17..5f3152a547 100755
--- a/src/main/config/config.c
+++ b/src/main/config/config.c
@@ -72,9 +72,9 @@
#include "fc/runtime_config.h"
#include "config/config.h"
-
#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
@@ -167,7 +167,6 @@ size_t custom_flash_memory_address = 0;
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;
@@ -1168,41 +1167,6 @@ void handleOneshotFeatureChangeOnRestart(void)
}
}
-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)
-{
- masterConfig.enabledFeatures |= mask;
-}
-
-void featureClear(uint32_t mask)
-{
- masterConfig.enabledFeatures &= ~(mask);
-}
-
-void featureClearAll()
-{
- masterConfig.enabledFeatures = 0;
-}
-
-uint32_t featureMask(void)
-{
- return masterConfig.enabledFeatures;
-}
-
void persistentFlagClearAll()
{
masterConfig.persistentFlags = 0;
diff --git a/src/main/config/config.h b/src/main/config/config.h
index 03abdd6e2d..77add5464c 100644
--- a/src/main/config/config.h
+++ b/src/main/config/config.h
@@ -57,13 +57,6 @@ typedef enum {
} persistent_flags_e;
void handleOneshotFeatureChangeOnRestart(void);
-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 100755
index 0000000000..d07ca9f350
--- /dev/null
+++ b/src/main/config/feature.c
@@ -0,0 +1,110 @@
+/*
+ * 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 "common/axis.h"
+#include "common/color.h"
+#include "common/maths.h"
+
+#include "drivers/sensor.h"
+#include "drivers/accgyro.h"
+#include "drivers/compass.h"
+#include "drivers/system.h"
+#include "drivers/gpio.h"
+#include "drivers/timer.h"
+#include "drivers/pwm_rx.h"
+#include "drivers/rx_nrf24l01.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 "rx/rx.h"
+#include "rx/nrf24.h"
+
+#include "blackbox/blackbox_io.h"
+
+#include "telemetry/telemetry.h"
+
+#include "flight/mixer.h"
+#include "flight/pid.h"
+#include "flight/imu.h"
+#include "flight/failsafe.h"
+#include "flight/navigation_rewrite.h"
+
+#include "fc/runtime_config.h"
+
+#include "config/config.h"
+
+#include "config/config_profile.h"
+#include "config/config_master.h"
+
+static uint32_t activeFeaturesLatch = 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)
+{
+ masterConfig.enabledFeatures |= mask;
+}
+
+void featureClear(uint32_t mask)
+{
+ masterConfig.enabledFeatures &= ~(mask);
+}
+
+void featureClearAll()
+{
+ masterConfig.enabledFeatures = 0;
+}
+
+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 0000000000..526d73c839
--- /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 4d23f00644..76a8cae07e 100755
--- a/src/main/fc/mw.c
+++ b/src/main/fc/mw.c
@@ -86,6 +86,7 @@
#include "config/config.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
// June 2013 V2.2-dev
diff --git a/src/main/fc/rc_controls.c b/src/main/fc/rc_controls.c
index 300d9dd172..71d947c8bd 100644
--- a/src/main/fc/rc_controls.c
+++ b/src/main/fc/rc_controls.c
@@ -55,6 +55,7 @@
#include "flight/failsafe.h"
#include "config/config.h"
+#include "config/feature.h"
#include "blackbox/blackbox.h"
diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c
index 524b56791e..da507af818 100755
--- a/src/main/flight/mixer.c
+++ b/src/main/flight/mixer.c
@@ -59,6 +59,7 @@
#include "config/config.h"
#include "config/config_profile.h"
+#include "config/feature.h"
//#define MIXER_DEBUG
diff --git a/src/main/io/beeper.c b/src/main/io/beeper.c
index 639a92254c..0418364e9b 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 9f7aed502c..303d631f19 100644
--- a/src/main/io/display.c
+++ b/src/main/io/display.c
@@ -64,6 +64,7 @@
#include "config/config.h"
+#include "config/feature.h"
#include "display.h"
diff --git a/src/main/io/gps.c b/src/main/io/gps.c
index 86bacf27de..0f0b498885 100755
--- a/src/main/io/gps.c
+++ b/src/main/io/gps.c
@@ -52,6 +52,8 @@
#include "flight/navigation_rewrite.h"
#include "config/config.h"
+#include "config/feature.h"
+
#include "fc/runtime_config.h"
// GPS timeout for wrong baud rate/disconnection/etc in milliseconds (default 2000 ms)
diff --git a/src/main/io/ledstrip.c b/src/main/io/ledstrip.c
index 8d9249fef8..fc05ab1cec 100644
--- a/src/main/io/ledstrip.c
+++ b/src/main/io/ledstrip.c
@@ -75,6 +75,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/ledstrip.h b/src/main/io/ledstrip.h
index 30450cf05d..e281822102 100644
--- a/src/main/io/ledstrip.h
+++ b/src/main/io/ledstrip.h
@@ -134,7 +134,8 @@ typedef struct ledCounts_s {
ledConfig_t *ledConfigs;
-hsvColor_t *colors;
+struct hsvColor_s;
+struct hsvColor_s *colors;
modeColorIndexes_t *modeColors;
specialColorIndexes_t specialColors;
@@ -163,7 +164,7 @@ bool parseLedStripConfig(int ledIndex, const char *config);
void generateLedConfig(ledConfig_t *ledConfig, char *ledConfigBuffer, size_t bufferSize);
void reevaluateLedConfig(void);
-void ledStripInit(ledConfig_t *ledConfigsToUse, hsvColor_t *colorsToUse, modeColorIndexes_t *modeColorsToUse, specialColorIndexes_t *specialColorsToUse);
+void ledStripInit(ledConfig_t *ledConfigsToUse, struct hsvColor_s *colorsToUse, modeColorIndexes_t *modeColorsToUse, specialColorIndexes_t *specialColorsToUse);
void ledStripEnable(void);
void updateLedStrip(void);
@@ -173,7 +174,7 @@ extern uint16_t rssi; // FIXME dependency on mw.c
void applyDefaultLedStripConfig(ledConfig_t *ledConfig);
-void applyDefaultColors(hsvColor_t *colors);
+void applyDefaultColors(struct hsvColor_s *colors);
void applyDefaultModeColors(modeColorIndexes_t *modeColors);
void applyDefaultSpecialColors(specialColorIndexes_t *specialColors);
diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c
index 1853b87c61..8ea81bbfee 100644
--- a/src/main/io/serial_cli.c
+++ b/src/main/io/serial_cli.c
@@ -91,6 +91,7 @@
#include "config/config.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 6616a01c0d..36c3e15362 100644
--- a/src/main/io/serial_msp.c
+++ b/src/main/io/serial_msp.c
@@ -88,6 +88,7 @@
#include "config/config.h"
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#include "blackbox/blackbox.h"
diff --git a/src/main/main.c b/src/main/main.c
index ef82f530a4..070d7d2d53 100644
--- a/src/main/main.c
+++ b/src/main/main.c
@@ -106,6 +106,7 @@
#include "config/config.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/rx/pwm.c b/src/main/rx/pwm.c
index 900d017372..f5bbe544c3 100644
--- a/src/main/rx/pwm.c
+++ b/src/main/rx/pwm.c
@@ -33,6 +33,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 9a0ef4cd22..915ae3202c 100644
--- a/src/main/rx/rx.c
+++ b/src/main/rx/rx.c
@@ -31,6 +31,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/battery.c b/src/main/sensors/battery.c
index 7a0950ca42..a637a8ccbb 100644
--- a/src/main/sensors/battery.c
+++ b/src/main/sensors/battery.c
@@ -29,6 +29,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
#include "sensors/battery.h"
diff --git a/src/main/sensors/initialisation.c b/src/main/sensors/initialisation.c
index 6eced42ae3..746de46269 100755
--- a/src/main/sensors/initialisation.c
+++ b/src/main/sensors/initialisation.c
@@ -67,6 +67,7 @@
#include "fc/runtime_config.h"
#include "config/config.h"
+#include "config/feature.h"
#include "io/gps.h"
diff --git a/src/main/telemetry/frsky.c b/src/main/telemetry/frsky.c
index fe7887fa8f..c9c9b078fc 100644
--- a/src/main/telemetry/frsky.c
+++ b/src/main/telemetry/frsky.c
@@ -59,6 +59,7 @@
#include "flight/navigation_rewrite.h"
#include "config/config.h"
+#include "config/feature.h"
#include "telemetry/telemetry.h"
#include "telemetry/frsky.h"
diff --git a/src/main/telemetry/mavlink.c b/src/main/telemetry/mavlink.c
index 9a3fc7514b..ac48e9caf0 100755
--- a/src/main/telemetry/mavlink.c
+++ b/src/main/telemetry/mavlink.c
@@ -74,6 +74,7 @@
#include "config/config_profile.h"
#include "config/config_master.h"
+#include "config/feature.h"
#include "fc/mw.h"
diff --git a/src/main/telemetry/smartport.c b/src/main/telemetry/smartport.c
index 1cd7a82e38..ee518ff883 100644
--- a/src/main/telemetry/smartport.c
+++ b/src/main/telemetry/smartport.c
@@ -57,6 +57,7 @@
#include "telemetry/smartport.h"
#include "config/config.h"
+#include "config/feature.h"
enum
{