/*! * \brief 功能概述 响应readyRead(QByteArray)信号,解析收到的报文函数 * \param 参数描述 Respond_是收到的报文 * \return 返回值描述 无 * \author zzy * \date 2015/5/25 */ void CProtocolDLT_645_07::ProcessRespond(QByteArray Respond_) { // qDebug()<<Respond_.toHex()<<"打印收到的信息"; QMutexLocker locker(&m_mutexProcessData); m_bufferReceive.AppendData(Respond_.data(),Respond_.count()); QByteArray array((char *)m_bufferReceive.GetBuffer(0),m_bufferReceive.GetInfoSize()); qDebug()<<"array.toHex()"<<array.toHex(); if (m_bufferReceive.GetInfoSize() < MinFrameLength) return ; // ShowMessage(1,m_arrayRespondBuffer.toHex()); // DecodeReceive(m_arrayRespondBuffer); for(int nStart=0; nStart<=m_bufferReceive.GetInfoSize() - MinFrameLength; ++nStart) { int nFrameLength = IsAFrame(m_bufferReceive.GetBuffer(nStart),m_bufferReceive.GetInfoSize()-nStart); if(nFrameLength) { m_Response.SetData(m_bufferReceive.GetBuffer(nStart),nFrameLength); QByteArray frame; if (nStart != 0) { frame = QByteArray((char*)m_bufferReceive.GetBuffer(0),nStart); ShowMessage(SHOWMESSAGE_TYPE_DEBUG,frame.toHex().toUpper()); } frame = QByteArray((char*)m_Response.GetBuffer(0),m_Response.GetInfoSize()); ShowMessage(SHOWMESSAGE_TYPE_RECEIVE,frame.toHex().toUpper()); m_bufferReceive.Fifo(nStart+nFrameLength); ProcessRespond(m_Response); // ProcessResponse(m_CDTResponse); nStart=-1;//重新再来 } } if(m_bufferReceive.GetInfoSize()>MAX_FRAME) { m_bufferReceive.SetInfoSize(0); Q_ASSERT(false); } }
bool CProtocolBase::SetInitLink(ChannelType nChannelType_, const QDomElement &MainPort_) { #if defined(TIAOSHI) m_CGI_CLinkLib.setFileName("Protocol/CGI_CLINKLib_d");//文件名 #else m_CGI_CLinkLib.setFileName("Protocol/CGI_CLINKLib");//文件名 #endif if (m_CGI_CLinkLib.load()) { qDebug()<<"DLL load is OK!"<<m_CGI_CLinkLib.fileName(); typedef CGI_CLINKI * (DLLAPI_CreateDriver)(QObject *parent );//初始化协议 DLLAPI_CreateDriver *pCreateDriver = (DLLAPI_CreateDriver *)m_CGI_CLinkLib.resolve("CreateCGI_CLINKI");//获取 用于获取类对象的全局函数 if (pCreateDriver) { qDebug()<<"Link to Function is OK!"<<m_CGI_CLinkLib.fileName(); m_pLink = pCreateDriver(this);///< 库中导出类的初始化 if (m_pLink != NULL) { connect(m_pLink,SIGNAL(ReadyRead(QByteArray)),this,SLOT(ProcessRespond(QByteArray))); connect(m_pLink,SIGNAL(signalConnect(bool)),this,SLOT(slotConnect(bool))); return m_pLink->CGI_SetInitLink(nChannelType_,MainPort_); }else {