bufserial: correctly report buffer overflow
parent
bf23ece9e3
commit
31480f2f22
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue