diff --git a/src/main/cli/cli.c b/src/main/cli/cli.c index 99ce5b967e..4264c537a0 100644 --- a/src/main/cli/cli.c +++ b/src/main/cli/cli.c @@ -5027,7 +5027,7 @@ const cliResourceValue_t resourceTable[] = { #ifdef USE_INVERTER DEFA( OWNER_INVERTER, PG_SERIAL_PIN_CONFIG, serialPinConfig_t, ioTagInverter[0], SERIAL_PORT_MAX_INDEX ), #endif -#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) +#if defined(USE_SOFTSERIAL) DEFA( OWNER_SOFTSERIAL_TX, PG_SOFTSERIAL_PIN_CONFIG, softSerialPinConfig_t, ioTagTx[0], SOFTSERIAL_COUNT ), DEFA( OWNER_SOFTSERIAL_RX, PG_SOFTSERIAL_PIN_CONFIG, softSerialPinConfig_t, ioTagRx[0], SOFTSERIAL_COUNT ), #endif diff --git a/src/main/config/config.c b/src/main/config/config.c index 426367d8f5..f8b053d0b7 100644 --- a/src/main/config/config.c +++ b/src/main/config/config.c @@ -423,7 +423,7 @@ static void validateAndFixConfig(void) featureDisableImmediate(FEATURE_RX_SERIAL); #endif -#if !defined(USE_SOFTSERIAL1) && !defined(USE_SOFTSERIAL2) +#if !defined(USE_SOFTSERIAL) featureDisableImmediate(FEATURE_SOFTSERIAL); #endif diff --git a/src/main/drivers/serial.h b/src/main/drivers/serial.h index 0c5d1ab1b3..8f13d9ca47 100644 --- a/src/main/drivers/serial.h +++ b/src/main/drivers/serial.h @@ -90,19 +90,7 @@ typedef struct serialPort_s { uint8_t identifier; } serialPort_t; -// TODO(hertz@): adjust this to include all the UARTDevice_e elements + necessary SOFTSERIALS -// # define SERIAL_PORT_MAX_INDEX MAX_UARTDEV -# define SERIAL_PORT_MAX_INDEX 11 -#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) -# ifdef USE_SOFTSERIAL2 -# define SOFTSERIAL_COUNT 2 -# else -# define SOFTSERIAL_COUNT 1 -# endif -#else -// avoid zero-sized arrays when no software serials are enabled -# define SOFTSERIAL_COUNT 1 -#endif +#define SERIAL_PORT_MAX_INDEX 11 typedef struct serialPinConfig_s { ioTag_t ioTagTx[SERIAL_PORT_MAX_INDEX]; @@ -112,12 +100,16 @@ typedef struct serialPinConfig_s { PG_DECLARE(serialPinConfig_t, serialPinConfig); -typedef struct softDSserialPinConfig_s { +#if defined(USE_SOFTSERIAL) +#define SOFTSERIAL_COUNT 2 + +typedef struct softSerialPinConfig_s { ioTag_t ioTagTx[SOFTSERIAL_COUNT]; ioTag_t ioTagRx[SOFTSERIAL_COUNT]; } softSerialPinConfig_t; PG_DECLARE(softSerialPinConfig_t, softSerialPinConfig); +#endif struct serialPortVTable { void (*serialWrite)(serialPort_t *instance, uint8_t ch); diff --git a/src/main/drivers/serial_pinconfig.c b/src/main/drivers/serial_pinconfig.c index b54aa9c2c7..f2e902e30a 100644 --- a/src/main/drivers/serial_pinconfig.c +++ b/src/main/drivers/serial_pinconfig.c @@ -170,16 +170,14 @@ # endif #endif -#ifdef USE_SOFTSERIAL1 +#ifdef USE_SOFTSERIAL # if !defined(SOFTSERIAL1_RX_PIN) # define SOFTSERIAL1_RX_PIN NONE # endif # if !defined(SOFTSERIAL1_TX_PIN) # define SOFTSERIAL1_TX_PIN NONE # endif -#endif -#ifdef USE_SOFTSERIAL2 # if !defined(SOFTSERIAL2_RX_PIN) # define SOFTSERIAL2_RX_PIN NONE # endif @@ -188,7 +186,7 @@ # endif #endif -#if defined(USE_UART) || defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL1) +#if defined(USE_UART) || defined(USE_SOFTSERIAL) typedef struct serialDefaultPin_s { serialPortIdentifier_e ident; ioTag_t rxIO, txIO, inverterIO; @@ -242,17 +240,15 @@ void pgResetFn_serialPinConfig(serialPinConfig_t *serialPinConfig) } } -#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL1) +#if defined(USE_SOFTSERIAL) typedef struct softSerialDefaultPin_s { serialPortIdentifier_e ident; ioTag_t rxIO, txIO; } softSerialDefaultPin_t; static const softSerialDefaultPin_t softSerialDefaultPin[SOFTSERIAL_COUNT] = { -#ifdef USE_SOFTSERIAL1 +#ifdef USE_SOFTSERIAL { SERIAL_PORT_SOFTSERIAL1, IO_TAG(SOFTSERIAL1_RX_PIN), IO_TAG(SOFTSERIAL1_TX_PIN) }, -#endif -#ifdef USE_SOFTSERIAL2 { SERIAL_PORT_SOFTSERIAL2, IO_TAG(SOFTSERIAL2_RX_PIN), IO_TAG(SOFTSERIAL2_TX_PIN) }, #endif }; diff --git a/src/main/drivers/serial_softserial.c b/src/main/drivers/serial_softserial.c index aa50d5a60e..47a4f7b97e 100644 --- a/src/main/drivers/serial_softserial.c +++ b/src/main/drivers/serial_softserial.c @@ -28,7 +28,7 @@ #include "platform.h" -#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) +#if defined(USE_SOFTSERIAL) #include "build/build_config.h" #include "build/atomic.h" @@ -47,11 +47,7 @@ #define RX_TOTAL_BITS 10 #define TX_TOTAL_BITS 10 -#if defined(USE_SOFTSERIAL1) && defined(USE_SOFTSERIAL2) #define MAX_SOFTSERIAL_PORTS 2 -#else -#define MAX_SOFTSERIAL_PORTS 1 -#endif typedef enum { TIMER_MODE_SINGLE, diff --git a/src/main/drivers/serial_uart.h b/src/main/drivers/serial_uart.h index 1315e4b7f6..1213d64a51 100644 --- a/src/main/drivers/serial_uart.h +++ b/src/main/drivers/serial_uart.h @@ -41,10 +41,11 @@ typedef enum { UARTDEV_9 = 8, UARTDEV_10 = 9, LPUARTDEV_1 = 10, - - MAX_UARTDEV = LPUARTDEV_1, + UARTDEV_COUNT } UARTDevice_e; +STATIC_ASSERT(UARTDEV_COUNT == SERIAL_PORT_MAX_INDEX, serial_pinconfig_does_not_match_uartdevs); + typedef struct uartPort_s { serialPort_t port; diff --git a/src/main/io/serial.c b/src/main/io/serial.c index c18c22bddf..ff96ab5544 100644 --- a/src/main/io/serial.c +++ b/src/main/io/serial.c @@ -34,7 +34,7 @@ #include "drivers/system.h" #include "drivers/serial.h" #include "drivers/serial_uart.h" -#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) +#if defined(USE_SOFTSERIAL) #include "drivers/serial_softserial.h" #endif @@ -99,10 +99,8 @@ const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT] = { #ifdef USE_UART10 SERIAL_PORT_USART10, #endif -#ifdef USE_SOFTSERIAL1 +#ifdef USE_SOFTSERIAL SERIAL_PORT_SOFTSERIAL1, -#endif -#ifdef USE_SOFTSERIAL2 SERIAL_PORT_SOFTSERIAL2, #endif #ifdef USE_LPUART1 @@ -358,7 +356,7 @@ serialPort_t *openSerialPort( portMode_e mode, portOptions_e options) { -#if !(defined(USE_UART) || defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2)) +#if !(defined(USE_UART) || defined(USE_SOFTSERIAL)) UNUSED(rxCallback); UNUSED(rxCallbackData); UNUSED(baudRate); @@ -424,12 +422,10 @@ serialPort_t *openSerialPort( break; #endif -#ifdef USE_SOFTSERIAL1 +#ifdef USE_SOFTSERIAL case SERIAL_PORT_SOFTSERIAL1: serialPort = openSoftSerial(SOFTSERIAL1, rxCallback, rxCallbackData, baudRate, mode, options); break; -#endif -#ifdef USE_SOFTSERIAL2 case SERIAL_PORT_SOFTSERIAL2: serialPort = openSoftSerial(SOFTSERIAL2, rxCallback, rxCallbackData, baudRate, mode, options); break; @@ -467,7 +463,7 @@ void closeSerialPort(serialPort_t *serialPort) void serialInit(bool softserialEnabled, serialPortIdentifier_e serialPortToDisable) { -#if !defined(USE_SOFTSERIAL1) && !defined(USE_SOFTSERIAL2) +#if !defined(USE_SOFTSERIAL) UNUSED(softserialEnabled); #endif @@ -496,17 +492,12 @@ void serialInit(bool softserialEnabled, serialPortIdentifier_e serialPortToDisab } } #endif - else if ((serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL1 -#ifdef USE_SOFTSERIAL1 - && !(softserialEnabled && (softSerialPinConfig()->ioTagTx[SOFTSERIAL1] || - softSerialPinConfig()->ioTagRx[SOFTSERIAL1])) +#ifdef USE_SOFTSERIAL + else if (!softserialEnabled && + ((softSerialPinConfig()->ioTagTx[SOFTSERIAL1] || serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL1) || + (softSerialPinConfig()->ioTagTx[SOFTSERIAL2] || serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL2))) #endif - ) || (serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL2 -#ifdef USE_SOFTSERIAL2 - && !(softserialEnabled && (softSerialPinConfig()->ioTagTx[SOFTSERIAL2] || - softSerialPinConfig()->ioTagRx[SOFTSERIAL2])) -#endif - )) { + { serialPortUsageList[index].identifier = SERIAL_PORT_NONE; serialPortCount--; } diff --git a/src/main/msp/msp.c b/src/main/msp/msp.c index 3e168072a2..187f339cdf 100644 --- a/src/main/msp/msp.c +++ b/src/main/msp/msp.c @@ -666,7 +666,7 @@ static bool mspCommonProcessOutCommand(int16_t cmdMSP, sbuf_t *dst, mspPostProce #ifdef USE_VCP targetCapabilities |= BIT(TARGET_HAS_VCP); #endif -#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) +#if defined(USE_SOFTSERIAL) targetCapabilities |= BIT(TARGET_HAS_SOFTSERIAL); #endif targetCapabilities |= BIT(TARGET_IS_UNIFIED); diff --git a/src/main/target/SITL/target.h b/src/main/target/SITL/target.h index 2c4b14dccc..e51b997e84 100644 --- a/src/main/target/SITL/target.h +++ b/src/main/target/SITL/target.h @@ -92,9 +92,6 @@ #define USE_UART7 #define USE_UART8 -//#define USE_SOFTSERIAL1 -//#define USE_SOFTSERIAL2 - #define SERIAL_PORT_COUNT 8 #define DEFAULT_RX_FEATURE FEATURE_RX_MSP diff --git a/src/main/target/STM32F405/target.h b/src/main/target/STM32F405/target.h index b7e8593948..b34b9d4fff 100644 --- a/src/main/target/STM32F405/target.h +++ b/src/main/target/STM32F405/target.h @@ -65,8 +65,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32F411/target.h b/src/main/target/STM32F411/target.h index f39d17d393..9f4f18b41c 100644 --- a/src/main/target/STM32F411/target.h +++ b/src/main/target/STM32F411/target.h @@ -64,8 +64,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32F745/target.h b/src/main/target/STM32F745/target.h index 26bd42f6fe..97ce9675fe 100644 --- a/src/main/target/STM32F745/target.h +++ b/src/main/target/STM32F745/target.h @@ -72,8 +72,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32F7X2/target.h b/src/main/target/STM32F7X2/target.h index 6f8e266cd9..8f013fdd47 100644 --- a/src/main/target/STM32F7X2/target.h +++ b/src/main/target/STM32F7X2/target.h @@ -64,8 +64,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32G47X/target.h b/src/main/target/STM32G47X/target.h index c6aa39cb12..5f747f8f3c 100644 --- a/src/main/target/STM32G47X/target.h +++ b/src/main/target/STM32G47X/target.h @@ -63,8 +63,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32H723/target.h b/src/main/target/STM32H723/target.h index 72fc6c1271..f878cb285a 100644 --- a/src/main/target/STM32H723/target.h +++ b/src/main/target/STM32H723/target.h @@ -83,8 +83,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32H743/target.h b/src/main/target/STM32H743/target.h index 9714f9da08..ece09326c5 100644 --- a/src/main/target/STM32H743/target.h +++ b/src/main/target/STM32H743/target.h @@ -72,8 +72,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3 diff --git a/src/main/target/STM32H750/target.h b/src/main/target/STM32H750/target.h index 8416847aac..01643eb6ce 100644 --- a/src/main/target/STM32H750/target.h +++ b/src/main/target/STM32H750/target.h @@ -89,8 +89,7 @@ #define USE_VCP -#define USE_SOFTSERIAL1 -#define USE_SOFTSERIAL2 +#define USE_SOFTSERIAL #define UNIFIED_SERIAL_PORT_COUNT 3