From b6d01c36afab77aa2309e8ff7fa9c5cb23ae0e80 Mon Sep 17 00:00:00 2001 From: David Sidrane Date: Fri, 13 Jul 2018 11:38:57 -0700 Subject: [PATCH] px4fmu-v5:Support RX TX swap --- src/drivers/boards/px4fmu-v5/board_config.h | 5 ++++- src/drivers/boards/px4fmu-v5/init.c | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/drivers/boards/px4fmu-v5/board_config.h b/src/drivers/boards/px4fmu-v5/board_config.h index 548e85fd47..e6935d936c 100644 --- a/src/drivers/boards/px4fmu-v5/board_config.h +++ b/src/drivers/boards/px4fmu-v5/board_config.h @@ -521,7 +521,10 @@ #define RC_UXART_BASE STM32_USART6_BASE #define RC_SERIAL_PORT "/dev/ttyS4" -#define RC_SERIAL_PORT_IS_FULL_DUPLEX false +#define BOARD_HAS_SINGLE_WIRE 1 /* HW is capable of Single Wire */ +#define BOARD_HAS_SINGLE_WIRE_ON_TX 1 /* HW default is wired as Single Wire On TX pin */ +#define BOARD_HAS_RX_TX_SWAP 1 /* HW Can swap TX and RX */ +#define RC_SERIAL_PORT_IS_SWAPED 0 /* Board wired with RC's TX is on cpu RX */ #define GPS_DEFAULT_UART_PORT "/dev/ttyS0" /* UART1 on FMUv5 */ diff --git a/src/drivers/boards/px4fmu-v5/init.c b/src/drivers/boards/px4fmu-v5/init.c index 47e1284efa..dc5464cc50 100644 --- a/src/drivers/boards/px4fmu-v5/init.c +++ b/src/drivers/boards/px4fmu-v5/init.c @@ -130,7 +130,14 @@ __EXPORT void board_rc_input(bool invert_on, uint32_t uxart_base) putreg32(regval, STM32_USART_CR1_OFFSET + uxart_base); if (invert_on) { +#if defined(BOARD_HAS_RX_TX_SWAP) && RC_SERIAL_PORT_IS_SWAPED == 1 + + /* This is only tuned on */ + + cr2 |= (USART_CR2_RXINV | USART_CR2_TXINV | USART_CR2_SWAP); +#else cr2 |= (USART_CR2_RXINV | USART_CR2_TXINV); +#endif } else { cr2 &= ~(USART_CR2_RXINV | USART_CR2_TXINV);