1,316
社区成员
发帖
与我相关
我的任务
分享
BOOL CSerialCom::UpdateConnection()
{
DCB dcb = {0};
COMMPROP commprop;
DWORD fdwEvtMask;
dcb.DCBlength = sizeof(dcb);
//
// get current DCB settings
//
if (!GetCommState(COMDEV(COMInfo), &dcb))
ddebug("GetCommState");
GetCommProperties(COMDEV(COMInfo), &commprop);
GetCommMask(COMDEV(COMInfo), &fdwEvtMask);
//
// update DCB rate, byte size, parity, and stop bits size
//
dcb.BaudRate = BAUDRATE(COMInfo);
dcb.ByteSize = BYTESIZE(COMInfo);
dcb.Parity = PARITY(COMInfo);
dcb.StopBits = STOPBITS(COMInfo);
//
// update event flags
//
if (EVENTFLAGS(COMInfo) & EV_RXFLAG)
dcb.EvtChar = FLAGCHAR(COMInfo);
else
dcb.EvtChar = '\0';
//
// update flow control settings
//
dcb.fDtrControl = DTRCONTROL(COMInfo);
dcb.fRtsControl = RTSCONTROL(COMInfo);
dcb.fOutxCtsFlow = CTSOUTFLOW(COMInfo);
dcb.fOutxDsrFlow = DSROUTFLOW(COMInfo);
dcb.fDsrSensitivity = DSRINFLOW(COMInfo);
dcb.fOutX = XONXOFFOUTFLOW(COMInfo);
dcb.fInX = XONXOFFINFLOW(COMInfo);
dcb.fTXContinueOnXoff = TXAFTERXOFFSENT(COMInfo);
dcb.XonChar = XONCHAR(COMInfo);
dcb.XoffChar = XOFFCHAR(COMInfo);
dcb.XonLim = XONLIMIT(COMInfo);
dcb.XoffLim = XOFFLIMIT(COMInfo);
//
// DCB settings not in the user's control
//
dcb.fParity = TRUE;
//
// set new state
//
if (!SetCommState(COMDEV(COMInfo), &dcb))
{
ddebug("SetCommState");
//ShowLastError("SetCommState");
}
//
// set new timeouts
//
if (!SetCommTimeouts(COMDEV(COMInfo), &(TIMEOUTSNEW(COMInfo))))
ddebug("SetCommTimeouts");
return TRUE;
}