#ifndef HCANBUS_H #define HCANBUS_H #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) #define LIBUSB_CALL WINAPI #else #define LIBUSB_CALL #endif typedef struct _Dev_Info { char HW_Type[32]; //设备型号 字符串 char HW_Ser[32]; //设备序列号 字符串 char HW_Ver[32]; //硬件版本 字符串 char FW_Ver[32]; //软件版本 字符串 char MF_Date[32]; //生产日期 字符串 } Dev_Info, *PDev_Info; typedef struct _Can_Config { unsigned int Baudrate; unsigned char Config; //配置信息:0x01接通内部电阻 0x02离线唤醒 0x04自动重传 unsigned char Pres; // Pres,Tseg1,Tseg2如果与Baudrate不匹配,动态库会自动按 unsigned char Tseg1; // Baudrate重新计算Pres,Tseg1,Tseg2,SJW并且采样点设置为 unsigned char Tseg2; // 75%左右。一般情况可以只设置波特率,Pres,Tseg1,Tseg2填0 unsigned char Model; //工作模式:0 正常模式,1 环回模式,2 静默模式,3 静默环回模式 unsigned char SJW; unsigned char Reserved1; //保留 unsigned char Reserved2; }Can_Config, *P_Can_Config; typedef struct _CanFD_Config { unsigned int NomBaud; //常规波特率 unsigned int DatBaud; //数据波特率 unsigned char NomPre; // NomPre,NomTseg1,NomTseg2如果与NomBaud不匹配,动态库会自动按 unsigned char NomTseg1; // NomBaud重新计算NomPre,NomTseg1,NomTseg2,NomSJW并且采样点设置为 unsigned char NomTseg2; // 75%左右。这些值可借助波特率计算器计算后设置 unsigned char NomSJW; unsigned char DatPre; // DatPre,DatTseg1,DatTseg2如果与DatBaud不匹配,动态库会自动按 unsigned char DatTseg1; // DatBaud重新计算DatPre,DatTseg1,DatTseg2,DatSJW并且采样点设置为 unsigned char DatTseg2; // 75%左右。这些值可借助波特率计算器计算后设置 unsigned char DatSJW; unsigned char Config; //配置信息:0x01接通内部电阻 0x02离线唤醒 0x04自动重传 unsigned char Model; //工作模式:0 正常模式,1 环回模式,2 静默模式,3 静默环回模式 unsigned char Cantype; //CAN模式:0 CAN,1 IOS CANFD,2 Non-ISO CANFD unsigned char Reserved; //保留 }CanFD_Config, *P_CanFD_Config; typedef struct _Can_Msg { unsigned int ID; //报文ID unsigned int TimeStamp; //微秒级时间戳 unsigned char FrameType; //帧类型 unsigned char DataLen; //有效字节数 unsigned char Data[8]; //报文数据 unsigned char ExternFlag; //扩展帧标识:0标准帧,1扩展帧 unsigned char RemoteFlag; //远程帧标识:0数据帧,1远程帧 unsigned char BusSatus; //总线状态 unsigned char ErrSatus; //错误状态 unsigned char TECounter; //发送错误计数 unsigned char RECounter; //接收错误计数 }Can_Msg, *P_Can_Msg; typedef struct _CanFD_Msg { unsigned int ID; //报文ID unsigned int TimeStamp; //微秒级时间戳 unsigned char FrameType; //帧类型 unsigned char DLC; //DLC不等于数据长度。最大值15,对于数据长度64 unsigned char ExternFlag; //扩展帧标识:0标准帧,1扩展帧 unsigned char RemoteFlag; //远程帧标识:0数据帧,1远程帧 unsigned char BusSatus; //总线状态 unsigned char ErrSatus; //错误状态 unsigned char TECounter; //发送错误计数 unsigned char RECounter; //接收错误计数 unsigned char Data[64]; //报文数据 }CanFD_Msg, *P_CanFD_Msg; typedef struct _Can_Status { unsigned char BusSatus; //总线状态 unsigned char ErrSatus; //错误状态 unsigned char TECounter; //发送错误计数 unsigned char RECounter; //接收错误计数 unsigned int TimeStamp; //产生状态时的时间戳 }Can_Status, *P_Can_Status; #ifdef __cplusplus extern "C" { #endif int __stdcall Reg_HotPlug_Func(void(*pfunc)(void)); //热拔插函数 int __stdcall CAN_ScanDevice(void); //扫描CAN,CANFD设备 int __stdcall CAN_GeDevType(unsigned int devNum); //获取CAN,CANFD类型 0:常规CAN,1:CANFD int __stdcall CAN_GeDevPlck(unsigned int devNum); //获取CAN,CANFD主频 int __stdcall CAN_OpenDevice(unsigned int devNum); //打开CAN,CANFD设备 int __stdcall CAN_CloseDevice(unsigned int devNum); //关闭CAN,CANFD设备 int __stdcall CAN_ReadDevInfo(unsigned int devNum, PDev_Info devinfo); //读取CAN,CANFD设备信息 int __stdcall CAN_SetFilter(unsigned int devNum,char namber, char type, unsigned int ftID, unsigned int ftMask, char enable); //设置CAN,CANFD硬件屏蔽 int __stdcall CAN_Reset(unsigned int devNum); //复位CAN,CANFD设备 int __stdcall CAN_GetStatus(unsigned int devNum,P_Can_Status status); //获取CAN,CANFD设备状态 int __stdcall CAN_Init(unsigned int devNum,P_Can_Config pInitConfig); //初始化CAN设备 int __stdcall CAN_Transmit(unsigned int devNum, P_Can_Msg canmsg, unsigned int items, int timeou); //发送CAN报文 int __stdcall CAN_TransmitRt(unsigned int devNum, P_Can_Msg canmsg, unsigned int items, unsigned int *txitems, int timeou); //定时发送CAN报文 int __stdcall CAN_GetReceiveNum(unsigned int devNum); //获取接收缓冲区中接收到但尚未被读取的帧数量 int __stdcall CAN_Receive(unsigned int devNum,P_Can_Msg canmsg, int Len, int timeou); //接收CAN报文 int __stdcall CANFD_Init(unsigned int devNum, P_CanFD_Config pInitConfig); int __stdcall CANFD_Transmit(unsigned int devNum, P_CanFD_Msg canmsg, unsigned int items, int timeout); int __stdcall CANFD_TransmitRt(unsigned int devNum, P_CanFD_Msg canmsg, unsigned int items, unsigned int *txitems, int timeou); //定时发送CAN报文 int __stdcall CANFD_GetReceiveNum(unsigned int devNum);//获取接收缓冲区中接收到但尚未被读取的帧数量 int __stdcall CANFD_Receive(unsigned int devNum, P_CanFD_Msg canmsg, unsigned int Len, int timeout); //接收CANFD报文 #ifdef __cplusplus } #endif #endif