#include #include #include #include #include #define PERR(bSuccess, api) {if (!(bSuccess)) printf("%s: Error %d from %s \ on line %d\n", __FILE__, GetLastError(), api, __LINE__);} char cr = '\r'; char lf = '\n'; char ctrlC = 3; int addLf = 0; HANDLE hfSerialPort; void readPort() { DWORD cbBytesRead; char inBuf[256]; int i; BOOL bSuccess; SYSTEMTIME sysTimeStart; SYSTEMTIME sysTimeEnd; while (1) { GetSystemTime(&sysTimeStart); bSuccess = ReadFile(hfSerialPort, inBuf, sizeof(inBuf), &cbBytesRead, NULL); GetSystemTime(&sysTimeEnd); printf("StartingTime: Yr: %d Mn: %d DayofWeek: %d Day: %d Hr: %d Min: %d Sec: %d Milli: %d\n", sysTimeStart.wYear, sysTimeStart.wMonth, sysTimeStart.wDayOfWeek, sysTimeStart.wDay, sysTimeStart.wHour, sysTimeStart.wMinute, sysTimeStart.wSecond, sysTimeStart.wMilliseconds ); printf("EndingTime: Yr: %d Mn: %d DayofWeek: %d Day: %d Hr: %d Min: %d Sec: %d Milli: %d\n", sysTimeEnd.wYear, sysTimeEnd.wMonth, sysTimeEnd.wDayOfWeek, sysTimeEnd.wDay, sysTimeEnd.wHour, sysTimeEnd.wMinute, sysTimeEnd.wSecond, sysTimeEnd.wMilliseconds ); PERR(bSuccess, "ReadFile"); if (bSuccess && (cbBytesRead == 0)) puts("total timeout"); else if (cbBytesRead < sizeof(inBuf)) printf("\ainterval timeout, "); else printf("buffer full, "); printf("bytes read: %d\n", cbBytesRead); for (i = 0; i < (int) cbBytesRead; i++) { switch(inBuf[i]) { case '\r': if (addLf) putchar(lf); putchar(inBuf[i]); break; default: putchar(inBuf[i]); break; } } } return; } int __cdecl main(int argc,char *argv[]) { char szTemp[512]; BOOL bSuccess; COMMTIMEOUTS ctmo; DCB dcb; hfSerialPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); PERR(hfSerialPort != INVALID_HANDLE_VALUE, "CreateFile"); bSuccess = GetCommState(hfSerialPort, &dcb); PERR(bSuccess, "GetCommState"); dcb.BaudRate = 9600; dcb.fBinary = 1; dcb.fParity = 0; dcb.fOutxCtsFlow = 0; dcb.fOutxDsrFlow = 0; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fDsrSensitivity = 0; dcb.fTXContinueOnXoff = 0; dcb.fOutX = 1; dcb.fInX = 1; dcb.fErrorChar = 0; dcb.fNull = 1; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fAbortOnError = 0; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; bSuccess = SetCommState(hfSerialPort, &dcb); PERR(bSuccess, "SetCommState"); ctmo.ReadIntervalTimeout = 1000; ctmo.ReadTotalTimeoutMultiplier = 0; ctmo.ReadTotalTimeoutConstant = 30000; ctmo.WriteTotalTimeoutMultiplier = 0; ctmo.WriteTotalTimeoutConstant = 0; bSuccess = SetCommTimeouts(hfSerialPort, &ctmo); PERR(bSuccess, "SetCommTimeouts"); readPort(); return(0); }