diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index 6569d296ce..264b40a041 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -243,21 +243,28 @@ int servoDirection(int nr, int lr) return 1; } -void mixerInit(MultiType mixerConfiguration, motorMixer_t *customMixers, pwmOutputConfiguration_t *pwmOutputConfiguration) -{ - int i; +static motorMixer_t *customMixers; +void mixerInit(MultiType mixerConfiguration, motorMixer_t *initialCustomMixers) +{ currentMixerConfiguration = mixerConfiguration; - servoCount = pwmOutputConfiguration->servoCount; + customMixers = initialCustomMixers; // enable servos for mixes that require them. note, this shifts motor counts. - useServo = mixers[mixerConfiguration].useServo; + useServo = mixers[currentMixerConfiguration].useServo; // if we want camstab/trig, that also enables servos, even if mixer doesn't if (feature(FEATURE_SERVO_TILT)) useServo = 1; +} - if (mixerConfiguration == MULTITYPE_CUSTOM) { +void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfiguration) +{ + int i; + + servoCount = pwmOutputConfiguration->servoCount; + + if (currentMixerConfiguration == MULTITYPE_CUSTOM) { // load custom mixer into currentMixer for (i = 0; i < MAX_SUPPORTED_MOTORS; i++) { // check if done @@ -267,11 +274,11 @@ void mixerInit(MultiType mixerConfiguration, motorMixer_t *customMixers, pwmOutp numberMotor++; } } else { - numberMotor = mixers[mixerConfiguration].numberMotor; + numberMotor = mixers[currentMixerConfiguration].numberMotor; // copy motor-based mixers - if (mixers[mixerConfiguration].motor) { + if (mixers[currentMixerConfiguration].motor) { for (i = 0; i < numberMotor; i++) - currentMixer[i] = mixers[mixerConfiguration].motor[i]; + currentMixer[i] = mixers[currentMixerConfiguration].motor[i]; } } @@ -287,8 +294,8 @@ void mixerInit(MultiType mixerConfiguration, motorMixer_t *customMixers, pwmOutp } // set flag that we're on something with wings - if (mixerConfiguration == MULTITYPE_FLYING_WING || - mixerConfiguration == MULTITYPE_AIRPLANE) + if (currentMixerConfiguration == MULTITYPE_FLYING_WING || + currentMixerConfiguration == MULTITYPE_AIRPLANE) f.FIXED_WING = 1; else f.FIXED_WING = 0; @@ -586,6 +593,7 @@ void mixTable(void) } } + bool isMixerUsingServos(void) { return useServo; diff --git a/src/main/main.c b/src/main/main.c index 05abc311b4..f307108a25 100755 --- a/src/main/main.c +++ b/src/main/main.c @@ -80,7 +80,8 @@ void initTelemetry(void); void serialInit(serialConfig_t *initialSerialConfig); failsafe_t* failsafeInit(rxConfig_t *intialRxConfig); pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init); -void mixerInit(MultiType mixerConfiguration, motorMixer_t *customMixers, pwmOutputConfiguration_t *pwmOutputConfiguration); +void mixerInit(MultiType mixerConfiguration, motorMixer_t *customMixers); +void mixerUsePWMOutputConfiguration(pwmOutputConfiguration_t *pwmOutputConfiguration); void rxInit(rxConfig_t *rxConfig, failsafe_t *failsafe); void beepcodeInit(failsafe_t *initialFailsafe); void gpsInit(serialConfig_t *serialConfig, gpsConfig_t *initialGpsConfig, gpsProfile_t *initialGpsProfile, pidProfile_t *pidProfile); @@ -160,6 +161,8 @@ void init(void) LED1_OFF; imuInit(); + mixerInit(masterConfig.mixerConfiguration, masterConfig.customMixer); + #ifdef MAG if (sensors(SENSOR_MAG)) compassInit(); @@ -200,7 +203,7 @@ void init(void) pwmOutputConfiguration_t *pwmOutputConfiguration = pwmInit(&pwm_params); - mixerInit(masterConfig.mixerConfiguration, masterConfig.customMixer, pwmOutputConfiguration); + mixerUsePWMOutputConfiguration(pwmOutputConfiguration); failsafe = failsafeInit(&masterConfig.rxConfig); beepcodeInit(failsafe);