From a257210b56f9f7a9684e99352398110557f7b466 Mon Sep 17 00:00:00 2001 From: Martin Budden Date: Thu, 11 Aug 2016 19:29:55 +0100 Subject: [PATCH 1/2] Split features into a separate module --- Makefile | 1 + src/main/blackbox/blackbox.c | 1 + src/main/config/config.c | 61 ++-------------- src/main/config/config.h | 7 -- src/main/config/feature.c | 124 ++++++++++++++++++++++++++++++++ src/main/config/feature.h | 26 +++++++ src/main/fc/mw.c | 1 + src/main/fc/rc_controls.c | 1 + src/main/fc/rc_curves.c | 1 + src/main/flight/mixer.c | 1 + src/main/io/beeper.c | 1 + src/main/io/display.c | 1 + src/main/io/gps.c | 1 + src/main/io/ledstrip.c | 3 +- src/main/io/serial_cli.c | 1 + src/main/io/serial_msp.c | 1 + src/main/main.c | 1 + src/main/rx/pwm.c | 1 + src/main/rx/rx.c | 1 + src/main/sensors/acceleration.c | 1 + src/main/sensors/battery.c | 1 + src/main/sensors/sonar.c | 1 + src/main/telemetry/frsky.c | 1 + src/main/telemetry/smartport.c | 4 +- 24 files changed, 177 insertions(+), 66 deletions(-) create mode 100644 src/main/config/feature.c create mode 100644 src/main/config/feature.h diff --git a/Makefile b/Makefile index 8cb92e667d..9d291017b0 100644 --- a/Makefile +++ b/Makefile @@ -385,6 +385,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 102ff6adcb..5adfa0022a 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 3c3a5f3de8..981b5b4e50 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; @@ -372,10 +377,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) { @@ -872,56 +873,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 9878adc876..292fb13af8 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 0000000000..77b9069f35 --- /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 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 5dc03e2fb5..864a6eedd8 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 dd2903a6ce..dcbeedf8b1 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 55cdce5247..ee69070d46 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 2943290e51..17d9066ac1 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 e015172be7..8ee23cd3b7 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 ce18ee3704..3002ea7d3f 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 11a9f0873e..ac3cfefea8 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 4a361303fc..f8292c553a 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 010fa34d2d..3f8770f663 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 50ee576d64..922a556690 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 98d06a167e..4d1023d587 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 a85fd94759..e01653e2f5 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 d5629bfae3..8667f38f92 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 07cd90b204..97b75326c1 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 532f74ce79..d43e05ab1e 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 88e2f2c47d..2e11e64d97 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 20552b01a4..aa704142a5 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 fcf26b010f..3d585d2f74 100644 --- a/src/main/telemetry/smartport.c +++ b/src/main/telemetry/smartport.c @@ -61,9 +61,7 @@ #include "fc/runtime_config.h" #include "config/config.h" -#include "config/config_profile.h" -extern profile_t *currentProfile; -extern controlRateConfig_t *currentControlRateProfile; +#include "config/feature.h" enum { From a65ac0fab1538d89e52f0d396ee66059e9d43214 Mon Sep 17 00:00:00 2001 From: Martin Budden Date: Sun, 4 Sep 2016 18:55:04 +0100 Subject: [PATCH 2/2] Fixup after rebase --- src/main/telemetry/smartport.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/telemetry/smartport.c b/src/main/telemetry/smartport.c index 3d585d2f74..402bf6a4f4 100644 --- a/src/main/telemetry/smartport.c +++ b/src/main/telemetry/smartport.c @@ -61,8 +61,12 @@ #include "fc/runtime_config.h" #include "config/config.h" +#include "config/config_profile.h" #include "config/feature.h" +extern profile_t *currentProfile; +extern controlRateConfig_t *currentControlRateProfile; + enum { SPSTATE_UNINITIALIZED,