public byte[] XmlToPdu(string xml)
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
GXDLMSXmlSettings s = new GXDLMSXmlSettings(OutputType, Hex, ShowStringAsHex, tagsByName);
ReadAllNodes(doc, s);
GXByteBuffer bb = new GXByteBuffer();
GXDLMSLNParameters ln;
GXDLMSSNParameters sn;
switch (s.command)
{
case Command.InitiateRequest:
case Command.InitiateResponse:
break;
case Command.ReadRequest:
case Command.WriteRequest:
case Command.ReadResponse:
case Command.WriteResponse:
sn = new GXDLMSSNParameters(s.settings, s.command, s.count,
s.requestType, s.attributeDescriptor, s.data);
GXDLMS.GetSNPdu(sn, bb);
break;
case Command.GetRequest:
case Command.GetResponse:
case Command.SetRequest:
case Command.SetResponse:
case Command.MethodRequest:
case Command.MethodResponse:
ln = new GXDLMSLNParameters(s.settings, s.command, s.requestType,
s.attributeDescriptor, s.data, 0xff);
GXDLMS.GetLNPdu(ln, bb);
break;
case Command.GloGetRequest:
case Command.GloGetResponse:
case Command.GloSetRequest:
case Command.GloSetResponse:
case Command.GloMethodRequest:
case Command.GloMethodResponse:
case Command.GloReadRequest:
case Command.GloWriteRequest:
case Command.GloReadResponse:
case Command.GloWriteResponse:
bb.SetUInt8((byte)s.command);
GXCommon.SetObjectCount(s.data.Size, bb);
bb.Set(s.data);
break;
case Command.Rejected:
break;
case Command.Snrm:
s.settings.IsServer = false;
bb.Set(GXDLMS.GetHdlcFrame(s.settings, (byte)Command.Snrm, null));
break;
case Command.Ua:
break;
case Command.Aarq:
case Command.GloInitiateRequest:
GXAPDU.GenerateAarq(s.settings, s.settings.Cipher, s.data, bb);
break;
case Command.Aare:
case Command.GloInitiateResponse:
GXAPDU.GenerateAARE(s.settings, bb, s.result, s.diagnostic, s.settings.Cipher, s.data);
break;
case Command.DisconnectRequest:
break;
case Command.ReleaseRequest:
bb.SetUInt8((byte)s.command);
bb.SetUInt8(0);
break;
case Command.ReleaseResponse:
bb.SetUInt8((byte)s.command);
//Len
bb.SetUInt8(3);
//BerType
bb.SetUInt8(BerType.Context);
//Len.
bb.SetUInt8(1);
bb.SetUInt8(s.reason);
break;
case Command.ConfirmedServiceError:
break;
case Command.ExceptionResponse:
break;
case Command.GeneralBlockTransfer:
break;
case Command.AccessRequest:
ln = new GXDLMSLNParameters(s.settings, s.command, s.requestType,
s.attributeDescriptor, s.data, 0xff);
GXDLMS.GetLNPdu(ln, bb);
break;
case Command.AccessResponse:
ln = new GXDLMSLNParameters(s.settings, s.command, s.requestType,
s.attributeDescriptor, s.data, 0xff);
GXDLMS.GetLNPdu(ln, bb);
break;
case Command.DataNotification:
ln = new GXDLMSLNParameters(s.settings, s.command, s.requestType,
s.attributeDescriptor, s.data, 0xff);
ln.time = s.time;
GXDLMS.GetLNPdu(ln, bb);
break;
case Command.GloGeneralCiphering:
break;
case Command.GloEventNotificationRequest:
break;
default:
case Command.None:
throw new ArgumentException("Invalid command.");
}
return bb.Array();
}