107 lines
6.4 KiB
C#
107 lines
6.4 KiB
C#
using System.Runtime.InteropServices;
|
||
|
||
namespace CapMachine.Wpf.LinDrive
|
||
{
|
||
//注意:使用这些函数需要1.5.30及以上的固件才支持
|
||
public class USB2LIN_EX
|
||
{
|
||
//定义函数返回错误代码
|
||
public const Int32 LIN_EX_SUCCESS = (0); //函数执行成功
|
||
public const Int32 LIN_EX_ERR_NOT_SUPPORT = (-1); //适配器不支持该函数
|
||
public const Int32 LIN_EX_ERR_USB_WRITE_FAIL = (-2); //USB写数据失败
|
||
public const Int32 LIN_EX_ERR_USB_READ_FAIL = (-3); //USB读数据失败
|
||
public const Int32 LIN_EX_ERR_CMD_FAIL = (-4); //命令执行失败
|
||
public const Int32 LIN_EX_ERR_CH_NO_INIT = (-5); //该通道未初始化
|
||
public const Int32 LIN_EX_ERR_READ_DATA = (-6); //LIN读数据失败
|
||
//LIN和校验模式
|
||
public const Byte LIN_EX_CHECK_STD = 0; //标准校验,不含PID
|
||
public const Byte LIN_EX_CHECK_EXT = 1; //增强校验,包含PID
|
||
public const Byte LIN_EX_CHECK_USER = 2; //自定义校验类型,需要用户自己计算并传入Check,不进行自动校验
|
||
public const Byte LIN_EX_CHECK_NONE = 3; //接收数据校验错误
|
||
public const Byte LIN_EX_CHECK_ERROR = 4; //接收数据校验错误
|
||
//定义主从模式
|
||
public const Byte LIN_EX_MASTER = 1;//主机
|
||
public const Byte LIN_EX_SLAVE = 0;//从机
|
||
|
||
public const Byte LIN_EX_MSG_TYPE_UN = 0; //未知类型
|
||
public const Byte LIN_EX_MSG_TYPE_MW = 1; //主机向从机发送数据
|
||
public const Byte LIN_EX_MSG_TYPE_MR = 2; //主机从从机读取数据
|
||
public const Byte LIN_EX_MSG_TYPE_SW = 3; //从机发送数据
|
||
public const Byte LIN_EX_MSG_TYPE_SR = 4; //从机接收数据
|
||
public const Byte LIN_EX_MSG_TYPE_BK = 5; //只发送BREAK信号,若是反馈回来的数据,表明只检测到BREAK信号
|
||
public const Byte LIN_EX_MSG_TYPE_SY = 6; //表明检测到了BREAK,SYNC信号
|
||
public const Byte LIN_EX_MSG_TYPE_ID = 7; //表明检测到了BREAK,SYNC,PID信号
|
||
public const Byte LIN_EX_MSG_TYPE_DT = 8; //表明检测到了BREAK,SYNC,PID,DATA信号
|
||
public const Byte LIN_EX_MSG_TYPE_CK = 9; //表明检测到了BREAK,SYNC,PID,DATA,CHECK信号
|
||
|
||
//LIN数据帧格式定义
|
||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||
public struct LIN_EX_MSG
|
||
{
|
||
[MarshalAs(UnmanagedType.U4)]
|
||
public UInt32 Timestamp; //时间戳
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte MsgType; //帧类型
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte CheckType; //校验类型
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte DataLen; //LIN数据段有效数据字节数
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte Sync; //固定值,0x55
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte PID; //帧ID
|
||
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.U1)]
|
||
public Byte[] Data; //数据
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte Check; //校验,只有校验数据类型为LIN_EX_CHECK_USER的时候才需要用户传入数据
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte BreakBits; //该帧的BRAK信号位数,有效值为10到26,若设置为其他值则默认为13位
|
||
[MarshalAs(UnmanagedType.U1)]
|
||
public Byte Reserve1;
|
||
}
|
||
//初始化
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_Init(Int32 DevHandle, Byte LINIndex, Int32 BaudRate, Byte MasterMode);
|
||
//主机模式操作函数
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterSync(Int32 DevHandle, Byte LINIndex, LIN_EX_MSG[] pInMsg, IntPtr pOutMsg, Int32 MsgLen);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterBreak(Int32 DevHandle, Byte LINIndex);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterWrite(Int32 DevHandle, Byte LINIndex, Byte PID, Byte[] pData, Byte DataLen, Byte CheckType);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterRead(Int32 DevHandle, Byte LINIndex, Byte PID, Byte[] pData);
|
||
//从机模式操作函数
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_SlaveSetIDMode(Int32 DevHandle, Byte LINIndex, LIN_EX_MSG[] pLINMsg, Int32 MsgLen);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_SlaveGetIDMode(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_SlaveGetData(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg);
|
||
//电源控制相关函数
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_CtrlPowerOut(Int32 DevHandle, Byte LINIndex, Byte State);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_GetVbatValue(Int32 DevHandle, Int16[] pBatValue);
|
||
//主机模式自动发送数据相关函数
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterStartSch(Int32 DevHandle, Byte LINIndex, LIN_EX_MSG[] pLINMsg, Int32 MsgLen);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterStopSch(Int32 DevHandle, Byte LINIndex);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterGetSch(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterSetSchRunTimes(Int32 DevHandle, Byte LINIndex, UInt32 RunTimes);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int64 LIN_EX_GetStartTime(Int32 DevHandle, Byte LINIndex);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_ResetStartTime(Int32 DevHandle, Byte LINIndex);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_MasterOfflineSch(Int32 DevHandle, Byte LINIndex, Int32 BaudRate, LIN_EX_MSG[] pLINMsg, Int32 MsgLen);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_DecodeListFile(string pFileName, Byte CheckType, Int32 BaudRate, Byte[] pReadDataList, Byte ReadDataListLen, Byte[] pCheckTypeList, Byte CheckTypeListLen);
|
||
[DllImport("USB2XXX.dll")]
|
||
public static extern Int32 LIN_EX_GetListFileMsg(Int32 MsgIndex, Int32 MsgLen, IntPtr pLINMsg);
|
||
}
|
||
}
|