slightly simplified and clarified xon/xoff
This commit is contained in:
parent
f1e318ac1a
commit
a77986784e
5
serial.c
5
serial.c
|
|
@ -48,6 +48,7 @@ volatile uint8_t txbuf[BUFSIZE];
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef XONXOFF
|
#ifdef XONXOFF
|
||||||
|
#define FLOWFLAG_STATE_XOFF 0
|
||||||
#define FLOWFLAG_SEND_XON 1
|
#define FLOWFLAG_SEND_XON 1
|
||||||
#define FLOWFLAG_SEND_XOFF 2
|
#define FLOWFLAG_SEND_XOFF 2
|
||||||
#define FLOWFLAG_STATE_XON 4
|
#define FLOWFLAG_STATE_XON 4
|
||||||
|
|
@ -91,7 +92,7 @@ ISR(USART0_RX_vect)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XONXOFF
|
#ifdef XONXOFF
|
||||||
if (flowflags & FLOWFLAG_STATE_XON && buf_canread(rx) >= BUFSIZE - 16) {
|
if (flowflags & FLOWFLAG_STATE_XON && buf_canwrite(rx) <= 16) {
|
||||||
// the buffer has only 16 free characters left, so send an XOFF
|
// the buffer has only 16 free characters left, so send an XOFF
|
||||||
// more characters might come in until the XOFF takes effect
|
// more characters might come in until the XOFF takes effect
|
||||||
flowflags = FLOWFLAG_SEND_XOFF | FLOWFLAG_STATE_XON;
|
flowflags = FLOWFLAG_SEND_XOFF | FLOWFLAG_STATE_XON;
|
||||||
|
|
@ -114,7 +115,7 @@ ISR(USART0_UDRE_vect)
|
||||||
}
|
}
|
||||||
else if (flowflags & FLOWFLAG_SEND_XOFF) {
|
else if (flowflags & FLOWFLAG_SEND_XOFF) {
|
||||||
UDR0 = ASCII_XOFF;
|
UDR0 = ASCII_XOFF;
|
||||||
flowflags = 0;
|
flowflags = FLOWFLAG_STATE_XOFF;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue