On Wed, 5 Dec 2001, Rein Klazes wrote: > On Wed, 5 Dec 2001 11:32:13 -0500 (EST), in > Hmm, it is this snippet that does the warning. > > if (lpdcb->fDtrControl == DTR_CONTROL_ENABLE) > { > WARN("DSR/DTR flow control not supported\n"); > } > > But in the preceding COMM_BuildOldCommDCB() call the default case is > selected: > > } else { > lpdcb->fInX = FALSE; > lpdcb->fOutX = FALSE; > lpdcb->fOutxCtsFlow = FALSE; > lpdcb->fOutxDsrFlow = FALSE; > lpdcb->fDtrControl = DTR_CONTROL_ENABLE; > > I don't have the time right now to fully look at this, but I feel that > the first DTR_CONTROL_ENABLE should really be DTR_CONTROL_HANDSHAKE. > The latter specifies flowcontrol (flow is stopped if buffers get > full), the former just specifies to set the DTR line high. > > Something similar a few lines above in the code where: > > lpdcb->fRtsControl == RTS_CONTROL_ENABLE > ) > { > port.c_cflag |= CRTSCTS; > TRACE("CRTSCTS\n"); > } > > perhaps the RTS_CONTROL_ENABLE should be RTS_CONTROL_HANDSHAKE? > > This would explain why in this case crtcts flowcontrol gets enabled on > a 3 wire serial link. > > Rein. > I think if winbase.h is right, you are right and the code has been wrong for a long time. The same error is all over the code. GetCommState sets RTS_CONTROL_ENABLE if the termios from tcgetattr() has CRTSCTS. Probably that should be RTS_CONTROL_HANDSHAKE? And where does RTS_CONTROL_ENABLE come from? I guess it should be on by default? Lawson