#include "stdafx.h" #include "JY.h" CJY::CJY() { m_dwDevType = 2; //设备类型USBCAN init_config.Filter = 1; //单滤波 init_config.Mode = 0; //正常状态 init_config.kCanBaud = 7; //波特率100K,不与timing0、timing1设置冲突 init_config.Reserved = 0; init_config.CanRx_IER = 1; //不知道是什么... } CJY::~CJY() { // FreeLibrary(hDLL); } BOOL CJY::LoadDLL() { if (m_wrapper.Init("VCI_CAN.DLL")) return TRUE; else return FALSE; } BOOL CJY::OpenDevice(DWORD devInd) { if (m_wrapper.VCI_OpenDevice(m_dwDevType, devInd, 0) != STATUS_OK) return FALSE; return TRUE; } void CJY::CloseDevice(DWORD devInd) { m_wrapper.VCI_CloseDevice(m_dwDevType, devInd); } BOOL CJY::InitCAN(DWORD devInd, DWORD CANInd, PVCI_INIT_CONFIG pInitConfig) { init_config.AccCode = pInitConfig->AccCode; init_config.AccMask = pInitConfig->AccMask; init_config.Timing0 = pInitConfig->Timing0; init_config.Timing1 = pInitConfig->Timing1; if (m_wrapper.VCI_InitCAN(m_dwDevType, devInd, CANInd, &init_config) != STATUS_OK) return FALSE; return TRUE; } BOOL CJY::StartCAN(DWORD devInd, DWORD CANInd) { if (m_wrapper.VCI_StartCAN(m_dwDevType, devInd, CANInd) != STATUS_OK) return FALSE; return TRUE; } BOOL CJY::ResetCAN(DWORD devInd, DWORD CANInd) { if (m_wrapper.VCI_ResetCAN(m_dwDevType, devInd, CANInd) != STATUS_OK) return FALSE; return TRUE; } BOOL CJY::ClearBuffer(DWORD devInd, DWORD CANInd) { // if (VCI_ClearBuffer(m_dwDevType, devInd, CANInd) != STATUS_OK) // return FALSE; return TRUE; } void CJY::ReadErrInfo(DWORD devInd, DWORD CANInd, PVCI_ERR_INFO pErrInfo) { // m_wrapper.VCI_ReadErrInfo(m_dwDevType, devInd, CANInd, pErrInfo); return; } BOOL CJY::ReadCANStatus(DWORD devInd, DWORD CANInd,PVCI_CAN_STATUS pCANStatus) { if (m_wrapper.VCI_ReadCANStatus(m_dwDevType, devInd, CANInd, pCANStatus) != STATUS_OK) return FALSE; return TRUE; } ULONG CJY::GetReceiveNum(DWORD devInd, DWORD CANInd) { ULONG len = m_wrapper.VCI_GetReceiveNum(m_dwDevType, devInd, CANInd); return len; } ULONG CJY::Transmit(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pSend,ULONG Len) { ULONG len; VCI_CAN_OBJ_JY frameinfo; // frameinfo.ID = pSend->ID; // pSend->IDArray[2] &= 0x07; frameinfo.ID[0] = ((pSend->IDArray[2])<<5)|(pSend->IDArray[3]>>3); frameinfo.ID[1] = (pSend->IDArray[3]<<5); frameinfo.DataLen = pSend->DataLen; frameinfo.ExternFlag = pSend->ExternFlag; frameinfo.RemoteFlag = pSend->RemoteFlag; memcpy(frameinfo.Data, pSend->Data, 8); memcpy(frameinfo.Reserved, pSend->Reserved, 3); // 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]); len = m_wrapper.VCI_Transmit(m_dwDevType, devInd, CANInd, &frameinfo); return len; } ULONG CJY::Receive(DWORD devInd, DWORD CANInd, PVCI_CAN_OBJ pReceive,ULONG Len, INT WaitTime/* =-1 */) { ULONG len; VCI_CAN_OBJ_JY frameinfo[100]; len = m_wrapper.VCI_Receive(m_dwDevType, devInd, CANInd, frameinfo); // pReceive->ID = frameinfo.ID; if (len > 0) { for (int i=0;i>5)|(frameinfo[i].ID[0]<<3); frameinfo[i].ID[0]=frameinfo[i].ID[0]>>5; pReceive[i].ID = (frameinfo[i].ID[0]<<8) + frameinfo[i].ID[1]; pReceive[i].DataLen = frameinfo[i].DataLen; pReceive[i].ExternFlag = frameinfo[i].ExternFlag; pReceive[i].RemoteFlag = frameinfo[i].RemoteFlag; memcpy(pReceive[i].Data, frameinfo[i].Data, 8); memcpy(pReceive[i].Reserved, frameinfo[i].Reserved, 3); } } return len; }