Files
laatzen/Common/OmniPlus/Connections/Messages/UI1236Message.cs
T

48 lines
1.3 KiB
C#

using OmniPlus.Connection;
using System;
namespace OmniPlus.Connections.Messages
{
public class UI1236Message : SerialPortMessage
{
public const int MIN_LENGTH = 5;
public const byte START_BYTE = 0x0D;
public UI1236Message(byte[] bytes, bool full = false) : base(bytes, full)
{
}
protected override byte[] CreateMessage(byte[] payload)
{
var length = payload.Length + MIN_LENGTH;
var evenOffset = length % 2;
length += evenOffset;
var index = 0;
var message = new byte[length];
message[index++] = START_BYTE;
message[index++] = (byte)(length - 3);
message[index++] = 0x08; // TODO: control byte
payload.CopyTo(message, index);
var checksum = message.CalculateCheckSum16(length);
message[length - evenOffset - 2] = checksum[1];
message[length - evenOffset - 1] = checksum[0];
return message;
}
protected override byte[] ParseMessage(byte[] message)
{
var payloadLength = message[1] - (message.Length - message[1]);
var payload = new byte[payloadLength];
Array.Copy(message, 3, payload, 0, payloadLength);
return payload;
}
}
}