gx_dlms 的杂乱记录


DLMS_ERROR_CODE_FALSE


W3Jehpnc543MuwUz6ZWDshy5kwbbE9Cw

CGXDLMSClient::GetData(CGXByteBuffer& reply, CGXReplyData& data)
    CGXDLMS::GetData(m_Settings, reply, data, NULL)
    
        // hdlc路线,这里的reply 是原始接受的数据,data 要返回的CGXReplyData
        GetHdlcData(settings.IsServer(), settings, reply, data, frame, notify))
            帧类型 U/I/S
            address
            crc
        //tcp路线
        GetTcpData
        
        
        if (!target->IsComplete())
            return DLMS_ERROR_CODE_FALSE;
        GetDataFromFrame(reply, *target, settings.GetInterfaceType() == DLMS_INTERFACE_TYPE_HDLC);
            //提取具体的apdu数据
        GetPdu(settings, *target)
            //解析出具体的apdu的头
            case    HandleGetResponse
                        // 把数据提取出来
                    aare
                    ....
            GetValueFromData

// ua解析
ParseUAResponse
    CGXDLMS::ParseSnrmUaResponse(data, &m_Settings.GetLimits());
    m_Settings.SetConnected(DLMS_CONNECTION_STATE_HDLC);
// aare
ParseAAREResponse
    CGXAPDU::ParsePDU(m_Settings, m_Settings.GetCipher(),reply, result, sd, NULL)) != 0)

流的处理,数据接受完整的处理与判断


m_Parser->SNRMRequest
    根据类型和数据 构造 hdlc的数据帧
     CGXDLMS::GetHdlcFrame
ReadDataBlock
        ReadDLMSPacket
            write(m_hComPort, data.GetData(), len);
            Read(0x7E, bb)
            m_Parser->GetData(bb, reply, notify)
                GetHdlcData // 从hdlc 得到数据
                GetDataFromFrame
            


GetLNPdu   组合  获得 E6 E6 00 开始的数据



GXHelpers::GetData
int CGXDLMSTranslator::DataToXml(CGXByteBuffer& data, std::string& xml)
GetDataTypes
数据读取 
m_Parser->Read 组数据
ReadDataBlock
    ReadDLMSPacket  发数据
UpdateValue解析数据 
        
if 0==GetData
    if(m_Complete==flase)
            
    else(m_Complete==true)
    
    有个positon 指示了当前解析的位置

一些有用的定义
DLMS_COMMAND_SNRM  表示了具体的帧类型

faq
    GetHdlcData 里面有些回退操作
待优化
GetHDLCAddress
    可以在size=5时候退出
GetHdlcData 应先检查crc 再去做帧类型检查    
    
    
关于构造和析构
    

猜你喜欢

转载自www.cnblogs.com/zongzi10010/p/11991501.html