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

That is, waiting for outgoing data to transmit and dropping any received data.
This commit is contained in:
David A. Mellis 2011-03-06 12:20:42 -05:00
parent 1bef2990b6
commit af841d166d
1 changed files with 8 additions and 2 deletions

View File

@ -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)