ZLG.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef _ZLG_H
  2. #define _ZLG_H
  3. #include "CAN.h"
  4. //定义CAN信息帧的数据类型。
  5. typedef struct _VCI_CAN_OBJ_ZLG{
  6. UINT ID;
  7. UINT TimeStamp;
  8. BYTE TimeFlag;
  9. BYTE SendType;
  10. BYTE RemoteFlag;//是否是远程帧
  11. BYTE ExternFlag;//是否是扩展帧
  12. BYTE DataLen;
  13. BYTE Data[8];
  14. BYTE Reserved[3];
  15. }VCI_CAN_OBJ_ZLG,*PVCI_CAN_OBJ_ZLG;
  16. //定义初始化CAN的数据类型
  17. typedef struct _VCI_INIT_CONFIG_ZLG{
  18. DWORD AccCode;
  19. DWORD AccMask;
  20. DWORD Reserved;
  21. UCHAR Filter;
  22. UCHAR Timing0;
  23. UCHAR Timing1;
  24. UCHAR Mode;
  25. }VCI_INIT_CONFIG_ZLG,*PVCI_INIT_CONFIG_ZLG;
  26. //定义接口卡信息的数据类型
  27. typedef struct _VCI_BOARD_INFO_ZLG{
  28. USHORT hw_Version;
  29. USHORT fw_Version;
  30. USHORT dr_Version;
  31. USHORT in_Version;
  32. USHORT irq_Num;
  33. BYTE can_Num;
  34. CHAR str_Serial_Num[20];
  35. CHAR str_hw_Type[40];
  36. USHORT Reserved[4];
  37. } VCI_BOARD_INFO_ZLG,*PVCI_BOARD_INFO_ZLG;
  38. class CZLGWrapper : public CDLLModule
  39. {
  40. public:
  41. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_OpenDevice, (DWORD DeviceType,DWORD DeviceInd,DWORD Reserved))
  42. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_CloseDevice, (DWORD DeviceType,DWORD DeviceInd))
  43. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_InitCAN, (DWORD DeviceType, DWORD DeviceInd, DWORD CANInd, PVCI_INIT_CONFIG_ZLG pInitConfig))
  44. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_StartCAN, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd))
  45. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ResetCAN, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd))
  46. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ReadErrInfo, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_ERR_INFO pErrInfo))
  47. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ReadCANStatus, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_STATUS pCANStatus))
  48. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ReadBoardInfo, (DWORD DeviceType,DWORD DeviceInd,PVCI_BOARD_INFO_ZLG pInfo))
  49. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_GetReference, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,PVOID pData))
  50. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_SetReference, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,DWORD RefType,PVOID pData))
  51. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_GetReceiveNum, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd))
  52. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_ClearBuffer, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd))
  53. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_Transmit, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ_ZLG pSend,ULONG Len))
  54. DECLARE_DLL_FUNCTION_3(DWORD, WINAPI, VCI_Receive, (DWORD DeviceType,DWORD DeviceInd,DWORD CANInd,PVCI_CAN_OBJ_ZLG pReceive,ULONG Len,INT WaitTime))
  55. BEGIN_DLL_INIT()
  56. INIT_DLL_FUNCTION_3(VCI_OpenDevice)
  57. INIT_DLL_FUNCTION_3(VCI_CloseDevice)
  58. INIT_DLL_FUNCTION_3(VCI_InitCAN)
  59. INIT_DLL_FUNCTION_3(VCI_StartCAN)
  60. INIT_DLL_FUNCTION_3(VCI_ResetCAN)
  61. INIT_DLL_FUNCTION_3(VCI_ReadErrInfo)
  62. INIT_DLL_FUNCTION_3(VCI_ReadCANStatus)
  63. INIT_DLL_FUNCTION_3(VCI_ReadBoardInfo)
  64. INIT_DLL_FUNCTION_3(VCI_GetReference)
  65. INIT_DLL_FUNCTION_3(VCI_SetReference)
  66. INIT_DLL_FUNCTION_3(VCI_GetReceiveNum)
  67. INIT_DLL_FUNCTION_3(VCI_ClearBuffer)
  68. INIT_DLL_FUNCTION_3(VCI_Transmit)
  69. INIT_DLL_FUNCTION_3(VCI_Receive)
  70. END_DLL_INIT()
  71. bool Init(LPCTSTR szPath, UINT nCnt, ...){return false;}// 具体化
  72. };
  73. class CZLG : public CCAN
  74. {
  75. public:
  76. CZLG();
  77. virtual ~CZLG();
  78. BOOL OpenDevice(DWORD devInd);
  79. void CloseDevice(DWORD devInd);
  80. BOOL InitCAN(DWORD devInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig);
  81. BOOL StartCAN(DWORD devInd, DWORD CANInd);
  82. BOOL ResetCAN(DWORD devInd, DWORD CANInd);
  83. void ReadErrInfo(DWORD devInd, DWORD CANInd, PVCI_ERR_INFO pErrInfo);
  84. BOOL ReadCANStatus(DWORD devInd, DWORD CANInd, PVCI_CAN_STATUS pCANStatus);
  85. BOOL ReadBoardInfo(DWORD devInd, DWORD CANInd, PVCI_BOARD_INFO_ZLG pInfo);
  86. BOOL GetReference(DWORD devInd, DWORD CANInd, DWORD RefType, PVOID pData);
  87. BOOL SetReference(DWORD devInd, DWORD CANInd, DWORD RefType, PVOID pData);
  88. BOOL ClearBuffer(DWORD devInd, DWORD CANInd);
  89. ULONG GetReceiveNum(DWORD devInd, DWORD CANInd);
  90. ULONG Transmit(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pSend,ULONG Len);
  91. ULONG Receive(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pReceive, ULONG Len, INT WaitTime=-1);
  92. BOOL LoadDLL();
  93. protected:
  94. VCI_INIT_CONFIG_ZLG init_config;
  95. DWORD m_dwDevType; // 设备类型
  96. DWORD m_dwDevInd; // 设备索引
  97. DWORD m_dwCANInd; // CAN通道索引
  98. CZLGWrapper m_wrapper;
  99. };
  100. #endif