48 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|