HONGRI_uds_tools/CAN_Tool/CanDevice/GCCAN/GC_ECANBasic.cs
liudagui beceab4798 第一次提交:
支持广成CAN,PCAN,同星(要用低版本的TSMaster),TOOMOSS(没有测试过)
2024-11-06 16:52:30 +08:00

181 lines
4.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace GC_ECan.Basic
{
[Flags]
public enum ECANStatus : uint
{
/// <summary>
/// error
/// </summary>
STATUS_ERR = 0x00000,
/// <summary>
/// No error
/// </summary>
STATUS_OK = 0x00001,
}
[StructLayout(LayoutKind.Sequential)]
public struct CAN_OBJ
{
public uint ID;
public uint TimeStamp;
public byte TimeFlag;
public byte SendType;
public byte RemoteFlag;
public byte ExternFlag;
public byte DataLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] data;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] Reserved;
}
public struct CAN_ERR_INFO
{
public uint ErrCode;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] Passive_ErrData;
public byte ArLost_ErrData;
}
/*
public struct CAN_OBJ
{
public uint ID;
public uint TimeStamp;
public byte TimeFlag;
public byte RemoteFlag;
public byte ExternFlag;
public byte DataLen;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] data;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] Reserved;
}
*/
public struct INIT_CONFIG
{
public uint AccCode;
public uint AccMask;
public uint Reserved;
public byte Filter;
public byte Timing0;
public byte Timing1;
public byte Mode;
}
public struct BOARD_INFO
{
public ushort hw_Version;
public ushort fw_Version;
public ushort dr_Version;
public ushort in_Version;
public ushort 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 = 4)]
public ushort[] Reserved;
}
public static class ECANDLL
{
[DllImport("ECANVCI.dll", EntryPoint = "OpenDevice")]
public static extern ECANStatus OpenDevice(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 Reserved);
[DllImport("ECANVCI.dll", EntryPoint = "CloseDevice")]
public static extern ECANStatus CloseDevice(
UInt32 DeviceType,
UInt32 DeviceInd);
[DllImport("ECANVCI.dll", EntryPoint = "InitCAN")]
public static extern ECANStatus InitCAN(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 CANInd,
ref INIT_CONFIG InitConfig);
[DllImport("ECANVCI.dll", EntryPoint = "StartCAN")]
public static extern ECANStatus StartCAN(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 CANInd);
[DllImport("ECANVCI.dll", EntryPoint = "ResetCAN")]
public static extern ECANStatus ResetCAN(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 CANInd);
[DllImport("ECANVCI.dll", EntryPoint = "Transmit")]
public static extern ECANStatus Transmit(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 CANInd,
ref CAN_OBJ Send,
UInt16 length);
[DllImport("ECANVCI.dll", EntryPoint = "Receive")]
public static extern ECANStatus Receive(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 CANInd,
out CAN_OBJ Receive,
UInt32 length,
UInt32 WaitTime);
[DllImport("ECANVCI.dll", EntryPoint = "ReadErrInfo")]
public static extern ECANStatus ReadErrInfo(
UInt32 DeviceType,
UInt32 DeviceInd,
UInt32 CANInd,
out CAN_ERR_INFO ReadErrInfo);
[DllImport("ECANVCI.dll", EntryPoint = "ReadBoardInfo")]
public static extern ECANStatus ReadBoardInfo(
UInt32 DeviceType,
UInt32 DeviceInd,
out BOARD_INFO ReadErrInfo);
}
}