6
6
#include " pins_arduino.h"
7
7
#include " HardwareSerial.h"
8
8
#include " soc/soc_caps.h"
9
+ #include " driver/uart.h"
9
10
10
11
#ifndef SOC_RX0
11
12
#if CONFIG_IDF_TARGET_ESP32
@@ -114,7 +115,6 @@ void serialEventRun(void)
114
115
}
115
116
#endif
116
117
117
-
118
118
HardwareSerial::HardwareSerial (int uart_nr) : _uart_nr(uart_nr), _uart(NULL ), _rxBufferSize(256 ) {}
119
119
120
120
void HardwareSerial::begin (unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin, bool invert, unsigned long timeout_ms, uint8_t rxfifo_full_thrhd)
@@ -123,28 +123,39 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in
123
123
log_e (" Serial number is invalid, please use numers from 0 to %u" , SOC_UART_NUM - 1 );
124
124
return ;
125
125
}
126
+
127
+ // First Time or after end() --> set default Pins
128
+ if (!uartIsDriverInstalled (_uart)) {
129
+ switch (_uart_nr) {
130
+ case UART_NUM_0:
131
+ rxPin = rxPin < 0 ? SOC_RX0 : rxPin;
132
+ txPin = txPin < 0 ? SOC_TX0 : txPin;
133
+ break ;
134
+ #if SOC_UART_NUM > 1 // may save some flash bytes...
135
+ case UART_NUM_1:
136
+ rxPin = rxPin < 0 ? RX1 : rxPin;
137
+ txPin = txPin < 0 ? TX1 : txPin;
138
+ break ;
139
+ #endif
140
+ #if SOC_UART_NUM > 2 // may save some flash bytes...
141
+ case UART_NUM_2:
142
+ rxPin = rxPin < 0 ? RX2 : rxPin;
143
+ txPin = txPin < 0 ? TX2 : txPin;
144
+ break ;
145
+ #endif
146
+ default :
147
+ log_e (" Bad UART Number" );
148
+ return ;
149
+ }
150
+ }
151
+
126
152
if (_uart) {
127
153
// in this case it is a begin() over a previous begin() - maybe to change baud rate
128
154
// thus do not disable debug output
129
155
end (false );
130
156
}
131
- if (_uart_nr == 0 && rxPin < 0 && txPin < 0 ) {
132
- rxPin = SOC_RX0;
133
- txPin = SOC_TX0;
134
- }
135
- #if SOC_UART_NUM > 1
136
- if (_uart_nr == 1 && rxPin < 0 && txPin < 0 ) {
137
- rxPin = RX1;
138
- txPin = TX1;
139
- }
140
- #endif
141
- #if SOC_UART_NUM > 2
142
- if (_uart_nr == 2 && rxPin < 0 && txPin < 0 ) {
143
- rxPin = RX2;
144
- txPin = TX2;
145
- }
146
- #endif
147
157
158
+ // IDF UART driver keeps Pin setting on restarting. Negative Pin number will keep it unmodified.
148
159
_uart = uartBegin (_uart_nr, baud ? baud : 9600 , config, rxPin, txPin, _rxBufferSize, invert, rxfifo_full_thrhd);
149
160
if (!baud) {
150
161
// using baud rate as zero, forces it to try to detect the current baud rate in place
@@ -280,9 +291,16 @@ void HardwareSerial::setRxInvert(bool invert)
280
291
uartSetRxInvert (_uart, invert);
281
292
}
282
293
283
- void HardwareSerial::setPins (uint8_t rxPin, uint8_t txPin)
294
+ // negative Pin value will keep it unmodified
295
+ void HardwareSerial::setPins (int8_t rxPin, int8_t txPin, int8_t ctsPin, int8_t rtsPin)
296
+ {
297
+ uartSetPins (_uart, rxPin, txPin, ctsPin, rtsPin);
298
+ }
299
+
300
+ // Enables or disables Hardware Flow Control using RTS and/or CTS pins (must use setAllPins() before)
301
+ void HardwareSerial::setHwFlowCtrlMode (uint8_t mode, uint8_t threshold)
284
302
{
285
- uartSetPins (_uart, rxPin, txPin );
303
+ uartSetHwFlowCtrlMode (_uart, mode, threshold );
286
304
}
287
305
288
306
size_t HardwareSerial::setRxBufferSize (size_t new_size) {
0 commit comments