internal static byte[] GetWrapperFrame(GXDLMSSettings settings, GXByteBuffer data)
{
GXByteBuffer bb = new GXByteBuffer();
// Add version.
bb.SetUInt16(1);
if (settings.IsServer)
{
bb.SetUInt16((UInt16)settings.ServerAddress);
bb.SetUInt16((UInt16)settings.ClientAddress);
}
else
{
bb.SetUInt16((UInt16)settings.ClientAddress);
bb.SetUInt16((UInt16)settings.ServerAddress);
}
if (data == null)
{
// Data length.
bb.SetUInt16(0);
}
else
{
// Data length.
bb.SetUInt16((UInt16)data.Size);
// Data
bb.Set(data);
}
//Remove sent data in server side.
if (settings.IsServer)
{
if (data.Size == data.Position)
{
data.Clear();
}
else
{
data.Move(data.Position, 0, data.Size - data.Position);
data.Position = 0;
}
}
return bb.Array();
}