public byte[] GetBytes(int sequenceNumber)
{
var data = GetPayloadBytes();
var dataLength = data != null ? data.Length : 0;
var packetLength = dataLength + CommandHeaderLength + ChecksumLength;
var buffer = new byte[packetLength];
var checksum = (byte) 0;
buffer[IndexStart1] = CommandPrefix;
buffer[IndexStart2] = CommandPrefix;
var deviceId = DeviceId;
checksum = (byte) (checksum + deviceId);
buffer[IndexDeviceId] = deviceId;
var command = CommandId;
checksum = (byte) (checksum + command);
buffer[IndexCommand] = command;
checksum = (byte) (checksum + sequenceNumber);
buffer[IndexCommandSequenceNo] = (byte) (sequenceNumber);
var responseLength = (byte) (dataLength + 1);
checksum = (byte) (checksum + responseLength);
buffer[IndexCommandDataLength] = responseLength;
// Check if we need to calculate the checksum for the data we have added
if (data != null)
{
// Calculate the checksum for the data (also add the data to the array)
for (var i = 0; i < dataLength; i++)
{
buffer[(i + CommandHeaderLength)] = data[i];
checksum = (byte) (checksum + data[i]);
}
}
buffer[(packetLength - ChecksumLength)] = (byte) (checksum ^ 0xFFFFFFFF);
return buffer;
}