168 lines
6.1 KiB
C#
168 lines
6.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace LFP_Manager.Function
|
|
{
|
|
// 1. The type of the ZLGCAN series interface card information.
|
|
public struct VCI_BOARD_INFO
|
|
{
|
|
public UInt16 hw_Version;
|
|
public UInt16 fw_Version;
|
|
public UInt16 dr_Version;
|
|
public UInt16 in_Version;
|
|
public UInt16 irq_Num;
|
|
public byte can_Num;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
|
|
public byte[] str_Serial_Num;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
|
|
public byte[] str_hw_Type;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
|
|
public byte[] Reserved;
|
|
}
|
|
|
|
// 2. Define the data type of the CAN message frame.
|
|
unsafe public struct VCI_CAN_OBJ //Use unsafe code
|
|
{
|
|
public uint ID;
|
|
public uint TimeStamp;
|
|
public byte TimeFlag;
|
|
public byte SendType;
|
|
public byte RemoteFlag; //Whether it is a remore frame
|
|
public byte ExternFlag; //Whether it is a extended frame
|
|
public byte DataLen;
|
|
|
|
public fixed byte Data[8];
|
|
|
|
public fixed byte Reserved[3];
|
|
}
|
|
//2. Define the data type of the CAN message frame.
|
|
//public struct VCI_CAN_OBJ
|
|
//{
|
|
// public UInt32 ID;
|
|
// public UInt32 TimeStamp;
|
|
// public byte TimeFlag;
|
|
// public byte SendType;
|
|
// public byte RemoteFlag;//Whether it is a remore frame
|
|
// public byte ExternFlag;//Whether it is a extended frame
|
|
// public byte DataLen;
|
|
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
|
|
// public byte[] Data;
|
|
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
|
|
// public byte[] Reserved;
|
|
|
|
// public void Init()
|
|
// {
|
|
// Data = new byte[8];
|
|
// Reserved = new byte[3];
|
|
// }
|
|
//}
|
|
|
|
// 3. Define the data type of the CAN controller status.
|
|
public struct VCI_CAN_STATUS
|
|
{
|
|
public byte ErrInterrupt;
|
|
public byte regMode;
|
|
public byte regStatus;
|
|
public byte regALCapture;
|
|
public byte regECCapture;
|
|
public byte regEWLimit;
|
|
public byte regRECounter;
|
|
public byte regTECounter;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
|
|
public byte[] Reserved;
|
|
}
|
|
|
|
// 4. Define the data type of the error message.
|
|
public struct VCI_ERR_INFO
|
|
{
|
|
public UInt32 ErrCode;
|
|
public byte Passive_ErrData1;
|
|
public byte Passive_ErrData2;
|
|
public byte Passive_ErrData3;
|
|
public byte ArLost_ErrData;
|
|
}
|
|
|
|
// 5. Define the data type for initializing CAN
|
|
public struct VCI_INIT_CONFIG
|
|
{
|
|
public UInt32 AccCode;
|
|
public UInt32 AccMask;
|
|
public UInt32 Reserved;
|
|
public byte Filter;
|
|
public byte Timing0;
|
|
public byte Timing1;
|
|
public byte Mode;
|
|
}
|
|
|
|
public struct CHGDESIPANDPORT
|
|
{
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
|
|
public byte[] szpwd;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
|
|
public byte[] szdesip;
|
|
public Int32 desport;
|
|
|
|
public void Init()
|
|
{
|
|
szpwd = new byte[10];
|
|
szdesip = new byte[20];
|
|
}
|
|
}
|
|
|
|
///////// new add struct for filter /////////
|
|
//typedef struct _VCI_FILTER_RECORD{
|
|
// DWORD ExtFrame; //Whether it is an extended frame
|
|
// DWORD Start;
|
|
// DWORD End;
|
|
//}VCI_FILTER_RECORD,*PVCI_FILTER_RECORD;
|
|
public struct VCI_FILTER_RECORD
|
|
{
|
|
public UInt32 ExtFrame;
|
|
public UInt32 Start;
|
|
public UInt32 End;
|
|
}
|
|
|
|
class csExtCANControlFunction
|
|
{
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_OpenDevice(UInt32 DeviceType, UInt32 DeviceInd, UInt32 Reserved);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_CloseDevice(UInt32 DeviceType, UInt32 DeviceInd);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_InitCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_INIT_CONFIG pInitConfig);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_ReadBoardInfo(UInt32 DeviceType, UInt32 DeviceInd, ref VCI_BOARD_INFO pInfo);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_ReadErrInfo(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_ERR_INFO pErrInfo);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_ReadCANStatus(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_CAN_STATUS pCANStatus);
|
|
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_GetReference(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, UInt32 RefType, ref byte pData);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_SetReference(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, UInt32 RefType, ref byte pData);
|
|
//unsafe static extern UInt32 VCI_SetReference(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, UInt32 RefType, byte* pData);
|
|
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_GetReceiveNum(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_ClearBuffer(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd);
|
|
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_StartCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd);
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_ResetCAN(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd);
|
|
|
|
[DllImport("controlcan.dll")]
|
|
static extern UInt32 VCI_Transmit(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_CAN_OBJ pSend, UInt32 Len);
|
|
|
|
//[DllImport("controlcan.dll")]
|
|
//static extern UInt32 VCI_Receive(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, ref VCI_CAN_OBJ pReceive, UInt32 Len, Int32 WaitTime);
|
|
[DllImport("controlcan.dll", CharSet = CharSet.Ansi)]
|
|
static extern UInt32 VCI_Receive(UInt32 DeviceType, UInt32 DeviceInd, UInt32 CANInd, IntPtr pReceive, UInt32 Len, Int32 WaitTime);
|
|
}
|
|
}
|