private GXByteBuffer GetObjects(GXDLMSSettings settings, ValueEventArgs e)
{
GXByteBuffer data = new GXByteBuffer();
//Add count only for first time.
if (settings.Index == 0)
{
settings.Count = (UInt16)ObjectList.Count;
data.SetUInt8((byte)DataType.Array);
GXCommon.SetObjectCount(ObjectList.Count, data);
}
ushort pos = 0;
foreach (GXDLMSObject it in ObjectList)
{
++pos;
if (!(pos <= settings.Index))
{
data.SetUInt8((byte)DataType.Structure);
data.SetUInt8((byte)4); //Count
GXCommon.SetData(settings, data, DataType.UInt16, it.ObjectType); //ClassID
GXCommon.SetData(settings, data, DataType.UInt8, it.Version); //Version
GXCommon.SetData(settings, data, DataType.OctetString, it.LogicalName); //LN
GetAccessRights(settings, it, data); //Access rights.
++settings.Index;
//If PDU is full.
if (!e.SkipMaxPduSize && data.Size >= settings.MaxPduSize)
{
break;
}
}
}
return data;
}