You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
3.2 KiB
C#

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);
}
}