Permalink
Browse files

Flushing outgoing and incoming data in Serial.end().

That is, waiting for outgoing data to transmit and dropping any received data.
  • Loading branch information...
1 parent 1bef299 commit af841d166dbc213194badfe94b7b7b0684787ca0 @damellis damellis committed Mar 6, 2011
Showing with 8 additions and 2 deletions.
  1. +8 −2 hardware/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)

0 comments on commit af841d1

Please sign in to comment.