Example #1
0
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);
    }
}