From c1691b7e816c8ce137e23273f419720d9f08806f Mon Sep 17 00:00:00 2001 From: Michael Geramb Date: Sun, 31 Dec 2023 13:31:51 +0100 Subject: [PATCH] Fix for RP2040 UART pin handling: Setting of uart pins moved setupUart method. --- src/esp32_platform.cpp | 17 ++++++----------- src/rp2040_arduino_platform.cpp | 29 +++++++++++------------------ src/rp2040_arduino_platform.h | 2 ++ 3 files changed, 19 insertions(+), 29 deletions(-) diff --git a/src/esp32_platform.cpp b/src/esp32_platform.cpp index a8c985b..9367f4e 100644 --- a/src/esp32_platform.cpp +++ b/src/esp32_platform.cpp @@ -10,22 +10,17 @@ #define KNX_SERIAL Serial1 #endif -#ifndef KNX_UART_RX_PIN -#define KNX_UART_RX_PIN -1 -#endif - -#ifndef KNX_UART_TX_PIN -#define KNX_UART_TX_PIN -1 -#endif - Esp32Platform::Esp32Platform() #ifndef KNX_NO_DEFAULT_UART : ArduinoPlatform(&KNX_SERIAL) #endif { -#ifndef KNX_NO_DEFAULT_UART - knxUartPins(KNX_UART_RX_PIN, KNX_UART_TX_PIN); -#endif + #ifdef KNX_UART_RX_PIN + _rxPin = KNX_UART_RX_PIN; + #endif + #ifdef KNX_UART_TX_PIN + _txPin = KNX_UART_TX_PIN; + #endif } Esp32Platform::Esp32Platform(HardwareSerial* s) : ArduinoPlatform(s) diff --git a/src/rp2040_arduino_platform.cpp b/src/rp2040_arduino_platform.cpp index dd8dfb9..ddc89cb 100644 --- a/src/rp2040_arduino_platform.cpp +++ b/src/rp2040_arduino_platform.cpp @@ -56,21 +56,16 @@ extern Wiznet5500lwIP KNX_NETIF; #endif -#ifndef KNX_UART_RX_PIN -#define KNX_UART_RX_PIN UART_PIN_NOT_DEFINED -#endif - -#ifndef KNX_UART_TX_PIN -#define KNX_UART_TX_PIN UART_PIN_NOT_DEFINED -#endif - RP2040ArduinoPlatform::RP2040ArduinoPlatform() #ifndef KNX_NO_DEFAULT_UART : ArduinoPlatform(&KNX_SERIAL) #endif { - #ifndef KNX_NO_DEFAULT_UART - knxUartPins(KNX_UART_RX_PIN, KNX_UART_TX_PIN); + #ifdef KNX_UART_RX_PIN + _rxPin = KNX_UART_RX_PIN; + #endif + #ifdef KNX_UART_TX_PIN + _txPin = KNX_UART_TX_PIN; #endif #ifndef USE_RP2040_EEPROM_EMULATION _memoryType = Flash; @@ -86,14 +81,8 @@ RP2040ArduinoPlatform::RP2040ArduinoPlatform( HardwareSerial* s) : ArduinoPlatfo void RP2040ArduinoPlatform::knxUartPins(pin_size_t rxPin, pin_size_t txPin) { - SerialUART* serial = dynamic_cast(_knxSerial); - if(serial) - { - if (rxPin != UART_PIN_NOT_DEFINED) - serial->setRX(rxPin); - if (txPin != UART_PIN_NOT_DEFINED) - serial->setTX(txPin); - } + _rxPin = rxPin; + _txPin = txPin; } void RP2040ArduinoPlatform::setupUart() @@ -101,6 +90,10 @@ void RP2040ArduinoPlatform::setupUart() SerialUART* serial = dynamic_cast(_knxSerial); if(serial) { + if (_rxPin != UART_PIN_NOT_DEFINED) + serial->setRX(_rxPin); + if (_txPin != UART_PIN_NOT_DEFINED) + serial->setTX(_txPin); serial->setPollingMode(); } diff --git a/src/rp2040_arduino_platform.h b/src/rp2040_arduino_platform.h index b71b3b4..613ba27 100644 --- a/src/rp2040_arduino_platform.h +++ b/src/rp2040_arduino_platform.h @@ -128,6 +128,8 @@ public: #endif protected: IPAddress mcastaddr; protected: uint16_t _port; + protected: pin_size_t _rxPin = UART_PIN_NOT_DEFINED; + protected: pin_size_t _txPin = UART_PIN_NOT_DEFINED; #endif };