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;