Repository navigation
Expand file tree
/
Copy pathcontrol.h
More file actions
181 lines (150 loc) · 3.96 KB
/
Copy pathcontrol.h
File metadata and controls
181 lines (150 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <Windows.h>
class comPort
{
public:
int TimeOuts; //超时 500ms
LPCSTR comportNum;
HANDLE H_comport;
char* sendbuff;
char* recvbuff;
comPort(LPCSTR comm,int b)
{
comportNum = comm;
H_comport = OpenCom(comportNum,b);
sendbuff = "";
recvbuff = "";
}
~comPort()
{
CloseCom(H_comport);
}
//////////////////////////////////////////////////////////////////////////
// 功 能: 关闭 COM Port;//
// 返回值:= 0: 关闭成功//
// = 其它值: 关闭失败//
//////////////////////////////////////////////////////////////////////////
int CloseCom(HANDLE ComID)
{
if(ComID > 0)
if(CloseHandle(ComID))
return 0;
return -1;
}
//////////////////////////////////////////////////////////////////////////
// 功 能: 初始化 COM Port//
// 参 数: ComPort -- 串口号//
// BaudRate -- 波特率//
// 返回值:>0 : 打开成功,返回串口的设备句柄//
// = 其它值: 打开失败//
//////////////////////////////////////////////////////////////////////////
//HANDLE OpenCom(const char *ComPort,int BaudRate)
HANDLE OpenCom(LPCSTR comm,int BaudRate)
{
_DCB FDCB;
HANDLE ComID = NULL;
ComID = CreateFileA(comm,
GENERIC_READ | GENERIC_WRITE, // 可读 可写
NULL, // 独占方式
NULL,
OPEN_EXISTING,
NULL,
NULL);
if(ComID == INVALID_HANDLE_VALUE)
return 0;
if(!GetCommState(ComID,&FDCB))
return 0;
TimeOuts = 500;
FDCB.BaudRate = BaudRate;
FDCB.ByteSize = 8; // 8 Bits 数据
FDCB.StopBits = ONESTOPBIT; // 一位停止位
FDCB.Parity = 0; //缺省无校验
if(!SetCommState(ComID,&FDCB))
return 0;
if(!SetupComm(ComID,500,500))
return 0;
return ComID;
}
//////////////////////////////////////////////////////////////////////////
// 功 能: 设置超时//
// 参 数: TimeOut -- 超时时间(单位:毫秒)//
//////////////////////////////////////////////////////////////////////////
int SetTimeOuts(int TimeOut)
{
TimeOuts = TimeOut;
return TimeOut;
}
//////////////////////////////////////////////////////////////////////////
// 功 能: 设置校验方式//
// 参 数: Parity -- 校验方式//
// =0 无校验(no)//
// =1 奇校验(odd)//
// =2 偶校验(even)//
// =3 标记校验(mark)//
// =4 空格校验(space)//
// 返回值:=0 : 成功//
// =其它值: 失败//
//////////////////////////////////////////////////////////////////////////
int SetParity(HANDLE ComID,int Parity)
{
DCB FDCB;
if(!GetCommState(ComID,&FDCB))
return -1;
FDCB.Parity = Parity; //校验方式
if(!SetCommState(ComID,&FDCB))
return -1;
return 0;
}
//////////////////////////////////////////////////////////////////////////
// 功 能: 从串口读所有字节流//
// 参 数: 无//
// 返回值:> 0: 读取数据大小//
// = -1: 失败//
//////////////////////////////////////////////////////////////////////////
int ReadFromCom(DWORD ReadSize)
{
DWORD TempSize;
DWORD EndTime,ErrorFlag;
COMSTAT cs;
BOOL bResult;
EndTime = GetTickCount() + TimeOuts;
while(GetTickCount() <= EndTime)
{
bResult = ClearCommError(H_comport,&ErrorFlag,&cs);
if(!bResult)
return 0;
if(cs.cbInQue < ReadSize)//如果串口数据小于ReadSize
{
bResult = ReadFile(H_comport,recvbuff,cs.cbInQue,&TempSize,NULL) ;
if(!bResult)
return 0;
}
else
{
bResult = ReadFile(H_comport,recvbuff,ReadSize,&TempSize,NULL);
if(!bResult)
return 0;
}
if(TempSize > 0)
return TempSize;
}
return -1;
}
//////////////////////////////////////////////////////////////////////////
// 功 能: 向串口发送字节流.//
// 参 数: 无//
// 返回值:= 0: 成功//
// = -1: 失败//
//////////////////////////////////////////////////////////////////////////
BOOL SendToCom(DWORD SendSize)
{
DWORD Status;
BOOL bResult;
bResult = PurgeComm(H_comport,PURGE_TXCLEAR | PURGE_RXCLEAR); // 清除接收队列和发送队列
if(!bResult)
return 0;
bResult = WriteFile(H_comport,sendbuff,SendSize,&Status,0);
if(!bResult)
return 0;
return -1;
}
};