[gnoduino: 18/237] Flushing outgoing and incoming data in Serial.end().
- From: Lucian Langa <lucilanga src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnoduino: 18/237] Flushing outgoing and incoming data in Serial.end().
- Date: Sat, 31 Mar 2012 20:16:20 +0000 (UTC)
commit 0847b310c1fdde08cf96534f516f9caf5b6a084f
Author: David A. Mellis <d mellis arduino cc>
Date: Sun Mar 6 12:20:42 2011 -0500
Flushing outgoing and incoming data in Serial.end().
That is, waiting for outgoing data to transmit and dropping any received data.
arduino/cores/arduino/HardwareSerial.cpp | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/arduino/cores/arduino/HardwareSerial.cpp b/arduino/cores/arduino/HardwareSerial.cpp
index 6738675..1154ae7 100644
--- a/arduino/cores/arduino/HardwareSerial.cpp
+++ b/arduino/cores/arduino/HardwareSerial.cpp
@@ -313,16 +313,22 @@ void HardwareSerial::begin(long baud)
sbi(*_ucsrb, _rxen);
sbi(*_ucsrb, _txen);
sbi(*_ucsrb, _rxcie);
- cbi(*_ucsrb, _udrie); // XXX: what if there's already data in the tx buffer?
+ cbi(*_ucsrb, _udrie);
}
-// XXX: should we empty the rx and tx buffers here?
void HardwareSerial::end()
{
+ // wait for transmission of outgoing data
+ while (_tx_buffer->head != _tx_buffer->tail)
+ ;
+
cbi(*_ucsrb, _rxen);
cbi(*_ucsrb, _txen);
cbi(*_ucsrb, _rxcie);
cbi(*_ucsrb, _udrie);
+
+ // clear any received data
+ _rx_buffer->head = _rx_buffer->tail;
}
int HardwareSerial::available(void)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]