опубликован 23-01-2002 01:19 MSK
port->hComm = CreateFile( LPCTSTR(port->Name),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_WRITE_THROUGH,
0); if (port->hComm == INVALID_HANDLE_VALUE)
{
TRACE("Error open port\n");
MessageBox("Can not open port",NULL,MB_ICONERROR | MB_OK);
return FALSE;
}
port->bActived = TRUE;
//
// Save original comm timeouts and set new ones
//
//
port->timeoutsnew.ReadIntervalTimeout = 1;
port->timeoutsnew.ReadTotalTimeoutMultiplier = 1;
port->timeoutsnew.ReadTotalTimeoutConstant = 0;
port->timeoutsnew.WriteTotalTimeoutMultiplier = 0;
port->timeoutsnew.WriteTotalTimeoutConstant = 0;
if (!GetCommTimeouts( port->hComm, &port->timeoutsorig))
TRACE("GetCommTimeOuts\n");
DCB dcb = {0};
dcb.DCBlength = sizeof(dcb);
//
// get current DCB settings
//
if (!GetCommState( port->hComm , &dcb))
TRACE("GetCommState\n");
//
// update DCB rate, byte size, parity, and stop bits size
//
dcb.BaudRate = port->dwBaudRate;
dcb.ByteSize = port->ByteSize; //8;
dcb.Parity = port->Parity; //ODDPARITY;
dcb.StopBits = port->StopBits; //TWOSTOPBITS;
//
// update event flags
//
dcb.EvtChar = '\0';
//
// update flow control settings
//
// dcb.fDtrControl = DTRCONTROL(TTYInfo);
// dcb.fRtsControl = RTSCONTROL(TTYInfo);
// dcb.fOutxCtsFlow = CTSOUTFLOW(TTYInfo);
// dcb.fOutxDsrFlow = DSROUTFLOW(TTYInfo);
// dcb.fDsrSensitivity = DSRINFLOW(TTYInfo);
// dcb.fOutX = XONXOFFOUTFLOW(TTYInfo);
// dcb.fInX = XONXOFFINFLOW(TTYInfo);
// dcb.fTXContinueOnXoff = TXAFTERXOFFSENT(TTYInfo);
// dcb.XonChar = XONCHAR(TTYInfo);
// dcb.XoffChar = XOFFCHAR(TTYInfo);
// dcb.XonLim = XONLIMIT(TTYInfo);
// dcb.XoffLim = XOFFLIMIT(TTYInfo);
//
// DCB settings not in the user's control
//
dcb.fParity = FALSE;
//
// set new state
//
if (!SetCommState(port->hComm, &dcb))
TRACE("SetCommState");
//
// set new timeouts
//
if (!SetCommTimeouts(port->hComm, &port->timeoutsnew))
TRACE("SetCommTimeOuts\n");
//
// set comm buffer sizes
//
SetupComm(port->hComm, 0x8000, 0x8000);