[gnoduino: 18/237] Flushing outgoing and incoming data in Serial.end().



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]