Skip to content

Commit c26a21f

Browse files
sandeepmistrycmaglie
authored andcommitted
Make UART RTS + CTS configurable in constructor only
1 parent 7fc402f commit c26a21f

File tree

2 files changed

+10
-37
lines changed

2 files changed

+10
-37
lines changed

cores/arduino/Uart.cpp

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,20 @@
2424
#define NO_CTS_PIN 255
2525
#define RTS_RX_THRESHOLD 10
2626

27-
Uart::Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX)
27+
Uart::Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX) :
28+
Uart(_s, _pinRX, _pinTX, _padRX, _padTX, NO_RTS_PIN, NO_CTS_PIN)
29+
{
30+
}
31+
32+
Uart::Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX, uint8_t _pinRTS, uint8_t _pinCTS)
2833
{
2934
sercom = _s;
3035
uc_pinRX = _pinRX;
3136
uc_pinTX = _pinTX;
3237
uc_padRX = _padRX ;
3338
uc_padTX = _padTX;
34-
uc_pinRTS = NO_RTS_PIN;
35-
uc_pinCTS = NO_CTS_PIN;
39+
uc_pinRTS = _pinRTS;
40+
uc_pinCTS = _pinCTS;
3641
}
3742

3843
void Uart::begin(unsigned long baudrate)
@@ -45,11 +50,8 @@ void Uart::begin(unsigned long baudrate, uint16_t config)
4550
pinPeripheral(uc_pinRX, g_APinDescription[uc_pinRX].ulPinType);
4651
pinPeripheral(uc_pinTX, g_APinDescription[uc_pinTX].ulPinType);
4752

48-
if (uc_pinRTS != NO_RTS_PIN) {
53+
if (uc_padTX == UART_TX_RTS_CTS_PAD_0_2_3 && uc_pinRTS != NO_RTS_PIN && uc_pinCTS != NO_CTS_PIN) {
4954
pinPeripheral(uc_pinRTS, g_APinDescription[uc_pinRTS].ulPinType);
50-
}
51-
52-
if (uc_pinCTS != NO_CTS_PIN) {
5355
pinPeripheral(uc_pinCTS, g_APinDescription[uc_pinCTS].ulPinType);
5456
}
5557

@@ -62,11 +64,6 @@ void Uart::begin(unsigned long baudrate, uint16_t config)
6264

6365
void Uart::end()
6466
{
65-
if (uc_pinRTS != NO_RTS_PIN) {
66-
digitalWrite(uc_pinRTS, LOW);
67-
pinMode(uc_pinRTS, INPUT);
68-
}
69-
7067
sercom->resetUART();
7168
rxBuffer.clear();
7269
txBuffer.clear();
@@ -205,25 +202,3 @@ SercomParityMode Uart::extractParity(uint16_t config)
205202
return SERCOM_ODD_PARITY;
206203
}
207204
}
208-
209-
int Uart::attachRts(uint8_t pin)
210-
{
211-
if (uc_padTX == UART_TX_RTS_CTS_PAD_0_2_3) {
212-
uc_pinRTS = pin;
213-
214-
return 1;
215-
}
216-
217-
return 0;
218-
}
219-
220-
int Uart::attachCts(uint8_t pin)
221-
{
222-
if (uc_padTX == UART_TX_RTS_CTS_PAD_0_2_3) {
223-
uc_pinCTS = pin;
224-
225-
return 1;
226-
}
227-
228-
return 0;
229-
}

cores/arduino/Uart.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class Uart : public HardwareSerial
2828
{
2929
public:
3030
Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX);
31+
Uart(SERCOM *_s, uint8_t _pinRX, uint8_t _pinTX, SercomRXPad _padRX, SercomUartTXPad _padTX, uint8_t _pinRTS, uint8_t _pinCTS);
3132
void begin(unsigned long baudRate);
3233
void begin(unsigned long baudrate, uint16_t config);
3334
void end();
@@ -43,9 +44,6 @@ class Uart : public HardwareSerial
4344

4445
operator bool() { return true; }
4546

46-
int attachRts(uint8_t pin);
47-
int attachCts(uint8_t pin);
48-
4947
private:
5048
SERCOM *sercom;
5149
RingBuffer rxBuffer;

0 commit comments

Comments
 (0)