2025-12-24 17:18:34 +08:00

120 lines
6.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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常规CAN1CANFD
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