PC.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef _PC_H
  2. #define _PC_H
  3. #include "CAN.h"
  4. //定义初始化CAN的数据类型
  5. typedef struct _VCI_INIT_CONFIG_PC
  6. {
  7. DWORD AccCode; //对应SJA1000中的四个寄存器ACR0,ACR1,ACR2,ACR3
  8. DWORD AccMask; //对应SJA1000中的四个寄存器AMR0,AMR1,AMR2,AMR3
  9. DWORD Reserved;
  10. UCHAR Filter;
  11. UCHAR Timing0; //定时器0
  12. UCHAR Timing1; //定时器1
  13. UCHAR Mode; //模式
  14. }VCI_INIT_CONFIG_PC,*P_VCI_INIT_CONFIG_PC;;
  15. //定义CAN信息帧的数据类型
  16. typedef struct _VCI_CAN_OBJ_PC
  17. {
  18. DWORD ID;
  19. UCHAR SendType; //0:正常发送,1:自发自收
  20. UCHAR ExternFlag; //0:标准帧, 1:扩展帧
  21. UCHAR RemoteFlag; //0:数据帧, 1:远程帧
  22. UCHAR DataLen;
  23. UCHAR Data[8];
  24. }VCI_CAN_OBJ_PC,*P_VCI_CAN_OBJ_PC;
  25. class CPCWrapper : public CDLLModule
  26. {
  27. public:
  28. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_OpenDevice, (DWORD DeviceInd))
  29. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_CloseDevice, (DWORD DeviceInd))
  30. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_InitCan, (DWORD DeviceInd, DWORD CANInd, P_VCI_INIT_CONFIG_PC pInitConfig))
  31. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ResetCan, (DWORD DeviceInd,DWORD CANInd))
  32. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_GetReceiveNum, (DWORD DeviceInd,DWORD CANInd))
  33. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ClearBuffer, (DWORD DeviceInd,DWORD CANInd))
  34. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_Transmit, (DWORD DeviceInd,DWORD CANInd,P_VCI_CAN_OBJ_PC pSend))
  35. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_Receive, (DWORD DeviceInd,DWORD CANInd,P_VCI_CAN_OBJ_PC pReceive,ULONG Len,INT WaitTime))
  36. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ReadDevSn, (DWORD DevIndex, PCHAR DevSn))
  37. BEGIN_DLL_INIT()
  38. INIT_DLL_FUNCTION_3(VCI_OpenDevice)
  39. INIT_DLL_FUNCTION_3(VCI_CloseDevice)
  40. INIT_DLL_FUNCTION_3(VCI_InitCan)
  41. INIT_DLL_FUNCTION_3(VCI_ResetCan)
  42. INIT_DLL_FUNCTION_3(VCI_GetReceiveNum)
  43. INIT_DLL_FUNCTION_3(VCI_ClearBuffer)
  44. INIT_DLL_FUNCTION_3(VCI_Transmit)
  45. INIT_DLL_FUNCTION_3(VCI_Receive)
  46. INIT_DLL_FUNCTION_3(VCI_ReadDevSn)
  47. END_DLL_INIT()
  48. bool Init(LPCTSTR szPath, UINT nCnt, ...){return false;}// 具体化
  49. };
  50. class CPC : public CCAN
  51. {
  52. public:
  53. CPC();
  54. virtual ~CPC();
  55. BOOL OpenDevice(DWORD devInd);
  56. void CloseDevice(DWORD devInd);
  57. BOOL InitCAN(DWORD devInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig);
  58. BOOL StartCAN(DWORD devInd, DWORD CANInd);
  59. BOOL ResetCAN(DWORD devInd, DWORD CANInd);
  60. void ReadErrInfo(DWORD devInd, DWORD CANInd, PVCI_ERR_INFO pErrInfo);
  61. BOOL ClearBuffer(DWORD devInd, DWORD CANInd);
  62. ULONG GetReceiveNum(DWORD devInd, DWORD CANInd);
  63. ULONG Transmit(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pSend,ULONG Len);
  64. ULONG Receive(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pReceive,ULONG Len, INT WaitTime=1);
  65. BOOL LoadDLL();
  66. protected:
  67. VCI_INIT_CONFIG_PC init_config;
  68. DWORD m_dwDevInd;
  69. DWORD m_dwCANInd;
  70. CPCWrapper m_wrapper;
  71. };
  72. #endif