//// CANPort.cpp: implementation of the CCANPort class. //// //////////////////////////////////////////////////////////////////////// // #include "stdafx.h" //#include "resource.h" //#include "CANPort.h" ////#include "wddr.h" ////#include "log.h" ////#include "WDDR.h" //#ifdef _DEBUG //#undef THIS_FILE //static char THIS_FILE[]=__FILE__; //#define new DEBUG_NEW //#endif // ////#include "Table.h" ////#include "Aqmodule.h" ////#include ".\Generator\GeneratorD100.h" //#include "Usbcan\SimulateCan.h" ////#include "ReplaceYaoTai.h" // ////CTable* CCANPort::m_pTable = NULL; ////CReplaceYaoTai* CCANPort::m_pReplaceYaoTai = NULL; //////////////////////////////////////////////////////////////////////// //// Construction/Destruction //////////////////////////////////////////////////////////////////////// // // // ////----------------------------------------------------- ////参数: ////chr:要转换的字符 ////cint:储存转换过来的数据 ////函数功能:字符转换为数据 ////----------------------------------------------------- //int chartoint(unsigned char chr, unsigned char* cint)//CCANPort:: //{ // unsigned char cTmp; // cTmp = chr - 48; //0-9 // if (cTmp >= 0 && cTmp <= 9) // { // *cint = cTmp; // return 0; // } // cTmp = chr - 65;//A-F // if (cTmp >= 0 && cTmp <= 5) // { // *cint = (cTmp + 10); // return 0; // } // cTmp = chr - 97;//a-f // if (cTmp >= 0 && cTmp <= 5) // { // *cint = (cTmp + 10); // return 0; // } // return 1; //} // // //----------------------------------------------------- ////参数: ////str:要转换的字符串 ////data:储存转换过来的数据串 ////len:数据长度 ////函数功能:字符串转换为数据串 ////----------------------------------------------------- //int strtodata(unsigned char* str, unsigned char* data, int len, int flag)//CCANPort:: //{ // unsigned char cTmp = 0; // int i = 0; // for (int j = 0; j < len; j++) // { // if (chartoint(str[i++], &cTmp)) // return 1; // data[j] = cTmp; // if (chartoint(str[i++], &cTmp)) // return 1; // data[j] = (data[j] << 4) + cTmp; // if (flag == 1) // i++; // } // return 0; //} // // // //CCANPort::CCANPort() //{ //// m_devtype = VCI_USBCAN1; // //device index // m_devind = 0; // //can number // m_cannum = 0; // //about thread // m_bCANThreadActive = FALSE; // m_Thread = NULL; // //can start flag // m_bCanStart = FALSE; // //2007.10.30-所有和CAN相连接的接口 // //m_p50RF_RAD = NULL; // //m_pGeneratorD100 =NULL; // //m_pInfChestBrd = NULL; // m_hCANWindowHandle = NULL; // // m_nAngleDirection = 0; // // int m_nCANType = 0; // switch(m_nCANType) // { // case 0: // m_pCANEx = new CZLG; // break; // case 1: // m_pCANEx = new CPC; // break; // case 2: // m_pCANEx = new CJY; // case 9: // m_pCANEx = new CSimulateCan; // break; // } //} // //CCANPort::~CCANPort() //{ // // if(m_Thread != NULL) // { // //DWORD dwSuspendCount; // //do{ // // dwSuspendCount = m_Thread->ResumeThread(); // //}while((dwSuspendCount != 0) && (dwSuspendCount != 0xffffffff) ); // // //if (m_bCANThreadActive)//当前状态可能是活动也可能是不活动的 // // m_bCANThreadActive = FALSE; // // //WaitForSingleObject(m_Thread->m_hThread,INFINITE); // //delete m_Thread; // // if (m_bCANThreadActive) // m_bCANThreadActive = FALSE; // } // // // // CAN_Close(); // if(m_pCANEx) // { // delete m_pCANEx; // m_pCANEx = NULL; // } //} // ///* //*正常返回0,否则为1; //*/ //BOOL CCANPort::CAN_Open(/*int DeviceType,*/DWORD DeviceInd, int Reserved) //{ //// m_devtype = DeviceType; // m_devind = DeviceInd; // INT nFlag = 0; //// while(VCI_OpenDevice(m_devtype,m_devind,Reserved) != STATUS_OK) // if (!m_pCANEx->LoadDLL()) // { // return FALSE; // } // while(m_pCANEx->OpenDevice(m_devind)!= STATUS_OK) // { // if(2 == nFlag++) // { // return FALSE; // } // Sleep(1000); // } // return TRUE; //} // //bool CCANPort::CAN_Start() //{ // //if(VCI_StartCAN(m_devtype,m_devind,m_cannum)==1) // if(m_pCANEx->StartCAN(m_devind,m_cannum)==1) // { // m_bCanStart = TRUE; // return true; // } // else // { // return false; // } // //} //bool CCANPort::CAN_Reset() //{ // //2007.11.19_此函数用来复位CAN // //if(VCI_ResetCAN(m_devtype,m_devind,m_cannum) == 1) // if(m_pCANEx->ResetCAN(m_devind,m_cannum)==1) // { // m_bCanStart = FALSE; // return true; // } // else // { // //VCI_CloseDevice(m_devtype,m_devind); // m_pCANEx->CloseDevice(m_devind); // m_bCanStart = FALSE; // return false; // } // //} // //void CCANPort::CAN_Close() //{ // if(!m_bCanStart) // return; // // m_bCanStart = FALSE; // // Sleep(100); // // m_pCANEx->CloseDevice(m_devind); //} // // //BOOL CCANPort::CAN_Init(HWND hWnd, DWORD dwAccCode, DWORD dwAccMask, UCHAR ucFilter, UCHAR ucMode, UCHAR ucTiming0, UCHAR ucTiming1, int nCannum) //{ // m_hCANWindowHandle = hWnd; //0 // init_config.AccCode = dwAccCode; //0 验收码 // init_config.AccMask = dwAccMask; //ffffffff 屏蔽码 // init_config.Filter = ucFilter; //1 滤波方式:单滤/双滤0/1 // init_config.Mode = ucMode; //0 模式:正常/只听,0/1 // init_config.Timing0 = ucTiming0; //TIMING0 定时器1 timing0; // init_config.Timing1 = ucTiming1; //TIMING1 // m_cannum = nCannum; //nCannum // // //初始化CAN // if (m_pCANEx->InitCAN(m_devind, m_cannum, &init_config) != STATUS_OK) // { // //VCI_CloseDevice(m_devtype,m_devind); // m_pCANEx->CloseDevice(m_devind); // return false; // } // // //开启接收线程 // // DWORD m_HardwareStatusID; // m_Thread = CreateThread(0, 0, ReceiveThread, this, 0, (LPDWORD)m_HardwareStatusID); // if (m_Thread == NULL) // { // mLog::Fatal("Start HardwareStatus Thread Failed"); // return false; // } // // // // //m_Thread = AfxBeginThread(ReceiveThread, this, THREAD_PRIORITY_BELOW_NORMAL/*THREAD_PRIORITY_NORMAL*/, 0, CREATE_SUSPENDED); // //m_Thread->m_bAutoDelete = FALSE; // //m_Thread->ResumeThread(); // // return TRUE; //} // // //bool CCANPort::CAN_transmit(string strData, string strFrmID, BYTE RomoteFlag/*= 0*/, BYTE ExternFlag/*= 0*/, BYTE type/*=1*/) //{ // VCI_CAN_OBJ frameinfo; // BYTE FrameID[4] = { 0,0,0,0 }; // char szFrameID[9]; // memset(szFrameID, '0', 9); // unsigned char Data[8]; // char szData[25]; // BYTE datalen = 0; // // //帧ID占4个字节,用16进制表示:0x21A09878,字符表示长度为8,----------------------here ,maybe not right.because as i know frameID =4. // if (strFrmID.length()>8) // { // return false; // } // //if (strFrmID.GetLength() > 8) // //{ // // return false; // //} // // //发送数据,16进制表示,每个数无空格, 即:"01A1098070000000",最多16个数 // //if (strData.GetLength() > 16) // if (strData.length() > 16) // { // return false; // } // // //发送帧类型:标准,扩展 // if (ExternFlag == 0)//标准帧 // { // if (strData.length() % 2 == 1)//。。。? // { // return false; // } // } // //copy 到低位 // memcpy(&szFrameID[8 - strFrmID.length()], strFrmID.c_str(), strFrmID.length()); // // strtodata((unsigned char*)szFrameID, FrameID, 4, 0); // //发送数据是16进制表示,每个数据之间有空格 // datalen = (strData.length()) / 2;//实际个数 // // strcpy(szData, strData.c_str()); // // strtodata((unsigned char*)szData, Data, datalen, 0); // // frameinfo.DataLen = datalen; // // memcpy(&frameinfo.Data, Data, datalen); // // frameinfo.RemoteFlag = RomoteFlag;//数据帧/远程帧 // frameinfo.ExternFlag = ExternFlag; // // frameinfo.TimeFlag = 0; // frameinfo.TimeStamp = 0; // // //帧类型约束帧ID的实际占有位数 // if (frameinfo.ExternFlag == 1) // { // frameinfo.ID = ((DWORD)FrameID[0] << 24) + ((DWORD)FrameID[1] << 16) + ((DWORD)FrameID[2] << 8) + // ((DWORD)FrameID[3]); // } // else // { // frameinfo.ID = ((DWORD)FrameID[2] << 8) + ((DWORD)FrameID[3]); // } // frameinfo.SendType = type;//发送格式:单发。。 // // // CCAN* p = m_pCANEx; // if (m_pCANEx->Transmit(m_devind, m_cannum, &frameinfo, 1) == 1) // { // return true; // } // else // { // Sleep(20); // if (m_pCANEx->Transmit(m_devind, m_cannum, &frameinfo, 1) == 1) // return true; // else // { // return false; // } // } // // return false; //} // // //DWORD CCANPort::ReceiveThread(void *param) //{ // CCANPort* port = (CCANPort *)param; // // VCI_CAN_OBJ frameinfo[50]; // VCI_ERR_INFO errinfo; // string strFrmID; // int nRecvDataLen = 1; // // string str; // // char recvbuf[10]{ 0,0,0,0,0,0,0,0,0,0 }; // // port->m_bCANThreadActive = true; // // while(port->m_bCANThreadActive) // { // if (port == NULL) { return 0; } // // Sleep(4); // nRecvDataLen = port->m_pCANEx->Receive(port->m_devind, port->m_cannum, frameinfo, 50, 200); // if (nRecvDataLen == 0xffffffff) // { // port->m_pCANEx->ReadErrInfo(port->m_devind,port->m_cannum,&errinfo); // } // else // { // // //str.Format("frameinfo->ID=%X,frameinfo->DataLen=%d, [%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X]", // recvbuf[0] = frameinfo->ID; // recvbuf[1] = frameinfo->DataLen; // recvbuf[2] = frameinfo->Data[0]; // recvbuf[3] = frameinfo->Data[1]; // recvbuf[4] = frameinfo->Data[2]; // recvbuf[5] = frameinfo->Data[3]; // recvbuf[6] = frameinfo->Data[4]; // recvbuf[7] = frameinfo->Data[5]; // recvbuf[8] = frameinfo->Data[6]; // recvbuf[9] = frameinfo->Data[7]; // //port->m_pTableCtrl->m_pLog->WriteLog(str); // mLog::Info("CAN recv data:{$}\n", recvbuf); // // // // // if (frameinfo->ID == 0x405 && frameinfo->DataLen == 8)//立柱板节点 // { //#pragma region ID405 // // if (frameinfo->Data[1]==1) // { // mLog::Info("recv Column heart beat."); // } // // if (frameinfo->Data[1]==2) // { // //配置信息回复 // int nPanelType = frameinfo->Data[2];//平板选择 // int nAngle = frameinfo->Data[3];//C臂ML0位:角度 // mLog::Info("recv : panel type:{$},C臂ML0位:角度={$}", nPanelType, nAngle); // //port->m_pTableCtrl->m_pLog->WriteLog(str); // } // if (frameinfo->Data[1]==3) // { // //曝光模式回复 // int nExpMode = frameinfo->Data[2]; // int nAECfield = frameinfo->Data[3]; // int nAECDensity = frameinfo->Data[4]; // mLog::Info("recv: exp mode:{$},AEC field={$},AEC density={$}", nExpMode, nAECfield, nAECDensity); // } // if (frameinfo->Data[1] == 4 && frameinfo->Data[2] == 0x61) // { // mLog::Info("recv ANRAN panel ready or not."); // } // // if (frameinfo->Data[2] == 0x10) // { // mLog::Info("recv panel ready status"); // } // if (frameinfo->Data[2] == 0x20) // { // mLog::Info("recv gen ready status"); // } // if (frameinfo->Data[2] == 0x30) // { // mLog::Info("recv exp start"); // } // if (frameinfo->Data[2] == 0x40) // { // mLog::Info("recv exp finished"); // } // if (frameinfo->Data[2] == 0x50) // { // mLog::Info("recv workflow finished."); // } // // //#if 0 // int sid = (int)(frameinfo->Data[2] * 256 + frameinfo->Data[3]); // port->m_pTableCtrl->m_nSID = sid; // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_SID, sid, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC); // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_SID, sid, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE); // // // int _collimatorWsize = (int)(frameinfo->Data[4] * 256 + frameinfo->Data[5]); // int _collimatorHsize = (int)(frameinfo->Data[6] * 256 + frameinfo->Data[7]); // // port->m_pTableCtrl->m_nCollRealWSize = _collimatorWsize; // port->m_pTableCtrl->m_nCollRealHSize = _collimatorHsize; // // CString strlog; // strlog.Format("feedback collimator real size: id=0x7f0, height=%d mm,width=%d mm, sid=%d cm.", _collimatorHsize, _collimatorWsize, sid); // port->m_pTableCtrl->m_pLog->WriteLog(strlog, LOG_INFORMATION); // // int virtual_Wsize = 1; // int virtual_Hsize = 1; // if (port->m_pTableCtrl->m_nZoomMode == 0)//17*17 // { // // virtual_Wsize = int(_collimatorWsize / port->m_pTableCtrl->m_fHcoefficient / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5); // virtual_Hsize = int(_collimatorHsize / port->m_pTableCtrl->m_fVcoefficient / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5); // } // else if (port->m_pTableCtrl->m_nZoomMode == 1)//9*9 // { // // virtual_Wsize = int(_collimatorWsize / port->m_pTableCtrl->m_fHcoefficientZoom1 / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5); // virtual_Hsize = int(_collimatorHsize / port->m_pTableCtrl->m_fVcoefficientZoom1 / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5); // } // strlog.Format("feedback collimator virtual size: id=0x7f0, height=%d cm,width=%d cm", virtual_Hsize, virtual_Wsize); // port->m_pTableCtrl->m_pLog->WriteLog(strlog, LOG_INFORMATION); // // // // if (port->m_pTableCtrl->m_pWnd != nullptr) // { // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, _collimatorWsize + _collimatorHsize * 100, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC); // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, _collimatorWsize + _collimatorHsize * 100, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE); // // } // else // { // port->m_pTableCtrl->m_pLog->WriteLog("port->m_pTableCtrl->m_pWnd == nullptr", LOG_INFORMATION); // } // // //#endif // 0 //#pragma endregion // // } // else if (frameinfo->ID == 0x425)//C臂控制板节点 // { //#pragma region ID425 // // // // if (frameinfo->Data[0]==0) // { // if (frameinfo->Data[1]==0x18) // { // mLog::Info("recv 双电位器错误 or not.Data[2]决定."); // } // if (frameinfo->Data[1]==0x06) // { // int nAngleSignal = frameinfo->Data[2]; // int nAngleValue = frameinfo->Data[3]; // // if (2 == nAngleSignal)//负 // { // nAngleValue *= -1; // } // mLog::Info("recv C 臂旋转角度:{$}", nAngleValue); // // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLL_ANGLE, nAngleValue, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC); // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLL_ANGLE, nAngleValue, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE); // // } // } // if (frameinfo->Data[1]==1) // { // if (frameinfo->Data[1] == 1) // { // mLog::Info("recv C arm heart beat."); // } // // if (frameinfo->Data[1] == 2) // { // int nPrePressLimitValue = frameinfo->Data[2]; // int nTotalPressLimitValue = frameinfo->Data[3]; // mLog::Info("nPrePressLimitValue={$},nTotalPressLimitValue={$}", nPrePressLimitValue, nTotalPressLimitValue); // // } // // if (frameinfo->Data[1] == 3) // { // int nPressType = frameinfo->Data[2]; // int nReleaseType = frameinfo->Data[3]; // mLog::Info("recv:press type={$},release type={$}", nPressType,nReleaseType); // // } // // if (frameinfo->Data[1] == 4) // { // //振栅模式 // int nGridType = frameinfo->Data[2]; // mLog::Info("Grid Type={$}", nGridType); // // } // // // if (frameinfo->Data[1] == 5) // { // int nPressThickness = frameinfo->Data[2]; // int nPressValue = frameinfo->Data[3]; // mLog::Info("recv:nPressThickness={$},nPressValue={$}", nPressThickness, nPressValue); // // } // // if (frameinfo->Data[1] == 6) // { // int nCollLong = frameinfo->Data[2] * 256 + frameinfo->Data[3]; // int nCollCross = frameinfo->Data[4] * 256 + frameinfo->Data[5]; // mLog::Info("recv:nCollLong={$},nCollCross={$}", nCollLong, nCollCross); // // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, nCollLong*100 + nCollCross, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC); // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, nCollLong*100 + nCollCross, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE); // // } // // if (frameinfo->Data[1] == 7) // { // int nFilter = frameinfo->Data[2]; // //port->m_pTableCtrl->m_nFilterSet = nFilter; // mLog::Info("recv:Filter is {$},(1:Mo,2Rh)", nFilter); // // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_FILTER, port->m_pTableCtrl->m_nFilterSet, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC); // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_FILTER, port->m_pTableCtrl->m_nFilterSet, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE); // // } // // if (frameinfo->Data[1] == 12) // { // if (frameinfo->Data[2] == 0) // { // mLog::Info("recv 无错误"); // } // // if (frameinfo->Data[2] == 1) // { // mLog::Info("recv:压迫其初始化未到位 "); // } // // if (frameinfo->Data[2] == 2) // { // mLog::Info("recv 压迫器上限位错误"); // } // // if (frameinfo->Data[2] == 3) // { // mLog::Info("recv 过压错误"); // } // // if (frameinfo->Data[2] == 4) // { // mLog::Info("recv 过流错误"); // } // // if (frameinfo->Data[2] == 5) // { // mLog::Info("recv 自动释放未完成"); // } // // if (frameinfo->Data[2] == 6) // { // mLog::Info("recv 限束器初始化成功"); // } // // if (frameinfo->Data[2] == 7) // { // mLog::Info("recv 压迫释放完成"); // } // } // // if (frameinfo->Data[1]==0x19) // { // int nPressBoardType = frameinfo->Data[2]; // mLog::Info("recv:nPressBoardType={$}", nPressBoardType); // } // // } // //#pragma endregion // } // else if (frameinfo->ID == 0x485)//振动栅节点 // { //#pragma region ID485 // // //0x485 故障报文 4 3 故障状态:0.正确 ;1.初始化错误; 振栅板发送给图像 // if (frameinfo->Data[0] ==4) // { // if (frameinfo->Data[1] == 3) // { // int nStatus = frameinfo->Data[2]; // mLog::Info("recv:Grid Status={$}", nStatus); // } // // } //#pragma endregion // // } // // } // } // return 0; //} // // //#if 0 // ////not use // //bool CCANPort::CAN_NoDelayTransmit(CString strData, CString strFrmID, byte RomoteFlag, byte ExternFlag, byte type) //{ // VCI_CAN_OBJ frameinfo; // char szFrameID[9]; // BYTE FrameID[4] = { 0,0,0,0 }; // memset(szFrameID, '0', 9); // unsigned char Data[8]; // char szData[25]; // BYTE datalen = 0; // //帧ID占4个字节,用16进制表示:0x21A09878,字符表示长度为8, // if (strFrmID.GetLength() > 8) // { // return FALSE; // } // //发送数据,16进制表示,每个数无空格, 即:"01A1098070000000",最多16个数 // if (strData.GetLength() > 16) // { // return FALSE; // } // //发送帧类型:标准,扩展 // if (ExternFlag == 0)//标准帧 // { // if (strData.GetLength() % 2 == 1)//。。。? // { // return false; // } // } // //copy 到低位 // memcpy(&szFrameID[8 - strFrmID.GetLength()], (LPCTSTR)strFrmID, strFrmID.GetLength()); // strtodata((unsigned char*)szFrameID, FrameID, 4, 0); // //发送数据是16进制表示,每个数据之间有空格 // datalen = (strData.GetLength()) / 2;//实际个数 // strcpy(szData, (LPCTSTR)strData); // strtodata((unsigned char*)szData, Data, datalen, 0); // // frameinfo.DataLen = datalen; // memcpy(&frameinfo.Data, Data, datalen); // // frameinfo.RemoteFlag = RomoteFlag;//数据帧/远程帧 // frameinfo.ExternFlag = ExternFlag; // // frameinfo.TimeFlag = 0; // frameinfo.TimeStamp = 0; // // //帧类型约束帧ID的实际占有位数 // if (frameinfo.ExternFlag == 1) // { // frameinfo.ID = ((DWORD)FrameID[0] << 24) + ((DWORD)FrameID[1] << 16) + ((DWORD)FrameID[2] << 8) + // ((DWORD)FrameID[3]); // } // else // { // frameinfo.ID = ((DWORD)FrameID[2] << 8) + ((DWORD)FrameID[3]); // } // frameinfo.SendType = type;//发送格式:单发。。 // // //给文件内写数据! // //fprintf(m_p50RF_RAD->fp,strData+"\n"); // // //if(1 == VCI_Transmit(m_devtype,m_devind,m_cannum,&frameinfo,1)) // if (1 == m_pCANEx->Transmit(m_devind, m_cannum, &frameinfo, 1)) // return TRUE; // else // { // return FALSE; // } //} // //bool CCANPort::CAN_Read(bool& bRemoteFlag, bool& bExternFlag, CString strFrmID, CString& strData, CString& strTimeStamp) //{ // // VCI_CAN_OBJ frameinfo[50]; // VCI_ERR_INFO errinfo; // int len = 1; // int i = 0; // CString str, tmpstr; // strTimeStamp = ""; // // len = m_pCANEx->Receive(m_devind, m_cannum, frameinfo, 50, 200); // if (len <= 0) // { // m_pCANEx->ReadErrInfo(m_devind, m_cannum, &errinfo); // return false; // } // else // { // for (i = 0; i < len; i++) // { // if (frameinfo[i].TimeFlag == 1) // strTimeStamp.Format("%08x ", frameinfo[i].TimeStamp); // // strFrmID.Format("%08x ", frameinfo[i].ID); // // bRemoteFlag = (frameinfo[i].RemoteFlag == 1); // // bExternFlag = (frameinfo[i].ExternFlag == 1); // // if (frameinfo[i].RemoteFlag == 0) // { // if (frameinfo[i].DataLen > 8) // frameinfo[i].DataLen = 8; // for (int j = 0; j < frameinfo[i].DataLen; j++) // { // tmpstr.Format("%02x ", frameinfo[i].Data[j]); // strData += tmpstr; // } // } // } // // } // return true; // //} // //void CCANPort::CAN_GetBordInfo(DWORD& DeviceType, DWORD& DeviceInd) //{ // //} //#endif // 0