JY.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #include "stdafx.h"
  2. #include "JY.h"
  3. CJY::CJY()
  4. {
  5. m_dwDevType = 2; //设备类型USBCAN
  6. init_config.Filter = 1; //单滤波
  7. init_config.Mode = 0; //正常状态
  8. init_config.kCanBaud = 7; //波特率100K,不与timing0、timing1设置冲突
  9. init_config.Reserved = 0;
  10. init_config.CanRx_IER = 1; //不知道是什么...
  11. }
  12. CJY::~CJY()
  13. {
  14. // FreeLibrary(hDLL);
  15. }
  16. BOOL CJY::LoadDLL()
  17. {
  18. if (m_wrapper.Init("VCI_CAN.DLL"))
  19. return TRUE;
  20. else
  21. return FALSE;
  22. }
  23. BOOL CJY::OpenDevice(DWORD devInd)
  24. {
  25. if (m_wrapper.VCI_OpenDevice(m_dwDevType, devInd, 0) != STATUS_OK)
  26. return FALSE;
  27. return TRUE;
  28. }
  29. void CJY::CloseDevice(DWORD devInd)
  30. {
  31. m_wrapper.VCI_CloseDevice(m_dwDevType, devInd);
  32. }
  33. BOOL CJY::InitCAN(DWORD devInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig)
  34. {
  35. init_config.AccCode = pInitConfig->AccCode;
  36. init_config.AccMask = pInitConfig->AccMask;
  37. init_config.Timing0 = pInitConfig->Timing0;
  38. init_config.Timing1 = pInitConfig->Timing1;
  39. if (m_wrapper.VCI_InitCAN(m_dwDevType, devInd, CANInd, &init_config) != STATUS_OK)
  40. return FALSE;
  41. return TRUE;
  42. }
  43. BOOL CJY::StartCAN(DWORD devInd, DWORD CANInd)
  44. {
  45. if (m_wrapper.VCI_StartCAN(m_dwDevType, devInd, CANInd) != STATUS_OK)
  46. return FALSE;
  47. return TRUE;
  48. }
  49. BOOL CJY::ResetCAN(DWORD devInd, DWORD CANInd)
  50. {
  51. if (m_wrapper.VCI_ResetCAN(m_dwDevType, devInd, CANInd) != STATUS_OK)
  52. return FALSE;
  53. return TRUE;
  54. }
  55. BOOL CJY::ClearBuffer(DWORD devInd, DWORD CANInd)
  56. {
  57. // if (VCI_ClearBuffer(m_dwDevType, devInd, CANInd) != STATUS_OK)
  58. // return FALSE;
  59. return TRUE;
  60. }
  61. void CJY::ReadErrInfo(DWORD devInd, DWORD CANInd, PVCI_ERR_INFO pErrInfo)
  62. {
  63. // m_wrapper.VCI_ReadErrInfo(m_dwDevType, devInd, CANInd, pErrInfo);
  64. return;
  65. }
  66. BOOL CJY::ReadCANStatus(DWORD devInd, DWORD CANInd,PVCI_CAN_STATUS pCANStatus)
  67. {
  68. if (m_wrapper.VCI_ReadCANStatus(m_dwDevType, devInd, CANInd, pCANStatus) != STATUS_OK)
  69. return FALSE;
  70. return TRUE;
  71. }
  72. ULONG CJY::GetReceiveNum(DWORD devInd, DWORD CANInd)
  73. {
  74. ULONG len = m_wrapper.VCI_GetReceiveNum(m_dwDevType, devInd, CANInd);
  75. return len;
  76. }
  77. ULONG CJY::Transmit(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pSend,ULONG Len)
  78. {
  79. ULONG len;
  80. VCI_CAN_OBJ_JY frameinfo;
  81. // frameinfo.ID = pSend->ID;
  82. // pSend->IDArray[2] &= 0x07;
  83. frameinfo.ID[0] = ((pSend->IDArray[2])<<5)|(pSend->IDArray[3]>>3);
  84. frameinfo.ID[1] = (pSend->IDArray[3]<<5);
  85. frameinfo.DataLen = pSend->DataLen;
  86. frameinfo.ExternFlag = pSend->ExternFlag;
  87. frameinfo.RemoteFlag = pSend->RemoteFlag;
  88. memcpy(frameinfo.Data, pSend->Data, 8);
  89. memcpy(frameinfo.Reserved, pSend->Reserved, 3);
  90. // TRACE("%x:%x:%x:%x---%x:%x:%x:%x:%x:%x:%x:%x\n",frameinfo.ID[0],frameinfo.ID[1],frameinfo.ID[2],frameinfo.ID[3],frameinfo.Data[0],frameinfo.Data[1],frameinfo.Data[2],frameinfo.Data[3],frameinfo.Data[4],frameinfo.Data[5],frameinfo.Data[6],frameinfo.Data[7]);
  91. len = m_wrapper.VCI_Transmit(m_dwDevType, devInd, CANInd, &frameinfo);
  92. return len;
  93. }
  94. ULONG CJY::Receive(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pReceive,ULONG Len, INT WaitTime/* =-1 */)
  95. {
  96. ULONG len;
  97. VCI_CAN_OBJ_JY frameinfo[100];
  98. len = m_wrapper.VCI_Receive(m_dwDevType, devInd, CANInd, frameinfo);
  99. // pReceive->ID = frameinfo.ID;
  100. if (len > 0)
  101. {
  102. for (int i=0;i<len;i++)
  103. {
  104. frameinfo[i].ID[1]=(frameinfo[i].ID[1]>>5)|(frameinfo[i].ID[0]<<3);
  105. frameinfo[i].ID[0]=frameinfo[i].ID[0]>>5;
  106. pReceive[i].ID = (frameinfo[i].ID[0]<<8) + frameinfo[i].ID[1];
  107. pReceive[i].DataLen = frameinfo[i].DataLen;
  108. pReceive[i].ExternFlag = frameinfo[i].ExternFlag;
  109. pReceive[i].RemoteFlag = frameinfo[i].RemoteFlag;
  110. memcpy(pReceive[i].Data, frameinfo[i].Data, 8);
  111. memcpy(pReceive[i].Reserved, frameinfo[i].Reserved, 3);
  112. }
  113. }
  114. return len;
  115. }