8000 Remove timeout for SerialUART/SerialPIO::read/peek (#466) · randomllama/arduino-pico@4cd65d1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4cd65d1

Browse files
Remove timeout for SerialUART/SerialPIO::read/peek (earlephilhower#466)
Fixes earlephilhower#464 and other incompatibilities Remove the timeout check from ::read and ::peek on the SerialUART/PIO classes (SerialUSB already ignores it). See documentation https://www.arduino.cc/reference/en/language/functions/communication/serial/settimeout/ and thanks to @JAndrassy's explanation earlephilhower#464 (comment)
1 parent bbae702 commit 4cd65d1

File tree

2 files changed

+16
-40
lines changed

2 files changed

+16
-40
lines changed

cores/rp2040/SerialPIO.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -258,35 +258,23 @@ int SerialPIO::peek() {
258258
return -1;
259259
}
260260
// If there's something in the FIFO now, just peek at it
261-
uint32_t start = millis();
262-
uint32_t now = millis();
263-
while ((now - start) < _timeout) {
264-
if (_writer != _reader) {
265-
return _queue[_reader];
266-
}
267-
delay(1);
268-
now = millis();
261+
if (_writer != _reader) {
262+
return _queue[_reader];
269263
}
270-
return -1; // Nothing available before timeout
264+
return -1;
271265
}
272266

273267
int SerialPIO::read() {
274268
CoreMutex m(&_mutex);
275269
if (!_running || !m || (_rx == NOPIN)) {
276270
return -1;
277271
}
278-
uint32_t start = millis();
279-
uint32_t now = millis();
280-
while ((now - start) < _timeout) {
281-
if (_writer != _reader) {
282-
auto ret = _queue[_reader];
283-
_reader = (_reader + 1) % _fifosize;
284-
return ret;
285-
}
286-
delay(1);
287-
now = millis();
272+
if (_writer != _reader) {
273+
auto ret = _queue[_reader];
274+
_reader = (_reader + 1) % _fifosize;
275+
return ret;
288276
}
289-
return -1; // Timeout
277+
return -1;
290278
}
291279

292280
int SerialPIO::available() {

cores/rp2040/SerialUART.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -158,35 +158,23 @@ int SerialUART::peek() {
158158
if (!_running || !m) {
159159
return -1;
160160
}
161-
uint32_t start = millis();
162-
uint32_t now = millis();
163-
while ((now - start) < _timeout) {
164-
if (_writer != _reader) {
165-
return _queue[_reader];
166-
}
167-
delay(1);
168-
now = millis();
161+
if (_writer != _reader) {
162+
return _queue[_reader];
169163
}
170-
return -1; // Nothing available before timeout
164+
return -1;
171165
}
172166

173167
int SerialUART::read() {
174168
CoreMutex m(&_mutex);
175169
if (!_running || !m) {
176170
return -1;
177171
}
178-
uint32_t start = millis();
179-
uint32_t now = millis();
180-
while ((now - start) < _timeout) {
181-
if (_writer != _reader) {
182-
auto ret = _queue[_reader];
183-
_reader = (_reader + 1) % _fifoSize;
184-
return ret;
185-
}
186-
delay(1);
187-
now = millis();
172+
if (_writer != _reader) {
173+
auto ret = _queue[_reader];
174+
_reader = (_reader + 1) % _fifoSize;
175+
return ret;
188176
}
189-
return -1; // Timeout
177+
return -1;
190178
}
191179

192180
int SerialUART::available() {

0 commit comments

Comments
 (0)
0