From 0f4a3028c55828cb6270f8f44ae84e3b2c49ede4 Mon Sep 17 00:00:00 2001 From: Martin Budden Date: Sun, 26 Feb 2017 14:34:16 +0000 Subject: [PATCH] Added PG config definitions 7 --- src/main/config/parameter_group_ids.h | 14 +++- src/main/fc/config.c | 108 +++++++++++++++++--------- src/main/flight/altitudehold.c | 6 ++ src/main/flight/mixer.c | 2 + src/main/flight/servos.c | 3 + src/main/io/beeper.c | 34 ++++++-- 6 files changed, 119 insertions(+), 48 deletions(-) diff --git a/src/main/config/parameter_group_ids.h b/src/main/config/parameter_group_ids.h index b42d360939..8f62429de4 100644 --- a/src/main/config/parameter_group_ids.h +++ b/src/main/config/parameter_group_ids.h @@ -47,7 +47,7 @@ #define PG_MOTOR_3D_CONFIG 26 // Cleanflight has motor3DConfig_t, betaflight has flight3DConfig_t with more parameters #define PG_LED_STRIP_CONFIG 27 // structs OK #define PG_COLOR_CONFIG 28 // part of led strip, structs OK -#define PG_AIRPLANE_ALT_HOLD_CONFIG 29 // struct OK +#define PG_AIRPLANE_CONFIG 29 // struct OK #define PG_GPS_CONFIG 30 // struct OK #define PG_TELEMETRY_CONFIG 31 // betaflight has more and different data in telemetryConfig_t #define PG_FRSKY_TELEMETRY_CONFIG 32 // Cleanflight has split data out of PG_TELEMETRY_CONFIG @@ -84,9 +84,15 @@ #define PG_MODE_ACTIVATION_OPERATOR_CONFIG 500 #define PG_OSD_CONFIG 501 #define PG_BEEPER_CONFIG 502 -#define PG_PID_CONFIG 503 -#define PG_STATUS_LED_CONFIG 504 -#define PG_BETAFLIGHT_END 504 +#define PG_BEEPER_DEV_CONFIG 503 +#define PG_PID_CONFIG 504 +#define PG_STATUS_LED_CONFIG 505 +#define PG_FLASH_CONFIG 506 +#define PG_PPM_CONFIG 507 +#define PG_PWM_CONFIG 508 +#define PG_SERIAL_PIN_CONFIG 509 +#define PG_ADC_CONFIG 510 +#define PG_BETAFLIGHT_END 510 // OSD configuration (subject to change) diff --git a/src/main/fc/config.c b/src/main/fc/config.c index 8f194d1f4c..291a7a6cd8 100755 --- a/src/main/fc/config.c +++ b/src/main/fc/config.c @@ -94,6 +94,9 @@ #include "telemetry/telemetry.h" +master_t masterConfig; // master config struct with data independent from profiles +profile_t *currentProfile; + #ifndef DEFAULT_FEATURES #define DEFAULT_FEATURES 0 #endif @@ -122,10 +125,24 @@ PG_RESET_TEMPLATE(systemConfig_t, systemConfig, PG_REGISTER(beeperConfig_t, beeperConfig, PG_BEEPER_CONFIG, 0); +PG_REGISTER_WITH_RESET_FN(adcConfig_t, adcConfig, PG_ADC_CONFIG, 0); +PG_REGISTER_WITH_RESET_FN(pwmConfig_t, pwmConfig, PG_PWM_CONFIG, 0); +PG_REGISTER_WITH_RESET_FN(ppmConfig_t, ppmConfig, PG_PPM_CONFIG, 0); PG_REGISTER_WITH_RESET_FN(statusLedConfig_t, statusLedConfig, PG_STATUS_LED_CONFIG, 0); +PG_REGISTER_WITH_RESET_FN(serialPinConfig_t, serialPinConfig, PG_SERIAL_PIN_CONFIG, 0); -master_t masterConfig; // master config struct with data independent from profiles -profile_t *currentProfile; +PG_REGISTER_WITH_RESET_TEMPLATE(flashConfig_t, flashConfig, PG_FLASH_CONFIG, 0); +#ifdef USE_FLASHFS +#ifdef M25P16_CS_PIN +#define FLASH_CONFIG_CSTAG IO_TAG(M25P16_CS_PIN) +#else +#define FLASH_CONFIG_CSTAG IO_TAG_NONE +#endif + +PG_RESET_TEMPLATE(flashConfig_t, flashConfig, + .csTag = FLASH_CONFIG_CSTAG +); +#endif #ifndef USE_PARAMETER_GROUPS static void resetAccelerometerTrims(flightDynamicsTrims_t *accelerometerTrims) @@ -344,7 +361,11 @@ void resetsdcardConfig(sdcardConfig_t *sdcardConfig) #endif #ifdef USE_ADC +#ifdef USE_PARAMETER_GROUPS +void pgResetFn_adcConfig(adcConfig_t *adcConfig) +#else void resetAdcConfig(adcConfig_t *adcConfig) +#endif { #ifdef VBAT_ADC_PIN adcConfig->vbat.enabled = true; @@ -370,6 +391,7 @@ void resetAdcConfig(adcConfig_t *adcConfig) #endif +#ifndef USE_PARAMETER_GROUPS #ifdef BEEPER void resetBeeperDevConfig(beeperDevConfig_t *beeperDevConfig) { @@ -383,9 +405,14 @@ void resetBeeperDevConfig(beeperDevConfig_t *beeperDevConfig) beeperDevConfig->ioTag = IO_TAG(BEEPER); } #endif +#endif #if defined(USE_PWM) || defined(USE_PPM) +#ifdef USE_PARAMETER_GROUPS +void pgResetFn_ppmConfig(ppmConfig_t *ppmConfig) +#else void resetPpmConfig(ppmConfig_t *ppmConfig) +#endif { #ifdef PPM_PIN ppmConfig->ioTag = IO_TAG(PPM_PIN); @@ -401,8 +428,13 @@ void resetPpmConfig(ppmConfig_t *ppmConfig) #endif } +#ifdef USE_PARAMETER_GROUPS +void pgResetFn_pwmConfig(pwmConfig_t *pwmConfig) +#else void resetPwmConfig(pwmConfig_t *pwmConfig) +#endif { + pwmConfig->inputFilteringMode = INPUT_FILTERING_DISABLED; int inputIndex = 0; for (int i = 0; i < USABLE_TIMER_CHANNEL_COUNT && inputIndex < PWM_INPUT_PORT_COUNT; i++) { if (timerHardware[i].usageFlags & TIM_USE_PWM) { @@ -559,73 +591,77 @@ void resetBatteryConfig(batteryConfig_t *batteryConfig) # endif #endif -void resetSerialPinConfig(serialPinConfig_t *pSerialPinConfig) +#ifdef USE_PARAMETER_GROUPS +void pgResetFn_serialPinConfig(serialPinConfig_t *serialPinConfig) +#else +void resetSerialPinConfig(serialPinConfig_t *serialPinConfig) +#endif { for (int port = 0 ; port < SERIAL_PORT_MAX_INDEX ; port++) { - pSerialPinConfig->ioTagRx[port] = IO_TAG(NONE); - pSerialPinConfig->ioTagTx[port] = IO_TAG(NONE); + serialPinConfig->ioTagRx[port] = IO_TAG(NONE); + serialPinConfig->ioTagTx[port] = IO_TAG(NONE); } for (int index = 0 ; index < SERIAL_PORT_COUNT ; index++) { switch (serialPortIdentifiers[index]) { case SERIAL_PORT_USART1: #ifdef USE_UART1 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART1)] = IO_TAG(UART1_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART1)] = IO_TAG(UART1_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART1)] = IO_TAG(UART1_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART1)] = IO_TAG(UART1_TX_PIN); #endif break; case SERIAL_PORT_USART2: #ifdef USE_UART2 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART2)] = IO_TAG(UART2_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART2)] = IO_TAG(UART2_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART2)] = IO_TAG(UART2_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART2)] = IO_TAG(UART2_TX_PIN); #endif break; case SERIAL_PORT_USART3: #ifdef USE_UART3 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART3)] = IO_TAG(UART3_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART3)] = IO_TAG(UART3_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART3)] = IO_TAG(UART3_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART3)] = IO_TAG(UART3_TX_PIN); #endif break; case SERIAL_PORT_USART4: #ifdef USE_UART4 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART4)] = IO_TAG(UART4_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART4)] = IO_TAG(UART4_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART4)] = IO_TAG(UART4_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART4)] = IO_TAG(UART4_TX_PIN); #endif break; case SERIAL_PORT_USART5: #ifdef USE_UART5 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART5)] = IO_TAG(UART5_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART5)] = IO_TAG(UART5_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART5)] = IO_TAG(UART5_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART5)] = IO_TAG(UART5_TX_PIN); #endif break; case SERIAL_PORT_USART6: #ifdef USE_UART6 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART6)] = IO_TAG(UART6_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART6)] = IO_TAG(UART6_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART6)] = IO_TAG(UART6_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART6)] = IO_TAG(UART6_TX_PIN); #endif break; case SERIAL_PORT_USART7: #ifdef USE_UART7 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART7)] = IO_TAG(UART7_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART7)] = IO_TAG(UART7_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART7)] = IO_TAG(UART7_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART7)] = IO_TAG(UART7_TX_PIN); #endif break; case SERIAL_PORT_USART8: #ifdef USE_UART8 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART8)] = IO_TAG(UART8_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART8)] = IO_TAG(UART8_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART8)] = IO_TAG(UART8_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_USART8)] = IO_TAG(UART8_TX_PIN); #endif break; case SERIAL_PORT_SOFTSERIAL1: #ifdef USE_SOFTSERIAL1 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL1)] = IO_TAG(SOFTSERIAL1_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL1)] = IO_TAG(SOFTSERIAL1_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL1)] = IO_TAG(SOFTSERIAL1_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL1)] = IO_TAG(SOFTSERIAL1_TX_PIN); #endif break; case SERIAL_PORT_SOFTSERIAL2: #ifdef USE_SOFTSERIAL2 - pSerialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL2)] = IO_TAG(SOFTSERIAL2_RX_PIN); - pSerialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL2)] = IO_TAG(SOFTSERIAL2_TX_PIN); + serialPinConfig->ioTagRx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL2)] = IO_TAG(SOFTSERIAL2_RX_PIN); + serialPinConfig->ioTagTx[SERIAL_PORT_IDENTIFIER_TO_RESOURCE_INDEX(SERIAL_PORT_SOFTSERIAL2)] = IO_TAG(SOFTSERIAL2_TX_PIN); #endif break; case SERIAL_PORT_USB_VCP: @@ -737,6 +773,7 @@ void resetStatusLedConfig(statusLedConfig_t *statusLedConfig) ; } +#ifndef USE_PARAMETER_GROUPS #ifdef USE_FLASHFS void resetFlashConfig(flashConfig_t *flashConfig) { @@ -747,6 +784,7 @@ void resetFlashConfig(flashConfig_t *flashConfig) #endif } #endif +#endif uint8_t getCurrentProfileIndex(void) { @@ -872,19 +910,21 @@ void createDefaultConfig(master_t *config) #ifndef USE_PARAMETER_GROUPS resetBatteryConfig(&config->batteryConfig); -#endif #if defined(USE_PWM) || defined(USE_PPM) resetPpmConfig(&config->ppmConfig); resetPwmConfig(&config->pwmConfig); #endif +#ifdef USE_PWM + config->pwmConfig.inputFilteringMode = INPUT_FILTERING_DISABLED; +#endif -#ifndef USE_PARAMETER_GROUPS #ifdef TELEMETRY resetTelemetryConfig(&config->telemetryConfig); #endif #endif +#ifndef USE_PARAMETER_GROUPS #ifdef USE_ADC resetAdcConfig(&config->adcConfig); #endif @@ -892,6 +932,7 @@ void createDefaultConfig(master_t *config) #ifdef BEEPER resetBeeperDevConfig(&config->beeperDevConfig); #endif +#endif #ifdef SONAR resetSonarConfig(&config->sonarConfig); @@ -938,20 +979,13 @@ void createDefaultConfig(master_t *config) resetAllRxChannelRangeConfigurations(config->rxConfig.channelRanges); #endif -#ifdef USE_PWM - config->pwmConfig.inputFilteringMode = INPUT_FILTERING_DISABLED; -#endif - #ifndef USE_PARAMETER_GROUPS config->armingConfig.gyro_cal_on_first_arm = 0; // TODO - Cleanup retarded arm support config->armingConfig.disarm_kill_switch = 1; config->armingConfig.auto_disarm_delay = 5; -#endif - config->airplaneConfig.fixedwing_althold_dir = 1; -#ifndef USE_PARAMETER_GROUPS // Motor/ESC/Servo resetMixerConfig(&config->mixerConfig); resetMotorConfig(&config->motorConfig); @@ -973,9 +1007,9 @@ void createDefaultConfig(master_t *config) config->gpsConfig.autoBaud = GPS_AUTOBAUD_OFF; #endif +#ifndef USE_PARAMETER_GROUPS resetSerialPinConfig(&config->serialPinConfig); -#ifndef USE_PARAMETER_GROUPS resetSerialConfig(&config->serialConfig); #endif @@ -1031,10 +1065,10 @@ void createDefaultConfig(master_t *config) config->servoProfile.servoConf[i].angleAtMax = DEFAULT_SERVO_MAX_ANGLE; config->servoProfile.servoConf[i].forwardFromChannel = CHANNEL_FORWARDING_DISABLED; } -#endif // gimbal config->gimbalConfig.mode = GIMBAL_MODE_NORMAL; +#endif // Channel forwarding; config->channelForwardingConfig.startChannel = AUX1; @@ -1088,11 +1122,11 @@ void createDefaultConfig(master_t *config) } #endif +#ifndef USE_PARAMETER_GROUPS #ifdef USE_FLASHFS resetFlashConfig(&config->flashConfig); #endif -#ifndef USE_PARAMETER_GROUPS resetStatusLedConfig(&config->statusLedConfig); #endif diff --git a/src/main/flight/altitudehold.c b/src/main/flight/altitudehold.c index 05edd90bb2..c6bd68aa14 100644 --- a/src/main/flight/altitudehold.c +++ b/src/main/flight/altitudehold.c @@ -44,6 +44,12 @@ #include "sensors/sonar.h" +PG_REGISTER_WITH_RESET_TEMPLATE(airplaneConfig_t, airplaneConfig, PG_AIRPLANE_CONFIG, 0); + +PG_RESET_TEMPLATE(airplaneConfig_t, airplaneConfig, + .fixedwing_althold_dir = 1 +); + int32_t setVelocity = 0; uint8_t velocityControl = 0; int32_t errorVelocityI = 0; diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index 0c20a275ec..b3a59d9318 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -107,6 +107,8 @@ void pgResetFn_motorConfig(motorConfig_t *motorConfig) } } +PG_REGISTER_ARRAY(motorMixer_t, MAX_SUPPORTED_MOTORS, customMotorMixer, PG_MOTOR_MIXER, 0); + #define EXTERNAL_DSHOT_CONVERSION_FACTOR 2 // (minimum output value(1001) - (minimum input value(48) / conversion factor(2)) #define EXTERNAL_DSHOT_CONVERSION_OFFSET 977 diff --git a/src/main/flight/servos.c b/src/main/flight/servos.c index 9c2f60fe75..aff5615dac 100755 --- a/src/main/flight/servos.c +++ b/src/main/flight/servos.c @@ -90,6 +90,9 @@ void pgResetFn_servoParams(servoParam_t *instance) } } +// no template required since default is zero +PG_REGISTER(gimbalConfig_t, gimbalConfig, PG_GIMBAL_CONFIG, 0); + static uint8_t servoRuleCount = 0; static servoMixer_t currentServoMixer[MAX_SERVO_RULES]; int16_t servo[MAX_SUPPORTED_SERVOS]; diff --git a/src/main/io/beeper.c b/src/main/io/beeper.c index 6f0e0ce6ee..ba38d0fd6c 100644 --- a/src/main/io/beeper.c +++ b/src/main/io/beeper.c @@ -17,17 +17,22 @@ #include "stdbool.h" #include "stdint.h" -#include "stdlib.h" #include #include "common/utils.h" +#include "config/feature.h" +#include "config/parameter_group.h" +#include "config/parameter_group_ids.h" + #include "drivers/sound_beeper.h" #include "drivers/system.h" -#include "sensors/battery.h" -#include "sensors/sensors.h" +#include "fc/config.h" +#include "fc/runtime_config.h" + +#include "io/beeper.h" #include "io/statusindicator.h" #include "io/vtx.h" @@ -35,12 +40,27 @@ #include "io/gps.h" #endif -#include "fc/config.h" -#include "fc/runtime_config.h" +#include "sensors/battery.h" +#include "sensors/sensors.h" -#include "config/feature.h" -#include "io/beeper.h" +PG_REGISTER_WITH_RESET_TEMPLATE(beeperDevConfig_t, beeperDevConfig, PG_BEEPER_DEV_CONFIG, 0); + +#ifdef BEEPER_INVERTED +#define IS_OPEN_DRAIN false +#define IS_INVERTED true +#else +#define IS_OPEN_DRAIN true +#define IS_INVERTED false +#endif +#ifndef BEEPER +#define BEEPER NONE +#endif +PG_RESET_TEMPLATE(beeperDevConfig_t, beeperDevConfig, + .isOpenDrain = IS_OPEN_DRAIN, + .isInverted = IS_INVERTED, + .ioTag = IO_TAG(BEEPER) +); #if FLASH_SIZE > 64 #define BEEPER_NAMES