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.

201 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace USB2XXX
{
class USB2SENT
{
//函数返回错误值宏定义
public const int SENT_SUCCESS = (0); ///<函数执行成功
public const int SENT_ERR_NOT_SUPPORT = (-1); ///<适配器不支持该函数
public const int SENT_ERR_USB_WRITE_FAIL = (-2); ///<USB写数据失败
public const int SENT_ERR_USB_READ_FAIL = (-3); ///<USB读数据失败
public const int SENT_ERR_CMD_FAIL = (-4); ///<命令执行失败
public const int SENT_ERR_PARAMETER = (-7); ///<函数参数传入有误
public const int SENT_ERR_MSG_TYPE = (-8); ///<当前函数不支持该消息类型
//SENT主从模式
public const byte SENT_MASTER = 1; ///<主机模式,用于模拟主节点发送数据
public const byte SENT_SLAVE = 0; ///<从机模式用于监控SENT主机发送出来的数据
public const byte SENT_SPC = 0x80; ///<使能SPC模式
//SENT消息类型定义该值在MsgType里面体现
public const byte SENT_MSGTYPE_ERROR = 0; ///<错误帧比如CRC错误数据不完整等
public const byte SENT_MSGTYPE_FAST = 1; ///<快速通道数据,数据存放在Data[0]~Data[7]里面Status的高4位代表数据有效半字节数
public const byte SENT_MSGTYPE_SLOW_SHORT = 2; ///<慢速通道,简短型串行信息,Data[0]为ID,Data[1]为数据
public const byte SENT_MSGTYPE_SLOW_ENH1 = 3; ///<慢速通道,增强型串行信息,12位数据+8位ID,Data[0]为IDData[1]为高4位数据,Data[2]为低8位数据
public const byte SENT_MSGTYPE_SLOW_ENH2 = 4; ///<慢速通道,增强型串行信息,16位数据+4位ID,Data[0]为IDData[1]为高8位数据,Data[2]为低8位数据
public const byte SENT_MSGTYPE_TX = 0x80; ///<当前帧为发送数据帧
public const byte SENT_MSGTYPE_SPC = 0x08; ///<当前帧为SPC模式帧
//SENT总线空闲电平
public const byte SENT_IDLE_HIGH = 1; ///<总线空闲时为高电平,数据输出低电平脉冲
public const byte SENT_IDLE_LOW = 0; ///<总线空闲时为低电平,数据输出高电平脉冲
//SENT初始化结构定义
public struct SENT_CONFIG
{
public byte TicksTimeUs; ///<Ticks时间单位为us一般为3
public byte MasterMode; ///<0-从机模式用于监控SENT总线数据1-主机模式用于发送SENT总线数据
public byte LowTicks; ///<低电平输出Ticks数低电平输出时间=TicksTimeUs*LowTicks推荐设置为5
public byte PausePulseTicks;///<暂停脉冲数0-不输出1~64对应12Ticks~768Ticks
public byte NibbleNum; ///<快速通道半字节数不包含CRC从机模式若是0则自动匹配主机模式Status高4位代表要发送的有效半字节数
public byte IdleLevel; ///<总线空闲状态0-空闲低电平1-空闲高电平
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] _res; ///<保留,未使用
}
//SENT帧结构定义
public struct SENT_MSG
{
public UInt32 Timestamp; ///<接收到信息帧时的时间标识从SENT控制器初始化开始计时单位为100us。发送数据时为帧间隔时间单位为ms
public byte TimestampHigh; ///<接收数据时为时间戳高位,发送帧时为该帧发送次数
public byte MsgType; ///<帧类型,具体可以参考帧类型定义
public byte Status; ///<高4位代表Data有效字节数低4位代表Status
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] Data; ///<根据帧类型存储不同的数据
public byte crc; ///<MsgType若为增强型串行信息则是6bit有效CRC其他的为4bit有效CRCbit7-当前帧为错误帧
public short Tmtr; ///<Total trigger time单位为0.01tick
public short Tmlow; ///<触发字段,SPC模式时用到,Master low time单位为0.01tick
}
/**
* @brief SENT线
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param[in] pConfig @ref SENT
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_Init(Int32 DevHandle,Byte Channel, ref SENT_CONFIG pConfig);
/**
* @brief SENT线Tick
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param TickTimeUs Tickus
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_SetTickTime(Int32 DevHandle, Byte Channel, double TickTimeUs);
/**
* @brief SENT
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param[in] pSentMsg SENT
* @param MsgNum SENT64
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_SendMsg(Int32 DevHandle, Byte Channel, SENT_MSG[] pSentMsg, UInt32 MsgNum);
/**
* @brief SENT
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param pSentMsg SENT
* @param MsgNum SENT64
* @param SendTimes 0xFFFFFFFF @ref SENT_StopFastMsgTable
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_StartFastMsgTable(Int32 DevHandle, Byte Channel, SENT_MSG[] pSentMsg, UInt32 MsgNum, UInt32 SendTimes);
/**
* @brief SENT
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_StopFastMsgTable(Int32 DevHandle, Byte Channel);
/**
* @brief SENT SPC
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param pSentMsg SENT
* @param MsgNum SENT64
* @param SendTimes 0xFFFFFFFF @ref SENT_StopSPCMsgTable
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_StartSPCMsgTable(Int32 DevHandle, Byte Channel, SENT_MSG[] pSentMsg, UInt32 MsgNum, UInt32 SendTimes);
/**
* @brief SENT
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_StopSPCMsgTable(Int32 DevHandle, Byte Channel);
/**
* @brief SENTStatus
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param pSentMsg SENT
* @param MsgNum SENT64
* @param SendTimes 0xFFFFFFFF @ref SENT_StopSlowMsgTable
* @return
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_StartSlowMsgTable(Int32 DevHandle, Byte Channel, SENT_MSG[] pSentMsg, UInt32 MsgNum, UInt32 SendTimes);
/**
* @brief SENT
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @return
* @retval =0
* @retval !=0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_StopSlowMsgTable(Int32 DevHandle, Byte Channel);
/**
* @brief
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4SENT线LIN线
* @param pSentMsg SENT64退
* @return SENT
* @retval <0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_GetMsg(Int32 DevHandle, Byte Channel, IntPtr pSentMsg);
/**
* @brief SENT
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4
* @return SENT
* @retval <0
*/
[DllImport("USB2XXX.dll")]
public static extern Int64 SENT_GetStartTime(Int32 DevHandle, Byte Channel);
/**
* @brief
* @param DevHandle @ref USB_ScanDevice
* @param Channel SENT0-SENT11-SENT22-SENT33-SENT4
* @return
* @retval <0
*/
[DllImport("USB2XXX.dll")]
public static extern Int32 SENT_ResetStartTime(Int32 DevHandle, Byte Channel);
}
}