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 @@ default: 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)) #else switch (port.c_cflag & (PARENB | PARODD)) #endif { + lpdcb->fParity = TRUE; case 0: lpdcb->Parity = NOPARITY; + lpdcb->fParity = FALSE; break; case PARENB: lpdcb->Parity = EVENPARITY;
________________________________________________________________ GET INTERNET ACCESS FROM JUNO! Juno offers FREE or PREMIUM Internet access for less! Join Juno today! For your FREE software, visit: http://dl.www.juno.com/get/web/.