slightly simplified and clarified xon/xoff

This commit is contained in:
Michael Moon 2010-10-08 21:00:18 +11:00
parent f1e318ac1a
commit a77986784e
1 changed files with 3 additions and 2 deletions

View File

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