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 {