mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-14 20:10:18 +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:
parent
d1eb214332
commit
a98364fa55
17 changed files with 35 additions and 70 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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--;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue