void CProtocolCDT::ProcessRespond(QByteArray data_) { m_bufferReceive.AppendData(data_.data(),data_.count()); QByteArray array((char *)m_bufferReceive.GetBuffer(0),m_bufferReceive.GetInfoSize()); qDebug()<<"array.toHex()"<<array.toHex(); if (m_bufferReceive.GetInfoSize() < MinFrameLength) return ; for(int nStart=0; nStart<=m_bufferReceive.GetInfoSize() - MinFrameLength; ++nStart) { int nFrameLength = IsAFrame(m_bufferReceive.GetBuffer(nStart),m_bufferReceive.GetInfoSize()-nStart); if(nFrameLength) { m_CDTResponse.SetData(m_bufferReceive.GetBuffer(nStart),nFrameLength); m_bufferReceive.Fifo(nStart+nFrameLength); ProcessResponse(m_CDTResponse); nStart=-1;//重新再来 } } if(m_bufferReceive.GetInfoSize()>MAX_FRAME) { m_bufferReceive.SetInfoSize(0); // Q_ASSERT(false); } }
/*! * \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); } }