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