@@ -126,20 +126,37 @@ bool UARTHardware::ConfigureSerial() {
126126 _baud_rate = _config.baud_rate ;
127127#endif // HAS_SW_SERIAL
128128 } else {
129+ #if ARDUINO_ARCH_ESP32
129130 // Create a new HardwareSerial instance
130131 _hwSerial = new HardwareSerial (_config.uart_nbr );
131- if (_hwSerial == nullptr ) {
132- WS_DEBUG_PRINTLN (
133- " [uart] ERROR: Failed to allocate HardwareSerial instance!" );
132+ if (_hwSerial == nullptr )
134133 return false ;
135- }
136- // Calls to HardwareSerial begin() differ based on the platform
137- #if ARDUINO_ARCH_ESP32
138134 _hwSerial->begin ((unsigned long )_config.baud_rate , (uint32_t )cfg, rx_pin,
139135 tx_pin, false , (unsigned long )_config.timeout );
136+ #elif ARDUINO_ARCH_RP2040
137+ // Create a new SerialUART instance
138+ uart_inst_t *uart_hw = nullptr ;
139+ // determine which bus to use (RP2040 only supports 2 hardware UARTs)
140+ if (_config.uart_nbr == 0 ) {
141+ uart_hw = uart0;
142+ } else if (_config.uart_nbr == 1 ) {
143+ uart_hw = uart1;
144+ } else {
145+ WS_DEBUG_PRINTLN (" [uart] ERROR: Invalid UART bus number specified!" );
146+ return false ;
147+ }
148+ _hwSerial = new SerialUART (uart_hw, tx_pin, rx_pin);
149+ if (_hwSerial == nullptr ) {
150+ return false ;
151+ }
152+ _hwSerial->begin ((unsigned long )_config.baud_rate , (uint32_t )cfg);
140153#else
141- // RP2040, ESP8266, SAMD, and other platforms
154+ // ESP8266, SAMD, and other platforms
142155 // take the default Arduino/Wiring API arguments
156+ // Create a new HardwareSerial instance
157+ _hwSerial = new HardwareSerial (_config.uart_nbr );
158+ if (_hwSerial == nullptr )
159+ return false ;
143160 _hwSerial->begin ((unsigned long )_config.baud_rate , (uint32_t )cfg);
144161#endif
145162 _baud_rate = _config.baud_rate ;
0 commit comments