You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.2 KiB
121 lines
3.2 KiB
#include <stdio.h>
|
|
#include <conio.h>
|
|
#include <process.h>
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
|
|
#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);
|
|
}
|
|
|
|
|