diff --git a/src/main/config/config.c b/src/main/config/config.c index 3c3a5f3de8..6e74f19f9b 100755 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -678,10 +678,6 @@ void activateConfig(void) setAccelerationFilter(masterConfig.acc_lpf_hz); mixerUseConfigs( -#ifdef USE_SERVOS - masterConfig.servoConf, - &masterConfig.gimbalConfig, -#endif &masterConfig.flight3DConfig, &masterConfig.escAndServoConfig, &masterConfig.mixerConfig, @@ -689,6 +685,10 @@ void activateConfig(void) &masterConfig.rxConfig ); +#ifdef USE_SERVOS + servoUseConfigs(masterConfig.servoConf, &masterConfig.gimbalConfig); +#endif + imuRuntimeConfig.dcm_kp = masterConfig.dcm_kp / 10000.0f; imuRuntimeConfig.dcm_ki = masterConfig.dcm_ki / 10000.0f; imuRuntimeConfig.acc_unarmedcal = masterConfig.acc_unarmedcal; diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index 2943290e51..11620b9d11 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -335,20 +335,12 @@ static servoMixer_t *customServoMixers; static motorMixer_t *customMixers; void mixerUseConfigs( -#ifdef USE_SERVOS - servoParam_t *servoConfToUse, - gimbalConfig_t *gimbalConfigToUse, -#endif flight3DConfig_t *flight3DConfigToUse, escAndServoConfig_t *escAndServoConfigToUse, mixerConfig_t *mixerConfigToUse, airplaneConfig_t *airplaneConfigToUse, rxConfig_t *rxConfigToUse) { -#ifdef USE_SERVOS - servoConf = servoConfToUse; - gimbalConfig = gimbalConfigToUse; -#endif flight3DConfig = flight3DConfigToUse; escAndServoConfig = escAndServoConfigToUse; mixerConfig = mixerConfigToUse; @@ -357,6 +349,12 @@ void mixerUseConfigs( } #ifdef USE_SERVOS +void servoUseConfigs(servoParam_t *servoConfToUse, gimbalConfig_t *gimbalConfigToUse) +{ + servoConf = servoConfToUse; + gimbalConfig = gimbalConfigToUse; +} + int16_t determineServoMiddleOrForwardFromChannel(servoIndex_e servoIndex) { uint8_t channelToForwardFrom = servoConf[servoIndex].forwardFromChannel; @@ -377,8 +375,31 @@ int servoDirection(int servoIndex, int inputSource) else return 1; } + +void servoInit(servoMixer_t *initialCustomServoMixers) +{ + customServoMixers = initialCustomServoMixers; + + // enable servos for mixes that require them. note, this shifts motor counts. + useServo = mixers[currentMixerMode].useServo; + // if we want camstab/trig, that also enables servos, even if mixer doesn't + if (feature(FEATURE_SERVO_TILT)) + useServo = 1; + + // give all servos a default command + for (uint8_t i = 0; i < MAX_SUPPORTED_SERVOS; i++) { + servo[i] = DEFAULT_SERVO_MIDDLE; + } +} #endif +void mixerInit(mixerMode_e mixerMode, motorMixer_t *initialCustomMixers) +{ + currentMixerMode = mixerMode; + + customMixers = initialCustomMixers; +} + #ifndef USE_QUAD_MIXER_ONLY void loadCustomServoMixer(void) @@ -400,25 +421,6 @@ void loadCustomServoMixer(void) } } -void mixerInit(mixerMode_e mixerMode, motorMixer_t *initialCustomMotorMixers, servoMixer_t *initialCustomServoMixers) -{ - currentMixerMode = mixerMode; - - customMixers = initialCustomMotorMixers; - customServoMixers = initialCustomServoMixers; - - // enable servos for mixes that require them. note, this shifts motor counts. - useServo = mixers[currentMixerMode].useServo; - // if we want camstab/trig, that also enables servos, even if mixer doesn't - if (feature(FEATURE_SERVO_TILT)) - useServo = 1; - - // give all servos a default command - for (uint8_t i = 0; i < MAX_SUPPORTED_SERVOS; i++) { - servo[i] = DEFAULT_SERVO_MIDDLE; - } -} - void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfiguration, bool use_unsyncedPwm) { int i; @@ -520,13 +522,6 @@ void mixerLoadMix(int index, motorMixer_t *customMixers) #else -void mixerInit(mixerMode_e mixerMode, motorMixer_t *initialCustomMixers) -{ - currentMixerMode = mixerMode; - - customMixers = initialCustomMixers; -} - void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfiguration, bool use_unsyncedPwm) { UNUSED(pwmOutputConfiguration); diff --git a/src/main/flight/mixer.h b/src/main/flight/mixer.h index bf1293e732..980fabd031 100644 --- a/src/main/flight/mixer.h +++ b/src/main/flight/mixer.h @@ -193,10 +193,6 @@ struct escAndServoConfig_s; struct rxConfig_s; void mixerUseConfigs( -#ifdef USE_SERVOS - servoParam_t *servoConfToUse, - struct gimbalConfig_s *gimbalConfigToUse, -#endif flight3DConfig_t *flight3DConfigToUse, struct escAndServoConfig_s *escAndServoConfigToUse, mixerConfig_t *mixerConfigToUse, @@ -206,13 +202,15 @@ void mixerUseConfigs( void writeAllMotors(int16_t mc); void mixerLoadMix(int index, motorMixer_t *customMixers); #ifdef USE_SERVOS -void mixerInit(mixerMode_e mixerMode, motorMixer_t *customMotorMixers, servoMixer_t *customServoMixers); +void servoInit(servoMixer_t *customServoMixers); +struct servoParam_s; +struct gimbalConfig_s; +void servoUseConfigs(struct servoParam_s *servoConfToUse, struct gimbalConfig_s *gimbalConfigToUse); void servoMixerLoadMix(int index, servoMixer_t *customServoMixers); void loadCustomServoMixer(void); int servoDirection(int servoIndex, int fromChannel); -#else -void mixerInit(mixerMode_e mixerMode, motorMixer_t *customMotorMixers); #endif +void mixerInit(mixerMode_e mixerMode, motorMixer_t *customMotorMixers); struct pwmOutputConfiguration_s; void mixerUsePWMOutputConfiguration(struct pwmOutputConfiguration_s *pwmOutputConfiguration, bool use_unsyncedPwm); void mixerResetDisarmedMotors(void); diff --git a/src/main/main.c b/src/main/main.c index 98d06a167e..3d42395a38 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -239,10 +239,9 @@ void init(void) serialInit(&masterConfig.serialConfig, feature(FEATURE_SOFTSERIAL), SERIAL_PORT_NONE); #endif -#ifdef USE_SERVOS - mixerInit(masterConfig.mixerMode, masterConfig.customMotorMixer, masterConfig.customServoMixer); -#else mixerInit(masterConfig.mixerMode, masterConfig.customMotorMixer); +#ifdef USE_SERVOS + servoInit(masterConfig.customServoMixer); #endif drv_pwm_config_t pwm_params;