일반적인 시리얼포트 제어 방법은..
1. 포트를 생성하고..
HANDLE hPort = CreateFile (lpszPortName,
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
2. 포트를 설정하고..
DCB PortDCB;
PortDCB.DCBlength = sizeof (DCB);
GetCommState (hPort, &PortDCB);
PortDCB.BaudRate = 9600;
PortDCB.fBinary = TRUE;
PortDCB.fParity = TRUE;
PortDCB.fOutxCtsFlow = FALSE;
PortDCB.fOutxDsrFlow = FALSE;
PortDCB.fDtrControl = DTR_CONTROL_ENABLE;
PortDCB.fDsrSensitivity = FALSE;
PortDCB.fTXContinueOnXoff = TRUE;
PortDCB.fOutX = FALSE;
PortDCB.fInX = FALSE;
PortDCB.fErrorChar = FALSE;
PortDCB.fNull = FALSE;
PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
PortDCB.fAbortOnError = FALSE;
PortDCB.ByteSize = 8;
PortDCB.Parity = NOPARITY;
PortDCB.StopBits = ONESTOPBIT;
if (!SetCommState (hPort, &PortDCB))
{
dwError = GetLastError ();
MessageBox (hMainWnd, TEXT("Unable to configure the serial port"),
TEXT("Error"), MB_OK);
return FALSE;
}
3. 타임아웃 설정하고..
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts (hPort, &CommTimeouts);
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 0;
CommTimeouts.ReadTotalTimeoutConstant = 0;
CommTimeouts.WriteTotalTimeoutMultiplier = 10;
CommTimeouts.WriteTotalTimeoutConstant = 1000;
if (!SetCommTimeouts (hPort, &CommTimeouts))
{
// Could not set the timeout parameters.
MessageBox (hMainWnd, TEXT("Unable to set the timeout parameters"),
TEXT("Error"), MB_OK);
dwError = GetLastError ();
return FALSE;
}
4. 포트에 제어 문자 출력
DWORD dwError,
dwNumBytesWritten;
WriteFile (hPort, &Byte, 1, &dwNumBytesWritten, NULL );
5. 포트 닫으면 끝
CloseHandle(hPort);