public int GenerateBinaryImage(byte[] buffer, int startIndex)
{
int length = BinaryLength;
buffer.ValidateParameters(startIndex, length);
byte[] bytes;
int size, index = startIndex;
string source = Key.Source.ToNonNullString();
string tagName = TagName.ToNonNullString();
// Encode key ID
BigEndian.CopyBytes(Key.ID, buffer, index);
index += 4;
// Encode key source string length
bytes = m_encoding.GetBytes(source);
size = bytes.Length;
BigEndian.CopyBytes(size, buffer, index);
index += 4;
// Encode key source string
if (size > 0)
{
Buffer.BlockCopy(bytes, 0, buffer, index, size);
index += size;
}
// Encode signal ID
EndianOrder.BigEndian.CopyBytes(ID, buffer, index);
index += 16;
// Encode tag name string length
bytes = m_encoding.GetBytes(tagName);
size = bytes.Length;
BigEndian.CopyBytes(size, buffer, index);
index += 4;
// Encode tag name string
if (size > 0)
{
Buffer.BlockCopy(bytes, 0, buffer, index, size);
index += size;
}
// Encode value
BigEndian.CopyBytes(Value, buffer, index);
index += 8;
// Encode adder
BigEndian.CopyBytes(Adder, buffer, index);
index += 8;
// Encode multiplier
BigEndian.CopyBytes(Multiplier, buffer, index);
index += 8;
// Encode timestamp
BigEndian.CopyBytes((long)Timestamp, buffer, index);
index += 8;
// Encode state flags
BigEndian.CopyBytes((uint)StateFlags, buffer, index);
return length;
}