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 再去做帧类型检查	
	
	
关于构造和析构
	
原文地址:https://www.cnblogs.com/zongzi10010/p/11991501.html