DTR Flow Control

lawson_whitney at juno.com lawson_whitney at juno.com
Sat Mar 2 22:42:47 CST 2002

On Thu, 28 Feb 2002, Michael Cardenas wrote:

> The parts of the source I'm using are not very different from yours.
> I picked up the latest source and tried the app and it still has the same
> behavior. It can talk to the modem enough to get it to connect to the ppp
> server, but it cannot communicate over the network.
> I've attached a trace using my app with the latest source. The application
> seems to be stuck waiting for data and using ClearCommError to check the
> number of bytes received. It calls GetOverlappedResult along with
> GetLastError to check when the pending io operation has completed.
> Maybe there's something wrong with the way overlapped io is implemented when
> it interacts with a serial port. The documentation calls for the user to
> manually set the file pointer when using overlappedio, which doesn't seem
> like it would work on a serial port. The set_file_pointer function in
> server.c doesn't check for serial ports, but I'm not familiar enough with
> serial communications under linux to know if it matters. I tried to disable
> set_file_pointer for serial ports, but this didn't seem to have any effect.
That doesn't make much sense to me.  I can't see why a comm port should
be lseekable, if that is what you mean.  I don't much trust Microsoft
doco either.  The app doesn't seem to be doing set_file_pointer on the
modem either.

> michael

I don't know about that yet, but it seems to me that GetCommState is
incorrectly creating lpdcb with fParity - if that is indeed what it is
and the structure and names are correct, and then the dumb app is just
using it.  Could you try it this helps?

diff -ur was/dlls/kernel/comm.c is/dlls/kernel/comm.c
--- was/dlls/kernel/comm.c	Fri Mar  1 15:19:45 2002
+++ is/dlls/kernel/comm.c	Sat Mar  2 23:22:09 2002
@@ -1235,19 +1235,17 @@
 		        ERR("unknown size %x \n",port.c_cflag & CSIZE);
-        if(port.c_iflag & INPCK)
-            lpdcb->fParity = TRUE;
-        else
-            lpdcb->fParity = FALSE;
 #ifdef CMSPAR
 	switch (port.c_cflag & (PARENB | PARODD | CMSPAR))
 	switch (port.c_cflag & (PARENB | PARODD))
+                lpdcb->fParity = TRUE;
 		case 0:
 			lpdcb->Parity = NOPARITY;
+                        lpdcb->fParity = FALSE;
 		case PARENB:
 			lpdcb->Parity = EVENPARITY;

Juno offers FREE or PREMIUM Internet access for less!
Join Juno today!  For your FREE software, visit:

More information about the wine-devel mailing list