Serial Port handshaking problem...
Hi guys,
I have a little problem with the serial port handshaking.
When I send a buffer to my device. At some point, my device is busy and sets
the CTS pin Off. Normally, the computer should stop sending data straight
after that the CTS goes off and start back when it goes back on.
The problem is that it does not stop immediatly. Indeed, few bytes are sent
even after the CTS pin is down... Then, the communication is stopped and
continues when the CTS goes back on...
Obviously, as the device said that it wasn't ready, the extra bytes are
lost...
For infomation, here is how I filled my DCB structure:
dcb.DCBlength=28;
dcb.BaudRate=9600;
dcb.fBinary=1;
dcb.fParity=0;
dcb.fOutxCtsFlow=1;
dcb.fOutxDsrFlow=0;
dcb.fDtrControl=0;
dcb.fDsrSensitivity=0;
dcb.fTXContinueOnXoff=1;
dcb.fOutX=0;
dcb.fInX=0;
dcb.ErrorChar=0;
dcb.fNull=0;
dcb.fRtsControl=2;
dcb.fAbortOnError=0;
dcb.fDummy2=0;
dcb.wReserved=0;
dcb.XonLim 48;
dcb.XoffLim=512;
dcb.ByteSize=8;
dcb.Parity=0;
dcb.StopBits=0;
dcb.XonChar=17;
dcb.XoffChar=19;
dcb.ErrorChar=0;
dcb.EofChar=26;
dcb.EvtChar=0;
dcb.wReserved1=0;
Here is my write file call:
bool bWriteStat=WriteFile(m_hIDComDev, (void*)buf, sizeof(buf),
&dwBytesWritten , &m_OverlappedWrite );
if( !bWriteStat && (GetLastError()==ERROR_IO_PENDING) )//Overlapped I/O
operation is in progress.
{
if( WaitForSingleObject( m_OverlappedWrite.hEvent, INFINITE )==WAIT_OBJECT_0)
GetOverlappedResult( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE
);
else CancelIo(m_hIDComDev);
}