internal static byte[] ReceiverReady(GXDLMSSettings settings, RequestTypes type)
{
if (type == RequestTypes.None)
{
throw new ArgumentException("Invalid receiverReady RequestTypes parameter.");
}
// Get next frame.
if ((type & RequestTypes.Frame) != 0)
{
byte id = settings.ReceiverReady();
return GetHdlcFrame(settings, id, null);
}
Command cmd;
if (settings.UseLogicalNameReferencing)
{
if (settings.IsServer)
{
cmd = Command.GetResponse;
}
else
{
cmd = Command.GetRequest;
}
}
else
{
if (settings.IsServer)
{
cmd = Command.ReadResponse;
}
else
{
cmd = Command.ReadRequest;
}
}
// Get next block.
GXByteBuffer bb = new GXByteBuffer(6);
if (settings.UseLogicalNameReferencing)
{
bb.SetUInt32(settings.BlockIndex);
}
else
{
bb.SetUInt16((UInt16)settings.BlockIndex);
}
settings.IncreaseBlockIndex();
byte[][] reply;
if (settings.UseLogicalNameReferencing)
{
GXDLMSLNParameters p = new GXDLMSLNParameters(settings, cmd, (byte)GetCommandType.NextDataBlock, bb, null, 0xff);
reply = GXDLMS.GetLnMessages(p);
}
else
{
GXDLMSSNParameters p = new GXDLMSSNParameters(settings, cmd, 1, (byte)VariableAccessSpecification.BlockNumberAccess, bb, null);
reply = GXDLMS.GetSnMessages(p);
}
return reply[0];
}