📄 com.cpp
字号:
#include "stdafx.h"
#include "stdio.h"
HANDLE hHandle = INVALID_HANDLE_VALUE;
BOOL ClosePort()
{
if (CloseHandle(hHandle)) {
hHandle = INVALID_HANDLE_VALUE;
return TRUE;
}
return FALSE;
}
// 0 -- SetupPort Failed >0 Successed
BOOL SetupPort(LPCTSTR lpszPortName, int nTimeOut)
{
if(hHandle != INVALID_HANDLE_VALUE)
{
ClosePort();
Sleep(2000);
}
DCB dcb;
COMMTIMEOUTS commtimeouts;
hHandle = CreateFile(lpszPortName,
GENERIC_READ | GENERIC_WRITE,
0, // comm devices must be opened w/exclusive-access
NULL, // no security attrs
OPEN_EXISTING, // comm devices must use OPEN_EXISTING
0, // overlapped I/O
NULL // hTemplate must be NULL for comm devices
);
if ((HANDLE)hHandle == INVALID_HANDLE_VALUE)
return FALSE;
//fills in a device-control block with the current control settings
if (!GetCommState(hHandle, &dcb))
{
CloseHandle(hHandle);
return FALSE; //error
}
//fills in a device-control block
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
if (!SetCommState(hHandle, &dcb))
{
CloseHandle(hHandle);
return FALSE;
}
if(!GetCommTimeouts(hHandle, &commtimeouts))
{
CloseHandle(hHandle);
return FALSE;
}
commtimeouts.ReadIntervalTimeout = MAXDWORD;
commtimeouts.ReadTotalTimeoutMultiplier = MAXDWORD;
commtimeouts.ReadTotalTimeoutConstant = nTimeOut * 1000;
if(!SetCommTimeouts(hHandle, &commtimeouts))
{
CloseHandle(hHandle);
return FALSE;
}
return TRUE;
}
BOOL WritePortLen(LPSTR szData, int nDataLen)
{
DWORD dwByteWriteRead = 0;
return WriteFile(hHandle, szData, nDataLen, &dwByteWriteRead,NULL);
}
BOOL WritePort(LPSTR szData)
{
DWORD dwByteWriteRead = 0;
return WriteFile(hHandle, szData, strlen(szData), &dwByteWriteRead,NULL);
}
char ReadC()
{
DWORD dwRead = 0;
char ch = 0;
if(ReadFile(hHandle, &ch, sizeof(char), &dwRead, NULL))
return ch;
else
return 0;
}
int ReadPort(LPSTR szData, char StopChar, LPDWORD dwLen)
{
char data[300];
char ch = 0;
int count = 0;
memset(data, 0, 300);
while(ch = ReadC())
{
count++;
if(ch == StopChar)
{
// data[count-1] = ch;
strncpy(szData, data, count);
*dwLen = count-1;
return 0;
}
else
data[count-1] = ch;
}
return -1;
}
int ReadPort(LPSTR szData, int nDataLen)
{
char data[300];
char ch = 0;
int count = 0;
memset(data, 0, 300);
while(ch = ReadC())
{
count++;
if(count == nDataLen)
{
data[count-1] = ch;
strncpy(szData, data, count);
return 0;
}
else
data[count-1] = ch;
}
return -1;
}
int SetTimeOut(int nTimeOut)
{
COMMTIMEOUTS commtimeouts;
if(!GetCommTimeouts(hHandle, &commtimeouts))
{
// CloseHandle((HANDLE)handle);
return -1;
}
commtimeouts.ReadIntervalTimeout = MAXDWORD;
commtimeouts.ReadTotalTimeoutMultiplier = MAXDWORD;
commtimeouts.ReadTotalTimeoutConstant = nTimeOut*1000;
if(!SetCommTimeouts(hHandle, &commtimeouts))
{
// CloseHandle((HANDLE)handle);
return -1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -