#ifndef _PC_H #define _PC_H #include "CAN.h" //定义初始化CAN的数据类型 typedef struct _VCI_INIT_CONFIG_PC { DWORD AccCode; //对应SJA1000中的四个寄存器ACR0,ACR1,ACR2,ACR3 DWORD AccMask; //对应SJA1000中的四个寄存器AMR0,AMR1,AMR2,AMR3 DWORD Reserved; UCHAR Filter; UCHAR Timing0; //定时器0 UCHAR Timing1; //定时器1 UCHAR Mode; //模式 }VCI_INIT_CONFIG_PC,*P_VCI_INIT_CONFIG_PC;; //定义CAN信息帧的数据类型 typedef struct _VCI_CAN_OBJ_PC { DWORD ID; UCHAR SendType; //0:正常发送,1:自发自收 UCHAR ExternFlag; //0:标准帧, 1:扩展帧 UCHAR RemoteFlag; //0:数据帧, 1:远程帧 UCHAR DataLen; UCHAR Data[8]; }VCI_CAN_OBJ_PC,*P_VCI_CAN_OBJ_PC; class CPCWrapper : public CDLLModule { public: DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_OpenDevice, (DWORD DeviceInd)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_CloseDevice, (DWORD DeviceInd)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_InitCan, (DWORD DeviceInd, DWORD CANInd, P_VCI_INIT_CONFIG_PC pInitConfig)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ResetCan, (DWORD DeviceInd,DWORD CANInd)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_GetReceiveNum, (DWORD DeviceInd,DWORD CANInd)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ClearBuffer, (DWORD DeviceInd,DWORD CANInd)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_Transmit, (DWORD DeviceInd,DWORD CANInd,P_VCI_CAN_OBJ_PC pSend)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_Receive, (DWORD DeviceInd,DWORD CANInd,P_VCI_CAN_OBJ_PC pReceive,ULONG Len,INT WaitTime)) DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ReadDevSn, (DWORD DevIndex, PCHAR DevSn)) BEGIN_DLL_INIT() INIT_DLL_FUNCTION_3(VCI_OpenDevice) INIT_DLL_FUNCTION_3(VCI_CloseDevice) INIT_DLL_FUNCTION_3(VCI_InitCan) INIT_DLL_FUNCTION_3(VCI_ResetCan) INIT_DLL_FUNCTION_3(VCI_GetReceiveNum) INIT_DLL_FUNCTION_3(VCI_ClearBuffer) INIT_DLL_FUNCTION_3(VCI_Transmit) INIT_DLL_FUNCTION_3(VCI_Receive) INIT_DLL_FUNCTION_3(VCI_ReadDevSn) END_DLL_INIT() bool Init(LPCTSTR szPath, UINT nCnt, ...){return false;}// 具体化 }; class CPC : public CCAN { public: CPC(); virtual ~CPC(); BOOL OpenDevice(DWORD devInd); void CloseDevice(DWORD devInd); BOOL InitCAN(DWORD devInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig); BOOL StartCAN(DWORD devInd, DWORD CANInd); BOOL ResetCAN(DWORD devInd, DWORD CANInd); void ReadErrInfo(DWORD devInd, DWORD CANInd, PVCI_ERR_INFO pErrInfo); BOOL ClearBuffer(DWORD devInd, DWORD CANInd); ULONG GetReceiveNum(DWORD devInd, DWORD CANInd); ULONG Transmit(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pSend,ULONG Len); ULONG Receive(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pReceive,ULONG Len, INT WaitTime=1); BOOL LoadDLL(); protected: VCI_INIT_CONFIG_PC init_config; DWORD m_dwDevInd; DWORD m_dwCANInd; CPCWrapper m_wrapper; }; #endif