diff --git a/src/main/drivers/inverter.c b/src/main/drivers/inverter.c index 3a4b96d195..b5774c625b 100644 --- a/src/main/drivers/inverter.c +++ b/src/main/drivers/inverter.c @@ -20,31 +20,98 @@ #include "platform.h" -#ifdef INVERTER - #include "io.h" #include "io_impl.h" #include "inverter.h" -/* - TODO: move this to support multiple inverters on different UARTs etc - possibly move to put it in the UART driver itself. -*/ -static IO_t pin = IO_NONE; - -void initInverter(void) -{ - pin = IOGetByTag(IO_TAG(INVERTER)); - IOInit(pin, OWNER_INVERTER, 1); - IOConfigGPIO(pin, IOCFG_OUT_PP); - - inverterSet(false); -} - -void inverterSet(bool on) +#ifdef USE_INVERTER +static void inverterSet(IO_t pin, bool on) { IOWrite(pin, on); } +static void initInverter(ioTag_t ioTag) +{ + IO_t pin = IOGetByTag(ioTag); + IOInit(pin, OWNER_INVERTER, 1); + IOConfigGPIO(pin, IOCFG_OUT_PP); + + inverterSet(pin, false); +} #endif + +void initInverters(void) +{ +#ifdef INVERTER_PIN_USART1 + initInverter(IO_TAG(INVERTER_PIN_USART1)); +#endif + +#ifdef INVERTER_PIN_USART2 + initInverter(IO_TAG(INVERTER_PIN_USART2)); +#endif + +#ifdef INVERTER_PIN_USART3 + initInverter(IO_TAG(INVERTER_PIN_USART3)); +#endif + +#ifdef INVERTER_PIN_USART4 + initInverter(IO_TAG(INVERTER_PIN_USART4)); +#endif + +#ifdef INVERTER_PIN_USART5 + initInverter(IO_TAG(INVERTER_PIN_USART5)); +#endif + +#ifdef INVERTER_PIN_USART6 + initInverter(IO_TAG(INVERTER_PIN_USART6)); +#endif +} + +void enableInverter(USART_TypeDef *USARTx, bool on) +{ +#ifdef USE_INVERTER + IO_t pin = IO_NONE; + +#ifdef INVERTER_PIN_USART1 + if (USARTx == USART1) { + pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART1)); + } +#endif + +#ifdef INVERTER_PIN_USART2 + if (USARTx == USART2) { + pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART2)); + } +#endif + +#ifdef INVERTER_PIN_USART3 + if (USARTx == USART3) { + pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART3)); + } +#endif + +#ifdef INVERTER_PIN_USART4 + if (USARTx == USART4) { + pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART4)); + } +#endif + +#ifdef INVERTER_PIN_USART5 + if (USARTx == USART5) { + pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART5)); + } +#endif + +#ifdef INVERTER_PIN_USART6 + if (USARTx == USART6) { + pin = IOGetByTag(IO_TAG(INVERTER_PIN_USART6)); + } +#endif + + inverterSet(pin, on); +#else + UNUSED(USARTx); + UNUSED(on); +#endif +} diff --git a/src/main/drivers/inverter.h b/src/main/drivers/inverter.h index 4b9c3fe274..f7d747d5ab 100644 --- a/src/main/drivers/inverter.h +++ b/src/main/drivers/inverter.h @@ -17,14 +17,10 @@ #pragma once -#ifdef INVERTER -void inverterSet(bool on); -#define INVERTER_OFF inverterSet(false) -#define INVERTER_ON inverterSet(true) -#else -#define INVERTER_OFF do {} while(0) -#define INVERTER_ON do {} while(0) +#if defined(INVERTER_PIN_USART1) || defined(INVERTER_PIN_USART2) || defined(INVERTER_PIN_USART3) || defined(INVERTER_PIN_USART4) || defined(INVERTER_PIN_USART5) || defined(INVERTER_PIN_USART6) +#define USE_INVERTER #endif -void initInverter(void); +void initInverters(void); +void enableInverter(USART_TypeDef *USARTx, bool on); diff --git a/src/main/drivers/serial_uart.c b/src/main/drivers/serial_uart.c index 9b083349d6..9dd53046db 100644 --- a/src/main/drivers/serial_uart.c +++ b/src/main/drivers/serial_uart.c @@ -36,15 +36,15 @@ #include "serial_uart_impl.h" static void usartConfigurePinInversion(uartPort_t *uartPort) { -#if !defined(INVERTER) && !defined(STM32F303xC) +#if !defined(USE_INVERTER) && !defined(STM32F303xC) UNUSED(uartPort); #else bool inverted = uartPort->port.options & SERIAL_INVERTED; -#ifdef INVERTER - if (inverted && uartPort->USARTx == INVERTER_USART) { +#ifdef USE_INVERTER + if (inverted) { // Enable hardware inverter if available. - INVERTER_ON; + enableInverter(uartPort->USARTx, true); } #endif diff --git a/src/main/fc/fc_init.c b/src/main/fc/fc_init.c index 2cf275de33..51d1421558 100644 --- a/src/main/fc/fc_init.c +++ b/src/main/fc/fc_init.c @@ -308,8 +308,8 @@ void init(void) beeperInit(beeperConfig()); #endif /* temp until PGs are implemented. */ -#ifdef INVERTER - initInverter(); +#ifdef USE_INVERTER + initInverters(); #endif #ifdef USE_BST diff --git a/src/main/target/ALIENFLIGHTF4/target.h b/src/main/target/ALIENFLIGHTF4/target.h index a2d1c74c40..1c234b3a23 100644 --- a/src/main/target/ALIENFLIGHTF4/target.h +++ b/src/main/target/ALIENFLIGHTF4/target.h @@ -33,8 +33,7 @@ #define BEEPER PC13 #define BEEPER_INVERTED -#define INVERTER PC15 -#define INVERTER_USART USART2 +#define INVERTER_PIN_USART2 PC15 // MPU interrupt #define USE_EXTI diff --git a/src/main/target/BLUEJAYF4/target.h b/src/main/target/BLUEJAYF4/target.h index ac0e534284..34d4a9804b 100644 --- a/src/main/target/BLUEJAYF4/target.h +++ b/src/main/target/BLUEJAYF4/target.h @@ -38,8 +38,8 @@ #define BEEPER_OPT PB7 #define BEEPER_INVERTED -#define INVERTER PB15 -#define INVERTER_USART USART6 +#define INVERTER_PIN_USART6 PB15 +//#define INVERTER_PIN_USART1 PC9 #define UART1_INVERTER PC9 diff --git a/src/main/target/CC3D/target.h b/src/main/target/CC3D/target.h index 77a24a1291..9871d0cf46 100644 --- a/src/main/target/CC3D/target.h +++ b/src/main/target/CC3D/target.h @@ -19,8 +19,7 @@ #define LED0 PB3 -#define INVERTER PB2 // PB2 (BOOT1) used as inverter select GPIO -#define INVERTER_USART USART1 +#define INVERTER_PIN_USART1 PB2 // PB2 (BOOT1) used as inverter select GPIO #define BEEPER PA15 #define BEEPER_OPT PA2 diff --git a/src/main/target/COLIBRI/target.h b/src/main/target/COLIBRI/target.h index b48f412fd1..cfd8ef165a 100644 --- a/src/main/target/COLIBRI/target.h +++ b/src/main/target/COLIBRI/target.h @@ -33,8 +33,7 @@ #define BEEPER PC5 -#define INVERTER PB2 // PB2 used as inverter select GPIO -#define INVERTER_USART USART2 +#define INVERTER_PIN_USART2 PB2 // PB2 used as inverter select GPIO #define MPU6000_CS_PIN PC4 #define MPU6000_SPI_INSTANCE SPI1 diff --git a/src/main/target/F4BY/target.h b/src/main/target/F4BY/target.h index 390f8f93ab..2a148a5a0c 100644 --- a/src/main/target/F4BY/target.h +++ b/src/main/target/F4BY/target.h @@ -28,8 +28,7 @@ #define BEEPER PE5 -#define INVERTER PD3 -#define INVERTER_USART USART6 +#define INVERTER_PIN_USART6 PD3 diff --git a/src/main/target/FISHDRONEF4/target.h b/src/main/target/FISHDRONEF4/target.h index da9c69ec06..c83dde617d 100644 --- a/src/main/target/FISHDRONEF4/target.h +++ b/src/main/target/FISHDRONEF4/target.h @@ -28,8 +28,7 @@ #define BEEPER PC15 #define BEEPER_INVERTED -#define INVERTER PC8 -#define INVERTER_USART USART6 +#define INVERTER_PIN_USART6 PC8 #define USE_EXTI #define MPU_INT_EXTI PC4 diff --git a/src/main/target/FURYF4/target.h b/src/main/target/FURYF4/target.h index a343c48b39..22f7aea924 100644 --- a/src/main/target/FURYF4/target.h +++ b/src/main/target/FURYF4/target.h @@ -28,8 +28,7 @@ #define BEEPER PA8 #define BEEPER_INVERTED -#define INVERTER PC0 // PC0 used as inverter select GPIO -#define INVERTER_USART USART1 +#define INVERTER_PIN_USART1 PC0 // PC0 used as inverter select GPIO // MPU6000 interrupts #define USE_EXTI diff --git a/src/main/target/KIWIF4/target.h b/src/main/target/KIWIF4/target.h index d3b02f787f..6007db44c4 100644 --- a/src/main/target/KIWIF4/target.h +++ b/src/main/target/KIWIF4/target.h @@ -28,8 +28,7 @@ #define BEEPER PA8 -#define INVERTER PC0 // PC0 used as inverter select GPIO -#define INVERTER_USART USART1 +#define INVERTER_PIN_USART1 PC0 // PC0 used as inverter select GPIO // MPU6000 interrupts #define USE_EXTI diff --git a/src/main/target/MICROSCISKY/target.h b/src/main/target/MICROSCISKY/target.h index e29948be63..8b6cc28d90 100644 --- a/src/main/target/MICROSCISKY/target.h +++ b/src/main/target/MICROSCISKY/target.h @@ -27,8 +27,7 @@ #define BARO_XCLR_PIN PC13 #define BARO_EOC_PIN PC14 -#define INVERTER PB2 // PB2 (BOOT1) abused as inverter select GPIO -#define INVERTER_USART USART2 +#define INVERTER_PIN_USART2 PB2 // PB2 (BOOT1) abused as inverter select GPIO #define USE_EXTI #define MAG_INT_EXTI PC14 diff --git a/src/main/target/NAZE/target.h b/src/main/target/NAZE/target.h index 1a047c40db..ece8f57fce 100644 --- a/src/main/target/NAZE/target.h +++ b/src/main/target/NAZE/target.h @@ -44,8 +44,7 @@ //#define BARO_XCLR_PIN PC13 //#define BARO_EOC_PIN PC14 -#define INVERTER PB2 // PB2 (BOOT1) abused as inverter select GPIO -#define INVERTER_USART USART2 +#define INVERTER_PIN_USART2 PB2 // PB2 (BOOT1) abused as inverter select GPIO #define USE_EXTI #define MAG_INT_EXTI PC14 diff --git a/src/main/target/OMNIBUSF4/target.h b/src/main/target/OMNIBUSF4/target.h index 409854ae2d..6d4289da5a 100644 --- a/src/main/target/OMNIBUSF4/target.h +++ b/src/main/target/OMNIBUSF4/target.h @@ -35,8 +35,7 @@ #define BEEPER PB4 #define BEEPER_INVERTED -#define INVERTER PC0 // PC0 used as inverter select GPIO -#define INVERTER_USART USART1 +#define INVERTER_PIN_USART1 PC0 // PC0 used as inverter select GPIO #define MPU6000_CS_PIN PA4 #define MPU6000_SPI_INSTANCE SPI1 diff --git a/src/main/target/REVO/target.h b/src/main/target/REVO/target.h index 7483128e6b..fe7dc33dc2 100644 --- a/src/main/target/REVO/target.h +++ b/src/main/target/REVO/target.h @@ -69,8 +69,7 @@ #endif // PC0 used as inverter select GPIO -#define INVERTER PC0 -#define INVERTER_USART USART1 +#define INVERTER_PIN_USART1 PC0 #define MPU6000_CS_PIN PA4 #define MPU6000_SPI_INSTANCE SPI1 diff --git a/src/main/target/REVONANO/target.h b/src/main/target/REVONANO/target.h index e4dd143fab..cfed437f8a 100644 --- a/src/main/target/REVONANO/target.h +++ b/src/main/target/REVONANO/target.h @@ -30,8 +30,7 @@ #define BEEPER PC13 -#define INVERTER PC15 -#define INVERTER_USART USART2 //Sbus on USART 2 of nano. +#define INVERTER_PIN_USART2 PC15 //Sbus on USART 2 of nano. #define MPU9250_CS_PIN PB12 #define MPU9250_SPI_INSTANCE SPI2 diff --git a/src/main/target/SPARKY2/target.h b/src/main/target/SPARKY2/target.h index 1dc7083849..7ac23dcf06 100644 --- a/src/main/target/SPARKY2/target.h +++ b/src/main/target/SPARKY2/target.h @@ -32,8 +32,7 @@ #define BEEPER PC9 #define BEEPER_INVERTED -#define INVERTER PC6 -#define INVERTER_USART USART6 +#define INVERTER_PIN_USART6 PC6 #define USE_ESC_SENSOR diff --git a/src/main/target/VRRACE/target.h b/src/main/target/VRRACE/target.h index ec7a8925f2..fa27f4785d 100644 --- a/src/main/target/VRRACE/target.h +++ b/src/main/target/VRRACE/target.h @@ -27,8 +27,7 @@ #define BEEPER PA0 #define BEEPER_INVERTED -#define INVERTER PD7 -#define INVERTER_USART USART6 +#define INVERTER_PIN_USART6 PD7 #define MPU6500_CS_PIN PE10 #define MPU6500_SPI_INSTANCE SPI2 diff --git a/src/main/target/YUPIF4/target.h b/src/main/target/YUPIF4/target.h index 40387f8770..28e9d6887b 100644 --- a/src/main/target/YUPIF4/target.h +++ b/src/main/target/YUPIF4/target.h @@ -29,8 +29,7 @@ #define BEEPER PC9 //#define BEEPER_INVERTED -#define INVERTER PB15 -#define INVERTER_USART USART6 +#define INVERTER_PIN_USART6 PB15 // Gyro interrupt