mirror of https://github.com/noisymime/Arduino.git
Serial.flush() waits for last character to be transmitted (michele.mazzucchi)
http://code.google.com/p/arduino/issues/detail?id=871
This commit is contained in:
parent
b7fc69aa9f
commit
f9f1d3af3c
|
@ -327,6 +327,8 @@ try_again:
|
||||||
*_ubrrh = baud_setting >> 8;
|
*_ubrrh = baud_setting >> 8;
|
||||||
*_ubrrl = baud_setting;
|
*_ubrrl = baud_setting;
|
||||||
|
|
||||||
|
transmitting = false;
|
||||||
|
|
||||||
sbi(*_ucsrb, _rxen);
|
sbi(*_ucsrb, _rxen);
|
||||||
sbi(*_ucsrb, _txen);
|
sbi(*_ucsrb, _txen);
|
||||||
sbi(*_ucsrb, _rxcie);
|
sbi(*_ucsrb, _rxcie);
|
||||||
|
@ -376,8 +378,9 @@ int HardwareSerial::read(void)
|
||||||
|
|
||||||
void HardwareSerial::flush()
|
void HardwareSerial::flush()
|
||||||
{
|
{
|
||||||
while (_tx_buffer->head != _tx_buffer->tail)
|
// UDR is kept full while the buffer is not empty, so TXC triggers when EMPTY && SENT
|
||||||
;
|
while (transmitting && ! (*_ucsra & _BV(TXC0)));
|
||||||
|
transmitting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t HardwareSerial::write(uint8_t c)
|
size_t HardwareSerial::write(uint8_t c)
|
||||||
|
@ -394,6 +397,9 @@ size_t HardwareSerial::write(uint8_t c)
|
||||||
_tx_buffer->head = i;
|
_tx_buffer->head = i;
|
||||||
|
|
||||||
sbi(*_ucsrb, _udrie);
|
sbi(*_ucsrb, _udrie);
|
||||||
|
// clear the TXC bit -- "can be cleared by writing a one to its bit location"
|
||||||
|
transmitting = true;
|
||||||
|
sbi(*_ucsra, TXC0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ class HardwareSerial : public Stream
|
||||||
uint8_t _rxcie;
|
uint8_t _rxcie;
|
||||||
uint8_t _udrie;
|
uint8_t _udrie;
|
||||||
uint8_t _u2x;
|
uint8_t _u2x;
|
||||||
|
bool transmitting;
|
||||||
public:
|
public:
|
||||||
HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
|
HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
|
||||||
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
|
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
|
||||||
|
|
Loading…
Reference in New Issue