-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathControlCAN.h
262 lines (234 loc) · 8.79 KB
/
ControlCAN.h
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
#ifndef CONTROLCAN_H
#define CONTROLCAN_H
//接口卡类型定义
#define VCI_PCI5121 1
#define VCI_PCI9810 2
#define VCI_USBCAN1 3
#define VCI_USBCAN2 4
#define VCI_USBCAN2A 4
#define VCI_PCI9820 5
#define VCI_CAN232 6
#define VCI_PCI5110 7
#define VCI_CANLITE 8
#define VCI_ISA9620 9
#define VCI_ISA5420 10
#define VCI_PC104CAN 11
#define VCI_CANETUDP 12
#define VCI_CANETE 12
#define VCI_DNP9810 13
#define VCI_PCI9840 14
#define VCI_PC104CAN2 15
#define VCI_PCI9820I 16
#define VCI_CANETTCP 17
#define VCI_PEC9920 18
#define VCI_PCIE_9220 18
#define VCI_PCI5010U 19
#define VCI_USBCAN_E_U 20
#define VCI_USBCAN_2E_U 21
#define VCI_PCI5020U 22
#define VCI_EG20T_CAN 23
#define VCI_PCIE9221 24
#define VCI_WIFICAN_TCP 25
#define VCI_WIFICAN_UDP 26
#define VCI_PCIe9120 27
#define VCI_PCIe9110 28
#define VCI_PCIe9140 29
#define VCI_USBCAN_4E_U 31
#define VCI_CANDTU_200UR 32
#define VCI_CANDTU_MINI 33
#define VCI_USBCAN_8E_U 34
#define VCI_CANREPLAY 35
#define VCI_CANDTU_NET 36
#define VCI_CANDTU_100UR 37
//CAN错误码
#define ERR_CAN_OVERFLOW 0x0001 //CAN控制器内部FIFO溢出
#define ERR_CAN_ERRALARM 0x0002 //CAN控制器错误报警
#define ERR_CAN_PASSIVE 0x0004 //CAN控制器消极错误
#define ERR_CAN_LOSE 0x0008 //CAN控制器仲裁丢失
#define ERR_CAN_BUSERR 0x0010 //CAN控制器总线错误
#define ERR_CAN_BUSOFF 0x0020 //总线关闭错误
#define ERR_CAN_BUFFER_OVERFLOW 0x0040 //CAN控制器内部BUFFER溢出
//通用错误码
#define ERR_DEVICEOPENED 0x0100 //设备已经打开
#define ERR_DEVICEOPEN 0x0200 //打开设备错误
#define ERR_DEVICENOTOPEN 0x0400 //设备没有打开
#define ERR_BUFFEROVERFLOW 0x0800 //缓冲区溢出
#define ERR_DEVICENOTEXIST 0x1000 //此设备不存在
#define ERR_LOADKERNELDLL 0x2000 //装载动态库失败
#define ERR_CMDFAILED 0x4000 //执行命令失败错误码
#define ERR_BUFFERCREATE 0x8000 //内存不足
//CANET错误码
#define ERR_CANETE_PORTOPENED 0x00010000 //端口已经被打开
#define ERR_CANETE_INDEXUSED 0x00020000 //设备索引号已经被占用
#define ERR_REF_TYPE_ID 0x00030000 //SetReference或GetReference传递的RefType不存在
#define ERR_CREATE_SOCKET 0x00030002 //创建Socket失败
#define ERR_OPEN_CONNECT 0x00030003 //打开Socket的连接时失败,可能设备连接已经存在
#define ERR_NO_STARTUP 0x00030004 //设备没启动
#define ERR_NO_CONNECTED 0x00030005 //设备无连接
#define ERR_SEND_PARTIAL 0x00030006 //只发送了部分的CAN帧
#define ERR_SEND_TOO_FAST 0x00030007 //数据发得太快,Socket缓冲区满了
//函数调用返回状态值
#define STATUS_OK 1
#define STATUS_ERR 0
#define CMD_DESIP 0
#define CMD_DESPORT 1
#define CMD_CHGDESIPANDPORT 2
#define CMD_SRCPORT 2
#define CMD_TCP_TYPE 4 //tcp 工作方式,服务器:1 或是客户端:0
#define TCP_CLIENT 0
#define TCP_SERVER 1
//服务器方式下有效
#define CMD_CLIENT_COUNT 5 //连接上的客户端计数
#define CMD_CLIENT 6 //连接上的客户端
#define CMD_DISCONN_CLINET 7 //断开一个连接
#define CMD_SET_RECONNECT_TIME 8 //使能自动重连
//CANDTU_NET支持GPS
#define CMD_GET_GPS 9
#define CMD_GET_GPS_NUM 10 //获取GPS信息的数目
typedef unsigned long DWORD, ULONG;
typedef int INT;
typedef void* HANDLE;
typedef unsigned char BYTE;
typedef unsigned short USHORT;
typedef char CHAR;
typedef unsigned int UINT;
typedef unsigned char UCHAR;
typedef unsigned short UINT16;
typedef void* PVOID;
typedef struct tagRemoteClient{
int iIndex;
DWORD port;
HANDLE hClient;
char szip[32];
}REMOTE_CLIENT;
typedef struct _tagChgDesIPAndPort
{
char szpwd[10];
char szdesip[20];
int desport;
BYTE blistenonly;
}CHGDESIPANDPORT;
//1.ZLGCAN系列接口卡信息的数据类型。
typedef struct _VCI_BOARD_INFO{
USHORT hw_Version;
USHORT fw_Version;
USHORT dr_Version;
USHORT in_Version;
USHORT irq_Num;
BYTE can_Num;
CHAR str_Serial_Num[20];
CHAR str_hw_Type[40];
USHORT Reserved[4];
} VCI_BOARD_INFO,*PVCI_BOARD_INFO;
//2.定义CAN信息帧的数据类型。
typedef struct _VCI_CAN_OBJ{
UINT ID;
UINT TimeStamp;
BYTE TimeFlag;
BYTE SendType;
BYTE RemoteFlag;//是否是远程帧
BYTE ExternFlag;//是否是扩展帧
BYTE DataLen;
BYTE Data[8];
BYTE Reserved[3]; //Reserved[0] 第0位表示特殊的空行或者高亮帧
}VCI_CAN_OBJ,*PVCI_CAN_OBJ;
//3.定义CAN控制器状态的数据类型。
typedef struct _VCI_CAN_STATUS{
UCHAR ErrInterrupt;
UCHAR regMode;
UCHAR regStatus;
UCHAR regALCapture;
UCHAR regECCapture;
UCHAR regEWLimit;
UCHAR regRECounter;
UCHAR regTECounter;
DWORD Reserved;
}VCI_CAN_STATUS,*PVCI_CAN_STATUS;
//4.定义错误信息的数据类型。
typedef struct _VCI_ERR_INFO{
UINT ErrCode;
BYTE Passive_ErrData[3];
BYTE ArLost_ErrData;
} VCI_ERR_INFO,*PVCI_ERR_INFO;
//5.定义初始化CAN的数据类型
typedef struct _VCI_INIT_CONFIG{
DWORD AccCode;
DWORD AccMask;
DWORD Reserved;
UCHAR Filter;
UCHAR Timing0;
UCHAR Timing1;
UCHAR Mode;
}VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;
///////// new add struct for filter /////////
typedef struct _VCI_FILTER_RECORD{
DWORD ExtFrame; //是否为扩展帧
DWORD Start;
DWORD End;
}VCI_FILTER_RECORD,*PVCI_FILTER_RECORD;
//定时自动发送帧结构
typedef struct _VCI_AUTO_SEND_OBJ{
BYTE Enable; //使能本条报文 0:禁能 1:使能
BYTE Index; //报文编号 最大支持32条报文
DWORD Interval; //定时发送时间 1ms为单位
VCI_CAN_OBJ obj; //报文
}VCI_AUTO_SEND_OBJ,*PVCI_AUTO_SEND_OBJ;
//设置指示灯状态结构
typedef struct _VCI_INDICATE_LIGHT{
BYTE Indicate; //指示灯编号
BYTE AttribRedMode:2; //Red LED灭/亮/闪烁/自控
BYTE AttribGreenMode:2; //Green LED灭/亮/闪烁/自控
BYTE AttribReserved:4; //保留暂时不用
BYTE FrequenceRed:2; //Red LED闪烁频率
BYTE FrequenceGreen:2; //Green LED闪烁频率
BYTE FrequenceReserved:4; //保留暂时不用
} VCI_INDICATE_LIGHT,*PVCI_INDICATE_LIGHT;
//设置转发结构
typedef struct _VCI_CAN_OBJ_REDIRECT{
BYTE Action; //标识开启或停止转发
BYTE DestCanIndex; //CAN目标通道
} VCI_CAN_OBJ_REDIRECT,*PVCI_CAN_OBJ_REDIRECT;
typedef struct _CANDTUTIME {
UINT16 wYear;
UINT16 wMonth;
UINT16 wDay;
UINT16 wHour;
UINT16 wMinute;
UINT16 wSecond;
} CANDTUTIME;
//GPS数据结构
typedef struct _tagCANDTUGPSData
{
float fLatitude; //纬度
float fLongitude; //经度
float fSpeed; //速度
CANDTUTIME candtuTime;
}CANDTUGPSData, *PCANDTUGPSData;
//获取GPS结构
typedef struct _VCI_CANDTU_GPS_DATA
{
PCANDTUGPSData pGPSData; //用户提供接收GPS数据的缓冲区地址
ULONG nGPSDataCnt; //可以容纳的GPS数据个数
}VCI_CANDTU_GPS_DATA, *PVCI_CANDTU_GPS_DATA;
#ifdef __cplusplus
#define EXTERNC extern "C"
#define DEF(a) = a
#else
#define EXTERNC
#define DEF(a)
#endif
EXTERNC DWORD __stdcall VCI_OpenDevice(DWORD DeviceType,DWORD DeviceInd,DWORD Reserved);
EXTERNC DWORD __stdcall VCI_CloseDevice(DWORD DeviceType,DWORD DeviceInd);
EXTERNC DWORD __stdcall VCI_InitCAN(DWORD DeviceType, DWORD DeviceInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig);
EXTERNC DWORD __stdcall VCI_ReadBoardInfo(DWORD DeviceType,DWORD DeviceInd,PVCI_BOARD_INFO pInfo);
EXTERNC DWORD __stdcall VCI_ReadErrInfo(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_ERR_INFO pErrInfo);
EXTERNC DWORD __stdcall VCI_ReadCANStatus(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_STATUS pCANStatus);
EXTERNC DWORD __stdcall VCI_GetReference(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,PVOID pData);
EXTERNC DWORD __stdcall VCI_SetReference(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,PVOID pData);
EXTERNC ULONG __stdcall VCI_GetReceiveNum(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
EXTERNC DWORD __stdcall VCI_ClearBuffer(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
EXTERNC DWORD __stdcall VCI_StartCAN(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
EXTERNC DWORD __stdcall VCI_ResetCAN(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
EXTERNC ULONG __stdcall VCI_Transmit(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pSend,ULONG Len);
EXTERNC ULONG __stdcall VCI_Receive(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pReceive,ULONG Len,INT WaitTime DEF(-1));
#endif