bufserial: correctly report buffer overflow

trunk
alexis 2022-08-16 18:32:27 -06:00
parent bf23ece9e3
commit 31480f2f22
1 changed files with 10 additions and 2 deletions

View File

@ -19,6 +19,7 @@ public:
bufserial(serial & sp)
: m_serial(&sp)
, m_rx_overflow(false)
{
m_serial->rxcie(true);
}
@ -28,7 +29,8 @@ public:
void rxc()
{
int c = m_serial->recv();
m_rxbuf.push(c); // TODO what if it overflows?
if (!m_rxbuf.push(c))
m_rx_overflow = true;
}
// Data Register Empty interrupt handler. Must be called from the
@ -47,7 +49,12 @@ public:
virtual int recv() override
{
int c;
if (m_rxbuf.pop(c))
if (m_rx_overflow)
{
m_rx_overflow = false;
return serial::BUF_OVERFLOW;
}
else if (m_rxbuf.pop(c))
return c;
else
return EOF;
@ -63,6 +70,7 @@ private:
serial * m_serial;
ringbuf<int, Txsize> m_txbuf;
ringbuf<int, Rxsize> m_rxbuf;
bool m_rx_overflow;
};
#endif // !defined(BUFSERIAL_HPP)