using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace USB2XXX { class CAN_UDS { //CAN UDS地址定义 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public struct CAN_UDS_ADDR { public UInt32 ReqID; //请求报文ID。 public UInt32 ResID; //应答报文ID。 public Byte Flag; //bit[0]-帧类型(0-标准帧,1-扩展帧),bit[1]-FDF(0-普通CAN帧,1-CANFD帧),bit[2]-BRS(0-CANFD帧不加速,1-CANFD帧加速) public Byte AddrFormats; //0-normal, 1-extended ,2-mixed public Byte AddrExt; //当AddrFormats不为normal时,该数据放到CAN数据域第1字节 public Byte MaxDLC; //普通CAN设置为8,CANFD帧可以最大设置为64 }; //函数返回错误代码定义 public const Int32 CAN_UDS_OK = 0; public const Int32 CAN_UDS_TRAN_USB = -98; public const Int32 CAN_UDS_TRAN_CAN = -99; public const Int32 CAN_UDS_TIMEOUT_A = -100; public const Int32 CAN_UDS_TIMEOUT_Bs = -101; public const Int32 CAN_UDS_TIMEOUT_Cr = -102; public const Int32 CAN_UDS_WRONG_SN = -103; public const Int32 CAN_UDS_INVALID_FS = -104; public const Int32 CAN_UDS_UNEXP_PDU = -105; public const Int32 CAN_UDS_WFT_OVRN = -106; public const Int32 CAN_UDS_BUFFER_OVFLW = -107; public const Int32 CAN_UDS_ERROR = -108; //USB2CAN相关函数定义 [DllImport("USB2XXX.dll")] public static extern Int32 CAN_UDS_Request(Int32 DevHandle, Byte CANIndex, ref CAN_UDS_ADDR UDSAddr, Byte[] pReqData, Int32 DataLen); [DllImport("USB2XXX.dll")] public static extern Int32 CAN_UDS_Response(Int32 DevHandle, Byte CANIndex, ref CAN_UDS_ADDR UDSAddr, Byte[] pResData, Int32 TimeOutMs); } }