diff --git a/src/main/flight/mixer.c b/src/main/flight/mixer.c index b6edc62c69..edf0c00c79 100755 --- a/src/main/flight/mixer.c +++ b/src/main/flight/mixer.c @@ -294,7 +294,7 @@ const mixer_t mixers[] = { { 8, false, mixerOctoFlatP }, // MIXER_OCTOFLATP { 8, false, mixerOctoFlatX }, // MIXER_OCTOFLATX { 1, true, mixerSingleProp }, // * MIXER_AIRPLANE - { 0, true, NULL }, // * MIXER_HELI_120_CCPM + { 1, true, mixerSingleProp }, // * MIXER_HELI_120_CCPM { 0, true, NULL }, // * MIXER_HELI_90_DEG { 4, false, mixerVtail4 }, // MIXER_VTAIL4 { 6, false, mixerHex6H }, // MIXER_HEX6H diff --git a/src/main/flight/servos.c b/src/main/flight/servos.c index 907a722e13..aea88cb10c 100755 --- a/src/main/flight/servos.c +++ b/src/main/flight/servos.c @@ -152,6 +152,18 @@ static const servoMixer_t servoMixerSingle[] = { { SERVO_SINGLECOPTER_4, INPUT_STABILIZED_ROLL, 100, 0, 0, 100, 0 }, }; +static const servoMixer_t servoMixerHeli[] = { + { SERVO_HELI_LEFT, INPUT_STABILIZED_PITCH, -50, 0, 0, 100, 0 }, + { SERVO_HELI_LEFT, INPUT_STABILIZED_ROLL, 87, 0, 0, 100, 0 }, + { SERVO_HELI_LEFT, INPUT_RC_AUX1, 100, 0, 0, 100, 0 }, + { SERVO_HELI_RIGHT, INPUT_STABILIZED_PITCH, -50, 0, 0, 100, 0 }, + { SERVO_HELI_RIGHT, INPUT_STABILIZED_ROLL, -87, 0, 0, 100, 0 }, + { SERVO_HELI_RIGHT, INPUT_RC_AUX1, 100, 0, 0, 100, 0 }, + { SERVO_HELI_TOP, INPUT_STABILIZED_PITCH, 100, 0, 0, 100, 0 }, + { SERVO_HELI_TOP, INPUT_RC_AUX1, 100, 0, 0, 100, 0 }, + { SERVO_HELI_RUD, INPUT_STABILIZED_YAW, 100, 0, 0, 100, 0 }, +}; + static const servoMixer_t servoMixerGimbal[] = { { SERVO_GIMBAL_PITCH, INPUT_GIMBAL_PITCH, 125, 0, 0, 100, 0 }, { SERVO_GIMBAL_ROLL, INPUT_GIMBAL_ROLL, 125, 0, 0, 100, 0 }, @@ -173,7 +185,7 @@ const mixerRules_t servoMixers[] = { { 0, NULL }, // MULTITYPE_OCTOFLATP { 0, NULL }, // MULTITYPE_OCTOFLATX { COUNT_SERVO_RULES(servoMixerAirplane), servoMixerAirplane }, // * MULTITYPE_AIRPLANE - { 0, NULL }, // * MULTITYPE_HELI_120_CCPM + { COUNT_SERVO_RULES(servoMixerHeli), servoMixerHeli }, // * MULTITYPE_HELI_120_CCPM { 0, NULL }, // * MULTITYPE_HELI_90_DEG { 0, NULL }, // MULTITYPE_VTAIL4 { 0, NULL }, // MULTITYPE_HEX6H @@ -312,6 +324,13 @@ void writeServos(void) pwmWriteServo(servoIndex++, servo[SERVO_BICOPTER_RIGHT]); break; + case MIXER_HELI_120_CCPM: + pwmWriteServo(servoIndex++, servo[SERVO_HELI_LEFT]); + pwmWriteServo(servoIndex++, servo[SERVO_HELI_RIGHT]); + pwmWriteServo(servoIndex++, servo[SERVO_HELI_TOP]); + pwmWriteServo(servoIndex++, servo[SERVO_HELI_RUD]); + break; + case MIXER_TRI: case MIXER_CUSTOM_TRI: if (servoConfig()->tri_unarmed_servo) { @@ -456,6 +475,7 @@ static void servoTable(void) case MIXER_TRI: case MIXER_DUALCOPTER: case MIXER_SINGLECOPTER: + case MIXER_HELI_120_CCPM: case MIXER_GIMBAL: servoMixer(); break; diff --git a/src/main/flight/servos.h b/src/main/flight/servos.h index c2cc8ed373..10444ee2c0 100644 --- a/src/main/flight/servos.h +++ b/src/main/flight/servos.h @@ -60,7 +60,13 @@ typedef enum { SERVO_SINGLECOPTER_1 = 3, SERVO_SINGLECOPTER_2 = 4, SERVO_SINGLECOPTER_3 = 5, - SERVO_SINGLECOPTER_4 = 6 + SERVO_SINGLECOPTER_4 = 6, + + SERVO_HELI_LEFT = 0, + SERVO_HELI_RIGHT = 1, + SERVO_HELI_TOP = 2, + SERVO_HELI_RUD = 3 + } servoIndex_e; // FIXME rename to servoChannel_e #define SERVO_PLANE_INDEX_MIN SERVO_FLAPS