[Com0com-cvs] com0com handflow.c,1.2,1.3
The virtual serial port driver for Windows.
Brought to you by:
vfrolov
From: Vyacheslav F. <vf...@us...> - 2006-03-15 13:49:29
|
Update of /cvsroot/com0com/com0com In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28310 Modified Files: handflow.c Log Message: Fixed [1446861] Problems with setting DCB.fOutxCtsFlow and DCB.fRtsControl Thanks to Brad (bdwade100 at users.sourceforge.net) Index: handflow.c =================================================================== RCS file: /cvsroot/com0com/com0com/handflow.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** handflow.c 17 Feb 2006 07:55:13 -0000 1.2 --- handflow.c 15 Mar 2006 13:49:15 -0000 1.3 *************** *** 20,23 **** --- 20,27 ---- * * $Log$ + * Revision 1.3 2006/03/15 13:49:15 vfrolov + * Fixed [1446861] Problems with setting DCB.fOutxCtsFlow and DCB.fRtsControl + * Thanks to Brad (bdwade100 at users.sourceforge.net) + * * Revision 1.2 2006/02/17 07:55:13 vfrolov * Implemented IOCTL_SERIAL_SET_BREAK_ON and IOCTL_SERIAL_SET_BREAK_OFF *************** *** 43,49 **** PLIST_ENTRY pQueueToComplete) { ! ULONG bits; PC0C_BUFFER pReadBuf; PSERIAL_HANDFLOW pNewHandFlow; pReadBuf = &pDevExt->pIoPortLocal->readBuf; --- 47,54 ---- PLIST_ENTRY pQueueToComplete) { ! ULONG bits, mask; PC0C_BUFFER pReadBuf; PSERIAL_HANDFLOW pNewHandFlow; + BOOLEAN setModemStatusHolding; pReadBuf = &pDevExt->pIoPortLocal->readBuf; *************** *** 62,69 **** } if ((pNewHandFlow->FlowReplace & SERIAL_AUTO_TRANSMIT) == 0) SetXonXoffHolding(pDevExt->pIoPortLocal, C0C_XCHAR_ON); ! bits = 0; if (!pHandFlow || --- 67,85 ---- } + // Set local side if ((pNewHandFlow->FlowReplace & SERIAL_AUTO_TRANSMIT) == 0) SetXonXoffHolding(pDevExt->pIoPortLocal, C0C_XCHAR_ON); ! if (!pHandFlow || ! (pDevExt->handFlow.ControlHandShake & SERIAL_OUT_HANDSHAKEMASK) != ! (pHandFlow->ControlHandShake & SERIAL_OUT_HANDSHAKEMASK)) ! { ! setModemStatusHolding = TRUE; ! } else { ! setModemStatusHolding = FALSE; ! } ! ! // Set remote side ! bits = mask = 0; if (!pHandFlow || *************** *** 71,76 **** (pHandFlow->FlowReplace & SERIAL_RTS_MASK)) { ! if ((pNewHandFlow->FlowReplace & SERIAL_RTS_MASK) == SERIAL_RTS_CONTROL) bits |= C0C_MSB_CTS; } --- 87,98 ---- (pHandFlow->FlowReplace & SERIAL_RTS_MASK)) { ! if ((pNewHandFlow->FlowReplace & SERIAL_RTS_MASK) == 0) { ! mask |= C0C_MSB_CTS; // Turn off CTS on remote side if RTS is disabled ! } ! else ! if ((pNewHandFlow->FlowReplace & SERIAL_RTS_MASK) == SERIAL_RTS_CONTROL) { bits |= C0C_MSB_CTS; + mask |= C0C_MSB_CTS; + } } *************** *** 79,84 **** (pHandFlow->ControlHandShake & SERIAL_DTR_MASK)) { ! if ((pNewHandFlow->ControlHandShake & SERIAL_DTR_MASK) == SERIAL_DTR_CONTROL) bits |= C0C_MSB_DSR; } --- 101,112 ---- (pHandFlow->ControlHandShake & SERIAL_DTR_MASK)) { ! if ((pNewHandFlow->ControlHandShake & SERIAL_DTR_MASK) == 0) { ! mask |= C0C_MSB_DSR; // Turn off DSR on remote side if DTR is disabled ! } ! else ! if ((pNewHandFlow->ControlHandShake & SERIAL_DTR_MASK) == SERIAL_DTR_CONTROL) { bits |= C0C_MSB_DSR; + mask |= C0C_MSB_DSR; + } } *************** *** 86,91 **** pDevExt->handFlow = *pHandFlow; ! if (bits) ! SetModemStatus(pDevExt->pIoPortRemote, bits, bits, pQueueToComplete); SetLimit(pDevExt->pIoPortRemote->pDevExt); --- 114,122 ---- pDevExt->handFlow = *pHandFlow; ! if (setModemStatusHolding) ! SetModemStatusHolding(pDevExt->pIoPortLocal); ! ! if (mask) ! SetModemStatus(pDevExt->pIoPortRemote, bits, mask, pQueueToComplete); SetLimit(pDevExt->pIoPortRemote->pDevExt); |