diff --git a/src/main/drivers/pwm_mapping.c b/src/main/drivers/pwm_mapping.c index 52ec37fb9e..ee01adb036 100755 --- a/src/main/drivers/pwm_mapping.c +++ b/src/main/drivers/pwm_mapping.c @@ -63,161 +63,166 @@ */ enum { - TYPE_IP = 1, - TYPE_IW, - TYPE_M, - TYPE_S, + MAP_TO_PPM_INPUT = 1, + MAP_TO_PWM_INPUT, + MAP_TO_MOTOR_OUTPUT, + MAP_TO_SERVO_OUTPUT, }; #if defined(NAZE) || defined(OLIMEXINO) || defined(NAZE32PRO) || defined(STM32F3DISCOVERY) static const uint16_t multiPPM[] = { - PWM1 | (TYPE_IP << 8), // PPM input - PWM9 | (TYPE_M << 8), // Swap to servo if needed - PWM10 | (TYPE_M << 8), // Swap to servo if needed - PWM11 | (TYPE_M << 8), - PWM12 | (TYPE_M << 8), - PWM13 | (TYPE_M << 8), - PWM14 | (TYPE_M << 8), - PWM5 | (TYPE_M << 8), // Swap to servo if needed - PWM6 | (TYPE_M << 8), // Swap to servo if needed - PWM7 | (TYPE_M << 8), // Swap to servo if needed - PWM8 | (TYPE_M << 8), // Swap to servo if needed + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM13 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM14 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed 0xFFFF }; static const uint16_t multiPWM[] = { - PWM1 | (TYPE_IW << 8), // input #1 - PWM2 | (TYPE_IW << 8), - PWM3 | (TYPE_IW << 8), - PWM4 | (TYPE_IW << 8), - PWM5 | (TYPE_IW << 8), - PWM6 | (TYPE_IW << 8), - PWM7 | (TYPE_IW << 8), - PWM8 | (TYPE_IW << 8), // input #8 - PWM9 | (TYPE_M << 8), // motor #1 or servo #1 (swap to servo if needed) - PWM10 | (TYPE_M << 8), // motor #2 or servo #2 (swap to servo if needed) - PWM11 | (TYPE_M << 8), // motor #1 or #3 - PWM12 | (TYPE_M << 8), - PWM13 | (TYPE_M << 8), - PWM14 | (TYPE_M << 8), // motor #4 or #6 + PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1 + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM5 | (MAP_TO_PWM_INPUT << 8), + PWM6 | (MAP_TO_PWM_INPUT << 8), + PWM7 | (MAP_TO_PWM_INPUT << 8), + PWM8 | (MAP_TO_PWM_INPUT << 8), // input #8 + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or servo #1 (swap to servo if needed) + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 or servo #2 (swap to servo if needed) + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or #3 + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM13 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM14 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #4 or #6 0xFFFF }; static const uint16_t airPPM[] = { - PWM1 | (TYPE_IP << 8), // PPM input - PWM9 | (TYPE_M << 8), // motor #1 - PWM10 | (TYPE_M << 8), // motor #2 - PWM11 | (TYPE_S << 8), // servo #1 - PWM12 | (TYPE_S << 8), - PWM13 | (TYPE_S << 8), - PWM14 | (TYPE_S << 8), // servo #4 - PWM5 | (TYPE_S << 8), // servo #5 - PWM6 | (TYPE_S << 8), - PWM7 | (TYPE_S << 8), - PWM8 | (TYPE_S << 8), // servo #8 + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 + PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1 + PWM12 | (MAP_TO_SERVO_OUTPUT << 8), + PWM13 | (MAP_TO_SERVO_OUTPUT << 8), + PWM14 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4 + PWM5 | (MAP_TO_SERVO_OUTPUT << 8), // servo #5 + PWM6 | (MAP_TO_SERVO_OUTPUT << 8), + PWM7 | (MAP_TO_SERVO_OUTPUT << 8), + PWM8 | (MAP_TO_SERVO_OUTPUT << 8), // servo #8 0xFFFF }; static const uint16_t airPWM[] = { - PWM1 | (TYPE_IW << 8), // input #1 - PWM2 | (TYPE_IW << 8), - PWM3 | (TYPE_IW << 8), - PWM4 | (TYPE_IW << 8), - PWM5 | (TYPE_IW << 8), - PWM6 | (TYPE_IW << 8), - PWM7 | (TYPE_IW << 8), - PWM8 | (TYPE_IW << 8), // input #8 - PWM9 | (TYPE_M << 8), // motor #1 - PWM10 | (TYPE_M << 8), // motor #2 - PWM11 | (TYPE_S << 8), // servo #1 - PWM12 | (TYPE_S << 8), - PWM13 | (TYPE_S << 8), - PWM14 | (TYPE_S << 8), // servo #4 + PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1 + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM5 | (MAP_TO_PWM_INPUT << 8), + PWM6 | (MAP_TO_PWM_INPUT << 8), + PWM7 | (MAP_TO_PWM_INPUT << 8), + PWM8 | (MAP_TO_PWM_INPUT << 8), // input #8 + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 + PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1 + PWM12 | (MAP_TO_SERVO_OUTPUT << 8), + PWM13 | (MAP_TO_SERVO_OUTPUT << 8), + PWM14 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4 0xFFFF }; #endif #ifdef CC3D static const uint16_t multiPPM[] = { - PWM1 | (TYPE_IP << 8), // PPM input - PWM7 | (TYPE_M << 8), // Swap to servo if needed - PWM8 | (TYPE_M << 8), // Swap to servo if needed - PWM9 | (TYPE_M << 8), - PWM10 | (TYPE_M << 8), - PWM11 | (TYPE_M << 8), - PWM12 | (TYPE_M << 8), - PWM2 | (TYPE_M << 8), // Swap to servo if needed - PWM3 | (TYPE_M << 8), // Swap to servo if needed - PWM4 | (TYPE_M << 8), // Swap to servo if needed - PWM5 | (TYPE_M << 8), // Swap to servo if needed - PWM6 | (TYPE_M << 8), // Swap to servo if needed + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM2 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM3 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM4 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM5 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed + PWM6 | (MAP_TO_MOTOR_OUTPUT << 8), // Swap to servo if needed 0xFFFF }; static const uint16_t multiPWM[] = { - PWM1 | (TYPE_IW << 8), // input #1 - PWM2 | (TYPE_IW << 8), - PWM3 | (TYPE_IW << 8), - PWM4 | (TYPE_IW << 8), - PWM5 | (TYPE_IW << 8), - PWM6 | (TYPE_IW << 8), // input #6 - PWM7 | (TYPE_M << 8), // motor #1 or servo #1 (swap to servo if needed) - PWM8 | (TYPE_M << 8), // motor #2 or servo #2 (swap to servo if needed) - PWM9 | (TYPE_M << 8), // motor #1 or #3 - PWM10 | (TYPE_M << 8), - PWM11 | (TYPE_M << 8), - PWM12 | (TYPE_M << 8), // motor #4 or #6 + PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1 + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM5 | (MAP_TO_PWM_INPUT << 8), + PWM6 | (MAP_TO_PWM_INPUT << 8), // input #6 + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or servo #1 (swap to servo if needed) + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 or servo #2 (swap to servo if needed) + PWM9 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 or #3 + PWM10 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM11 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM12 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #4 or #6 0xFFFF }; static const uint16_t airPPM[] = { - PWM1 | (TYPE_IP << 8), // PPM input - PWM7 | (TYPE_M << 8), - PWM8 | (TYPE_M << 8), - PWM9 | (TYPE_S << 8), - PWM10 | (TYPE_S << 8), - PWM11 | (TYPE_S << 8), - PWM12 | (TYPE_S << 8), - PWM2 | (TYPE_S << 8), - PWM3 | (TYPE_S << 8), - PWM4 | (TYPE_S << 8), - PWM5 | (TYPE_S << 8), - PWM6 | (TYPE_S << 8), + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM9 | (MAP_TO_SERVO_OUTPUT << 8), + PWM10 | (MAP_TO_SERVO_OUTPUT << 8), + PWM11 | (MAP_TO_SERVO_OUTPUT << 8), + PWM12 | (MAP_TO_SERVO_OUTPUT << 8), + PWM2 | (MAP_TO_SERVO_OUTPUT << 8), + PWM3 | (MAP_TO_SERVO_OUTPUT << 8), + PWM4 | (MAP_TO_SERVO_OUTPUT << 8), + PWM5 | (MAP_TO_SERVO_OUTPUT << 8), + PWM6 | (MAP_TO_SERVO_OUTPUT << 8), 0xFFFF }; static const uint16_t airPWM[] = { - PWM1 | (TYPE_IW << 8), // input #1 - PWM2 | (TYPE_IW << 8), - PWM3 | (TYPE_IW << 8), - PWM4 | (TYPE_IW << 8), - PWM5 | (TYPE_IW << 8), - PWM6 | (TYPE_IW << 8), // input #6 - PWM7 | (TYPE_M << 8), // motor #1 - PWM8 | (TYPE_M << 8), // motor #2 - PWM9 | (TYPE_S << 8), // servo #1 - PWM10 | (TYPE_S << 8), // servo #2 - PWM11 | (TYPE_S << 8), // servo #3 - PWM12 | (TYPE_S << 8), // servo #4 + PWM1 | (MAP_TO_PWM_INPUT << 8), // input #1 + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM5 | (MAP_TO_PWM_INPUT << 8), + PWM6 | (MAP_TO_PWM_INPUT << 8), // input #6 + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #1 + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), // motor #2 + PWM9 | (MAP_TO_SERVO_OUTPUT << 8), // servo #1 + PWM10 | (MAP_TO_SERVO_OUTPUT << 8), // servo #2 + PWM11 | (MAP_TO_SERVO_OUTPUT << 8), // servo #3 + PWM12 | (MAP_TO_SERVO_OUTPUT << 8), // servo #4 0xFFFF }; #endif #ifdef CJMCU static const uint16_t multiPPM[] = { - PWM1 | (TYPE_IP << 8), // PPM input - PWM2 | (TYPE_M << 8), - PWM3 | (TYPE_M << 8), - PWM4 | (TYPE_M << 8), - PWM5 | (TYPE_M << 8), + PWM1 | (MAP_TO_PPM_INPUT << 8), // PPM input + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM14 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM13 | (MAP_TO_MOTOR_OUTPUT << 8), 0xFF }; static const uint16_t multiPWM[] = { - PWM1 | (TYPE_IP << 8), // PPM input - PWM2 | (TYPE_M << 8), - PWM3 | (TYPE_M << 8), - PWM4 | (TYPE_M << 8), - PWM5 | (TYPE_M << 8), + PWM1 | (MAP_TO_PWM_INPUT << 8), + PWM2 | (MAP_TO_PWM_INPUT << 8), + PWM3 | (MAP_TO_PWM_INPUT << 8), + PWM4 | (MAP_TO_PWM_INPUT << 8), + PWM9 | (MAP_TO_PWM_INPUT << 8), + PWM10 | (MAP_TO_PWM_INPUT << 8), + PWM7 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM14 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM8 | (MAP_TO_MOTOR_OUTPUT << 8), + PWM13 | (MAP_TO_MOTOR_OUTPUT << 8), 0xFF }; @@ -322,27 +327,27 @@ pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init) #endif // hacks to allow current functionality - if (type == TYPE_IW && !init->useParallelPWM) + if (type == MAP_TO_PWM_INPUT && !init->useParallelPWM) type = 0; - if (type == TYPE_IP && !init->usePPM) + if (type == MAP_TO_PPM_INPUT && !init->usePPM) type = 0; if (init->useServos && !init->airplane) { #if defined(STM32F10X_MD) || defined(CHEBUZZF3) // remap PWM9+10 as servos if (timerIndex == PWM9 || timerIndex == PWM10) - type = TYPE_S; + type = MAP_TO_SERVO_OUTPUT; #endif #if (defined(STM32F303xC) || defined(STM32F3DISCOVERY)) && !defined(CHEBUZZF3) // remap PWM 5+6 or 9+10 as servos - softserial pin pairs require timer ports that use the same timer if (init->useSoftSerial) { if (timerIndex == PWM5 || timerIndex == PWM6) - type = TYPE_S; + type = MAP_TO_SERVO_OUTPUT; } else { if (timerIndex == PWM9 || timerIndex == PWM10) - type = TYPE_S; + type = MAP_TO_SERVO_OUTPUT; } #endif } @@ -350,22 +355,22 @@ pwmOutputConfiguration_t *pwmInit(drv_pwm_config_t *init) if (init->extraServos && !init->airplane) { // remap PWM5..8 as servos when used in extended servo mode if (timerIndex >= PWM5 && timerIndex <= PWM8) - type = TYPE_S; + type = MAP_TO_SERVO_OUTPUT; } - if (type == TYPE_IP) { + if (type == MAP_TO_PPM_INPUT) { ppmInConfig(timerHardwarePtr); - } else if (type == TYPE_IW) { + } else if (type == MAP_TO_PWM_INPUT) { pwmInConfig(timerHardwarePtr, channelIndex); channelIndex++; - } else if (type == TYPE_M) { + } else if (type == MAP_TO_MOTOR_OUTPUT) { if (init->motorPwmRate > 500) { pwmBrushedMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->motorPwmRate, init->idlePulse); } else { pwmBrushlessMotorConfig(timerHardwarePtr, pwmOutputConfiguration.motorCount, init->motorPwmRate, init->idlePulse); } pwmOutputConfiguration.motorCount++; - } else if (type == TYPE_S) { + } else if (type == MAP_TO_SERVO_OUTPUT) { pwmServoConfig(timerHardwarePtr, pwmOutputConfiguration.servoCount, init->servoPwmRate, init->servoCenterPulse); pwmOutputConfiguration.servoCount++; }