1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-14 03:50:02 +03:00

Separate resources for SOFTSERIAL_TX & SOFTSERIAL_RX (#11786)

* Addressed review comments

* Unify USE_SOFTSERIAL

---------

Co-authored-by: Mark Haslinghuis <mark@numloq.nl>
This commit is contained in:
Andrey Mironov 2023-06-18 03:25:01 +03:00 committed by GitHub
parent d1eb214332
commit a98364fa55
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 35 additions and 70 deletions

View file

@ -5027,7 +5027,7 @@ const cliResourceValue_t resourceTable[] = {
#ifdef USE_INVERTER #ifdef USE_INVERTER
DEFA( OWNER_INVERTER, PG_SERIAL_PIN_CONFIG, serialPinConfig_t, ioTagInverter[0], SERIAL_PORT_MAX_INDEX ), DEFA( OWNER_INVERTER, PG_SERIAL_PIN_CONFIG, serialPinConfig_t, ioTagInverter[0], SERIAL_PORT_MAX_INDEX ),
#endif #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_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 ), DEFA( OWNER_SOFTSERIAL_RX, PG_SOFTSERIAL_PIN_CONFIG, softSerialPinConfig_t, ioTagRx[0], SOFTSERIAL_COUNT ),
#endif #endif

View file

@ -423,7 +423,7 @@ static void validateAndFixConfig(void)
featureDisableImmediate(FEATURE_RX_SERIAL); featureDisableImmediate(FEATURE_RX_SERIAL);
#endif #endif
#if !defined(USE_SOFTSERIAL1) && !defined(USE_SOFTSERIAL2) #if !defined(USE_SOFTSERIAL)
featureDisableImmediate(FEATURE_SOFTSERIAL); featureDisableImmediate(FEATURE_SOFTSERIAL);
#endif #endif

View file

@ -90,19 +90,7 @@ typedef struct serialPort_s {
uint8_t identifier; uint8_t identifier;
} serialPort_t; } serialPort_t;
// TODO(hertz@): adjust this to include all the UARTDevice_e elements + necessary SOFTSERIALS #define SERIAL_PORT_MAX_INDEX 11
// # 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
typedef struct serialPinConfig_s { typedef struct serialPinConfig_s {
ioTag_t ioTagTx[SERIAL_PORT_MAX_INDEX]; ioTag_t ioTagTx[SERIAL_PORT_MAX_INDEX];
@ -112,12 +100,16 @@ typedef struct serialPinConfig_s {
PG_DECLARE(serialPinConfig_t, serialPinConfig); 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 ioTagTx[SOFTSERIAL_COUNT];
ioTag_t ioTagRx[SOFTSERIAL_COUNT]; ioTag_t ioTagRx[SOFTSERIAL_COUNT];
} softSerialPinConfig_t; } softSerialPinConfig_t;
PG_DECLARE(softSerialPinConfig_t, softSerialPinConfig); PG_DECLARE(softSerialPinConfig_t, softSerialPinConfig);
#endif
struct serialPortVTable { struct serialPortVTable {
void (*serialWrite)(serialPort_t *instance, uint8_t ch); void (*serialWrite)(serialPort_t *instance, uint8_t ch);

View file

@ -170,16 +170,14 @@
# endif # endif
#endif #endif
#ifdef USE_SOFTSERIAL1 #ifdef USE_SOFTSERIAL
# if !defined(SOFTSERIAL1_RX_PIN) # if !defined(SOFTSERIAL1_RX_PIN)
# define SOFTSERIAL1_RX_PIN NONE # define SOFTSERIAL1_RX_PIN NONE
# endif # endif
# if !defined(SOFTSERIAL1_TX_PIN) # if !defined(SOFTSERIAL1_TX_PIN)
# define SOFTSERIAL1_TX_PIN NONE # define SOFTSERIAL1_TX_PIN NONE
# endif # endif
#endif
#ifdef USE_SOFTSERIAL2
# if !defined(SOFTSERIAL2_RX_PIN) # if !defined(SOFTSERIAL2_RX_PIN)
# define SOFTSERIAL2_RX_PIN NONE # define SOFTSERIAL2_RX_PIN NONE
# endif # endif
@ -188,7 +186,7 @@
# endif # endif
#endif #endif
#if defined(USE_UART) || defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL1) #if defined(USE_UART) || defined(USE_SOFTSERIAL)
typedef struct serialDefaultPin_s { typedef struct serialDefaultPin_s {
serialPortIdentifier_e ident; serialPortIdentifier_e ident;
ioTag_t rxIO, txIO, inverterIO; 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 { typedef struct softSerialDefaultPin_s {
serialPortIdentifier_e ident; serialPortIdentifier_e ident;
ioTag_t rxIO, txIO; ioTag_t rxIO, txIO;
} softSerialDefaultPin_t; } softSerialDefaultPin_t;
static const softSerialDefaultPin_t softSerialDefaultPin[SOFTSERIAL_COUNT] = { 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) }, { 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) }, { SERIAL_PORT_SOFTSERIAL2, IO_TAG(SOFTSERIAL2_RX_PIN), IO_TAG(SOFTSERIAL2_TX_PIN) },
#endif #endif
}; };

View file

@ -28,7 +28,7 @@
#include "platform.h" #include "platform.h"
#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) #if defined(USE_SOFTSERIAL)
#include "build/build_config.h" #include "build/build_config.h"
#include "build/atomic.h" #include "build/atomic.h"
@ -47,11 +47,7 @@
#define RX_TOTAL_BITS 10 #define RX_TOTAL_BITS 10
#define TX_TOTAL_BITS 10 #define TX_TOTAL_BITS 10
#if defined(USE_SOFTSERIAL1) && defined(USE_SOFTSERIAL2)
#define MAX_SOFTSERIAL_PORTS 2 #define MAX_SOFTSERIAL_PORTS 2
#else
#define MAX_SOFTSERIAL_PORTS 1
#endif
typedef enum { typedef enum {
TIMER_MODE_SINGLE, TIMER_MODE_SINGLE,

View file

@ -41,10 +41,11 @@ typedef enum {
UARTDEV_9 = 8, UARTDEV_9 = 8,
UARTDEV_10 = 9, UARTDEV_10 = 9,
LPUARTDEV_1 = 10, LPUARTDEV_1 = 10,
UARTDEV_COUNT
MAX_UARTDEV = LPUARTDEV_1,
} UARTDevice_e; } UARTDevice_e;
STATIC_ASSERT(UARTDEV_COUNT == SERIAL_PORT_MAX_INDEX, serial_pinconfig_does_not_match_uartdevs);
typedef struct uartPort_s { typedef struct uartPort_s {
serialPort_t port; serialPort_t port;

View file

@ -34,7 +34,7 @@
#include "drivers/system.h" #include "drivers/system.h"
#include "drivers/serial.h" #include "drivers/serial.h"
#include "drivers/serial_uart.h" #include "drivers/serial_uart.h"
#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) #if defined(USE_SOFTSERIAL)
#include "drivers/serial_softserial.h" #include "drivers/serial_softserial.h"
#endif #endif
@ -99,10 +99,8 @@ const serialPortIdentifier_e serialPortIdentifiers[SERIAL_PORT_COUNT] = {
#ifdef USE_UART10 #ifdef USE_UART10
SERIAL_PORT_USART10, SERIAL_PORT_USART10,
#endif #endif
#ifdef USE_SOFTSERIAL1 #ifdef USE_SOFTSERIAL
SERIAL_PORT_SOFTSERIAL1, SERIAL_PORT_SOFTSERIAL1,
#endif
#ifdef USE_SOFTSERIAL2
SERIAL_PORT_SOFTSERIAL2, SERIAL_PORT_SOFTSERIAL2,
#endif #endif
#ifdef USE_LPUART1 #ifdef USE_LPUART1
@ -358,7 +356,7 @@ serialPort_t *openSerialPort(
portMode_e mode, portMode_e mode,
portOptions_e options) portOptions_e options)
{ {
#if !(defined(USE_UART) || defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2)) #if !(defined(USE_UART) || defined(USE_SOFTSERIAL))
UNUSED(rxCallback); UNUSED(rxCallback);
UNUSED(rxCallbackData); UNUSED(rxCallbackData);
UNUSED(baudRate); UNUSED(baudRate);
@ -424,12 +422,10 @@ serialPort_t *openSerialPort(
break; break;
#endif #endif
#ifdef USE_SOFTSERIAL1 #ifdef USE_SOFTSERIAL
case SERIAL_PORT_SOFTSERIAL1: case SERIAL_PORT_SOFTSERIAL1:
serialPort = openSoftSerial(SOFTSERIAL1, rxCallback, rxCallbackData, baudRate, mode, options); serialPort = openSoftSerial(SOFTSERIAL1, rxCallback, rxCallbackData, baudRate, mode, options);
break; break;
#endif
#ifdef USE_SOFTSERIAL2
case SERIAL_PORT_SOFTSERIAL2: case SERIAL_PORT_SOFTSERIAL2:
serialPort = openSoftSerial(SOFTSERIAL2, rxCallback, rxCallbackData, baudRate, mode, options); serialPort = openSoftSerial(SOFTSERIAL2, rxCallback, rxCallbackData, baudRate, mode, options);
break; break;
@ -467,7 +463,7 @@ void closeSerialPort(serialPort_t *serialPort)
void serialInit(bool softserialEnabled, serialPortIdentifier_e serialPortToDisable) void serialInit(bool softserialEnabled, serialPortIdentifier_e serialPortToDisable)
{ {
#if !defined(USE_SOFTSERIAL1) && !defined(USE_SOFTSERIAL2) #if !defined(USE_SOFTSERIAL)
UNUSED(softserialEnabled); UNUSED(softserialEnabled);
#endif #endif
@ -496,17 +492,12 @@ void serialInit(bool softserialEnabled, serialPortIdentifier_e serialPortToDisab
} }
} }
#endif #endif
else if ((serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL1 #ifdef USE_SOFTSERIAL
#ifdef USE_SOFTSERIAL1 else if (!softserialEnabled &&
&& !(softserialEnabled && (softSerialPinConfig()->ioTagTx[SOFTSERIAL1] || ((softSerialPinConfig()->ioTagTx[SOFTSERIAL1] || serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL1) ||
softSerialPinConfig()->ioTagRx[SOFTSERIAL1])) (softSerialPinConfig()->ioTagTx[SOFTSERIAL2] || serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL2)))
#endif #endif
) || (serialPortUsageList[index].identifier == SERIAL_PORT_SOFTSERIAL2 {
#ifdef USE_SOFTSERIAL2
&& !(softserialEnabled && (softSerialPinConfig()->ioTagTx[SOFTSERIAL2] ||
softSerialPinConfig()->ioTagRx[SOFTSERIAL2]))
#endif
)) {
serialPortUsageList[index].identifier = SERIAL_PORT_NONE; serialPortUsageList[index].identifier = SERIAL_PORT_NONE;
serialPortCount--; serialPortCount--;
} }

View file

@ -666,7 +666,7 @@ static bool mspCommonProcessOutCommand(int16_t cmdMSP, sbuf_t *dst, mspPostProce
#ifdef USE_VCP #ifdef USE_VCP
targetCapabilities |= BIT(TARGET_HAS_VCP); targetCapabilities |= BIT(TARGET_HAS_VCP);
#endif #endif
#if defined(USE_SOFTSERIAL1) || defined(USE_SOFTSERIAL2) #if defined(USE_SOFTSERIAL)
targetCapabilities |= BIT(TARGET_HAS_SOFTSERIAL); targetCapabilities |= BIT(TARGET_HAS_SOFTSERIAL);
#endif #endif
targetCapabilities |= BIT(TARGET_IS_UNIFIED); targetCapabilities |= BIT(TARGET_IS_UNIFIED);

View file

@ -92,9 +92,6 @@
#define USE_UART7 #define USE_UART7
#define USE_UART8 #define USE_UART8
//#define USE_SOFTSERIAL1
//#define USE_SOFTSERIAL2
#define SERIAL_PORT_COUNT 8 #define SERIAL_PORT_COUNT 8
#define DEFAULT_RX_FEATURE FEATURE_RX_MSP #define DEFAULT_RX_FEATURE FEATURE_RX_MSP

View file

@ -65,8 +65,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -64,8 +64,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -72,8 +72,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -64,8 +64,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -63,8 +63,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -83,8 +83,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -72,8 +72,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3

View file

@ -89,8 +89,7 @@
#define USE_VCP #define USE_VCP
#define USE_SOFTSERIAL1 #define USE_SOFTSERIAL
#define USE_SOFTSERIAL2
#define UNIFIED_SERIAL_PORT_COUNT 3 #define UNIFIED_SERIAL_PORT_COUNT 3