Skip to content

Commit 456b474

Browse files
Allow re-setting identical pins without panic() (#1655)
Setting a pin to the current value is a no-op, not fatal. Fixes #1652
1 parent f11cc4d commit 456b474

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

cores/rp2040/SerialUART.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ bool SerialUART::setRX(pin_size_t pin) {
4040
return true;
4141
}
4242

43+
if (_rx == pin) {
44+
return true;
45+
}
46+
4347
if (_running) {
4448
panic("FATAL: Attempting to set Serial%d.RX while running", uart_get_index(_uart) + 1);
4549
} else {
@@ -57,6 +61,10 @@ bool SerialUART::setTX(pin_size_t pin) {
5761
return true;
5862
}
5963

64+
if (_tx == pin) {
65+
return true;
66+
}
67+
6068
if (_running) {
6169
panic("FATAL: Attempting to set Serial%d.TX while running", uart_get_index(_uart) + 1);
6270
} else {
@@ -74,6 +82,10 @@ bool SerialUART::setRTS(pin_size_t pin) {
7482
return true;
7583
}
7684

85+
if (_rts == pin) {
86+
return true;
87+
}
88+
7789
if (_running) {
7890
panic("FATAL: Attempting to set Serial%d.RTS while running", uart_get_index(_uart) + 1);
7991
} else {
@@ -91,6 +103,10 @@ bool SerialUART::setCTS(pin_size_t pin) {
91103
return true;
92104
}
93105

106+
if (_cts == pin) {
107+
return true;
108+
}
109+
94110
if (_running) {
95111
panic("FATAL: Attempting to set Serial%d.CTS while running", uart_get_index(_uart) + 1);
96112
} else {

libraries/SPI/src/SPI.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,10 @@ bool SPIClassRP2040::setRX(pin_size_t pin) {
206206
return true;
207207
}
208208

209+
if (_RX == pin) {
210+
return true;
211+
}
212+
209213
if (_running) {
210214
panic("FATAL: Attempting to set SPI%s.RX while running", spi_get_index(_spi) ? "1" : "");
211215
} else {
@@ -223,6 +227,10 @@ bool SPIClassRP2040::setCS(pin_size_t pin) {
223227
return true;
224228
}
225229

230+
if (_CS == pin) {
231+
return true;
232+
}
233+
226234
if (_running) {
227235
panic("FATAL: Attempting to set SPI%s.CS while running", spi_get_index(_spi) ? "1" : "");
228236
} else {
@@ -240,6 +248,10 @@ bool SPIClassRP2040::setSCK(pin_size_t pin) {
240248
return true;
241249
}
242250

251+
if (_SCK == pin) {
252+
return true;
253+
}
254+
243255
if (_running) {
244256
panic("FATAL: Attempting to set SPI%s.SCK while running", spi_get_index(_spi) ? "1" : "");
245257
} else {
@@ -257,6 +269,10 @@ bool SPIClassRP2040::setTX(pin_size_t pin) {
257269
return true;
258270
}
259271

272+
if (_TX == pin) {
273+
return true;
274+
}
275+
260276
if (_running) {
261277
panic("FATAL: Attempting to set SPI%s.TX while running", spi_get_index(_spi) ? "1" : "");
262278
} else {

libraries/Wire/src/Wire.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ bool TwoWire::setSDA(pin_size_t pin) {
5656
return true;
5757
}
5858

59+
if (_sda == pin) {
60+
return true;
61+
}
62+
5963
if (_running) {
6064
panic("FATAL: Attempting to set Wire%s.SDA while running", i2c_hw_index(_i2c) ? "1" : "");
6165
} else {
@@ -73,6 +77,10 @@ bool TwoWire::setSCL(pin_size_t pin) {
7377
return true;
7478
}
7579

80+
if (_scl == pin) {
81+
return true;
82+
}
83+
7684
if (_running) {
7785
panic("FATAL: Attempting to set Wire%s.SCL while running", i2c_hw_index(_i2c) ? "1" : "");
7886
} else {

0 commit comments

Comments
 (0)