using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace USB2XXX { class USB2LIN { //定义函数返回错误代码 public const Int32 LIN_SUCCESS = (0); //函数执行成功 public const Int32 LIN_ERR_NOT_SUPPORT = (-1); //适配器不支持该函数 public const Int32 LIN_ERR_USB_WRITE_FAIL = (-2); //USB写数据失败 public const Int32 LIN_ERR_USB_READ_FAIL = (-3); //USB读数据失败 public const Int32 LIN_ERR_CMD_FAIL = (-4); //命令执行失败 public const Int32 LIN_ERR_CH_NO_INIT = (-5); //该通道未初始化 public const Int32 LIN_ERR_READ_DATA = (-6); //LIN读数据失败 //LIN和校验模式 public const Byte LIN_CHECK_MODE_STD = 0; public const Byte LIN_CHECK_MODE_EXT = 1; public const Byte LIN_CHECK_MODE_NONE = 2; //BREAK位数定义 public const Byte LIN_BREAK_BITS_10 = 0x00; public const Byte LIN_BREAK_BITS_11 = 0x20; //定义主从模式 public const Byte LIN_MASTER = 1; public const Byte LIN_SLAVE = 0; //定义从机操作模式 public const Byte LIN_SLAVE_WRITE = 0; public const Byte LIN_SLAVE_READ = 1; //定义初始化LIN的数据类型 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct LIN_CONFIG { public UInt32 BaudRate; //波特率,最大20K public Byte CheckMode; //校验模式,0-标准校验模式,1-增强校验模式(包含PID) public Byte MasterMode; //主从模式,0-从模式,1-主模式 public Byte BreakBits; //Break长度,0x00-10bit,0x20-11bit } //LIN数据收发帧格式定义 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct LIN_MSG { [MarshalAs(UnmanagedType.U1)] public Byte ID; //ID,取值范围0~0x3F [MarshalAs(UnmanagedType.U1)] public Byte DataLen; //发送数据时,代表发送数据的长度,不含校验数据,接收数据时,数据的长度,包含校验数据 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 9, ArraySubType = UnmanagedType.I1)] public Byte[] Data; //数据存储区 } //USB2LIN相关函数定义 [DllImport("USB2XXX.dll")] public static extern Int32 LIN_Init(Int32 DevHandle,Byte LINIndex,ref LIN_CONFIG pConfig); [DllImport("USB2XXX.dll")] public static extern Int32 LIN_Write(Int32 DevHandle,Byte LINIndex,LIN_MSG[] pLINMsg,Int32 Len); [DllImport("USB2XXX.dll")] public static extern Int32 LIN_Read(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg, Int32 Len); [DllImport("USB2XXX.dll")] public static extern Int32 LIN_SlaveSetIDMode(Int32 DevHandle,Byte LINIndex,Byte IDMode,LIN_MSG[] pLINMsg,Int32 Len); [DllImport("USB2XXX.dll")] public static extern Int32 LIN_SlaveGetData(Int32 DevHandle,Byte LINIndex,IntPtr pLINMsg); } }