浏览代码

change driver_can_vci. for windows mingw use vci can.

yuchuli 4 年之前
父节点
当前提交
7ad0d1cf4e
共有 2 个文件被更改,包括 209 次插入0 次删除
  1. 81 0
      src/driver/driver_can_vci/mingw_controlcan.cpp
  2. 128 0
      src/driver/driver_can_vci/mingw_controlcan.h

+ 81 - 0
src/driver/driver_can_vci/mingw_controlcan.cpp

@@ -0,0 +1,81 @@
+
+#ifdef IV_WIN
+
+
+#include <QLibrary>
+#include "mingw_controlcan.h"
+/*
+EXTERNC DWORD (*pVCI_OpenDevice)(DWORD DeviceType,DWORD DeviceInd,DWORD Reserved);
+EXTERNC DWORD (*pVCI_CloseDevice)(DWORD DeviceType,DWORD DeviceInd);
+EXTERNC DWORD (*pVCI_InitCAN)(DWORD DeviceType, DWORD DeviceInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig);
+
+EXTERNC DWORD (*pVCI_ReadBoardInfo)(DWORD DeviceType,DWORD DeviceInd,PVCI_BOARD_INFO pInfo);
+
+EXTERNC DWORD (*pVCI_SetReference)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,PVOID pData);
+//QT中请定义:
+//EXTERNC DWORD __stdcall VCI_SetReference(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,void *pData);
+
+EXTERNC ULONG (*pVCI_GetReceiveNum)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+EXTERNC DWORD (*pVCI_ClearBuffer)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+
+EXTERNC DWORD (*pVCI_StartCAN)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+EXTERNC DWORD (*pVCI_ResetCAN)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+
+EXTERNC ULONG (*pVCI_Transmit)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pSend,ULONG Len);
+EXTERNC ULONG (*pVCI_Receive)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pReceive,ULONG Len,INT WaitTime);
+
+
+
+
+
+EXTERNC DWORD (*pVCI_UsbDeviceReset)(DWORD DevType,DWORD DevIndex,DWORD Reserved);
+EXTERNC DWORD (*VCI_FindUsbDevice2)(PVCI_BOARD_INFO pInfo);
+*/
+
+
+pVCI_OpenDevice VCI_OpenDevice;
+pVCI_CloseDevice VCI_CloseDevice;
+pVCI_InitCAN VCI_InitCAN;
+pVCI_ReadBoardInfo VCI_ReadBoardInfo;
+pVCI_SetReference VCI_SetReference;
+pVCI_GetReceiveNum VCI_GetReceiveNum;
+pVCI_ClearBuffer VCI_ClearBuffer;
+pVCI_StartCAN VCI_StartCAN;
+pVCI_ResetCAN VCI_ResetCAN;
+pVCI_Transmit VCI_Transmit;
+pVCI_Receive VCI_Receive;
+pVCI_UsbDeviceReset VCI_UsbDeviceReset;
+pVCI_FindUsbDevice2 VCI_FindUsbDevice2;
+
+void LoadVCILibrary()
+{
+    QLibrary lib("ControlCAN");
+    if(!lib.load())
+    {
+        qDebug("Load ControlCAN Fail.");
+        qDebug("error is %s",lib.errorString().toLatin1().data());
+        return;
+    }
+
+    VCI_OpenDevice = (pVCI_OpenDevice)lib.resolve("VCI_OpenDevice");
+    if(VCI_OpenDevice == 0)
+    {
+        qDebug("Load VCI Fail");
+    }
+    VCI_CloseDevice = (pVCI_CloseDevice)lib.resolve("VCI_CloseDevice");
+    VCI_InitCAN = (pVCI_InitCAN)lib.resolve("VCI_InitCAN");
+    VCI_ReadBoardInfo = (pVCI_ReadBoardInfo)lib.resolve("VCI_ReadBoardInfo");
+    VCI_SetReference = (pVCI_SetReference)lib.resolve("VCI_SetReference");
+    VCI_GetReceiveNum = (pVCI_GetReceiveNum)lib.resolve("VCI_GetReceiveNum");
+    VCI_ClearBuffer = (pVCI_ClearBuffer)lib.resolve("VCI_ClearBuffer");
+    VCI_StartCAN = (pVCI_StartCAN)lib.resolve("VCI_StartCAN");
+    VCI_ResetCAN = (pVCI_ResetCAN)lib.resolve("VCI_ResetCAN");
+    VCI_Transmit = (pVCI_Transmit)lib.resolve("VCI_Transmit");
+    VCI_Receive = (pVCI_Receive)lib.resolve("VCI_Receive");
+    VCI_UsbDeviceReset = (pVCI_UsbDeviceReset)lib.resolve("VCI_UsbDeviceReset");
+    VCI_FindUsbDevice2 = (pVCI_FindUsbDevice2)lib.resolve("VCI_FindUsbDevice2");
+
+}
+
+
+#endif

+ 128 - 0
src/driver/driver_can_vci/mingw_controlcan.h

@@ -0,0 +1,128 @@
+#ifndef MINGW_CONTROLCAN_H
+#define MINGW_CONTROLCAN_H
+
+
+#ifdef IV_WIN
+
+//接口卡类型定义
+#define VCI_USBCAN1			3
+#define VCI_USBCAN2			4
+#define VCI_USBCAN2A		4
+
+#define VCI_USBCAN_E_U 		20
+#define VCI_USBCAN_2E_U 	21
+
+//函数调用返回状态值
+#define	STATUS_OK					1
+#define STATUS_ERR					0
+
+//类型定义,如果显示重复定义,注释即可。
+//QT中需要定义
+
+typedef unsigned char       BYTE;
+typedef char				CHAR;
+typedef unsigned char		UCHAR;
+typedef int                 INT;
+typedef unsigned int        UINT;
+typedef unsigned short		USHORT;
+typedef unsigned long		ULONG;
+typedef unsigned long       DWORD;
+
+typedef  void *              PVOID;
+
+
+/*------------------------------------------------兼容ZLG的函数及数据类型------------------------------------------------*/
+//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];
+}VCI_CAN_OBJ,*PVCI_CAN_OBJ;
+
+//3.定义初始化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;
+
+
+#define EXTERNC		extern "C"
+
+typedef   DWORD (*pVCI_OpenDevice)(DWORD DeviceType,DWORD DeviceInd,DWORD Reserved);
+typedef DWORD (*pVCI_CloseDevice)(DWORD DeviceType,DWORD DeviceInd);
+typedef DWORD (*pVCI_InitCAN)(DWORD DeviceType, DWORD DeviceInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig);
+
+typedef DWORD (*pVCI_ReadBoardInfo)(DWORD DeviceType,DWORD DeviceInd,PVCI_BOARD_INFO pInfo);
+
+typedef DWORD (*pVCI_SetReference)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,PVOID pData);
+//QT中请定义:
+//EXTERNC DWORD __stdcall VCI_SetReference(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,void *pData);
+
+typedef ULONG (*pVCI_GetReceiveNum)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+typedef DWORD (*pVCI_ClearBuffer)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+
+typedef DWORD (*pVCI_StartCAN)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+typedef DWORD (*pVCI_ResetCAN)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd);
+
+typedef ULONG (*pVCI_Transmit)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pSend,ULONG Len);
+typedef ULONG (*pVCI_Receive)(DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ pReceive,ULONG Len,INT WaitTime);
+
+
+/*------------------------------------------------其他补充函数及数据结构描述------------------------------------------------*/
+
+
+
+typedef DWORD (*pVCI_UsbDeviceReset)(DWORD DevType,DWORD DevIndex,DWORD Reserved);
+typedef DWORD (*pVCI_FindUsbDevice2)(PVCI_BOARD_INFO pInfo);
+
+
+extern pVCI_OpenDevice VCI_OpenDevice;
+extern pVCI_CloseDevice VCI_CloseDevice;
+extern pVCI_InitCAN VCI_InitCAN;
+extern pVCI_ReadBoardInfo VCI_ReadBoardInfo;
+extern pVCI_SetReference VCI_SetReference;
+extern pVCI_GetReceiveNum VCI_GetReceiveNum;
+extern pVCI_ClearBuffer VCI_ClearBuffer;
+extern pVCI_StartCAN VCI_StartCAN;
+extern pVCI_ResetCAN VCI_ResetCAN;
+extern pVCI_Transmit VCI_Transmit;
+extern pVCI_Receive VCI_Receive;
+extern pVCI_UsbDeviceReset VCI_UsbDeviceReset;
+extern pVCI_FindUsbDevice2 VCI_FindUsbDevice2;
+
+void LoadVCILibrary();
+
+#endif
+
+#endif // MINGW_CONTROLCAN_H