Files
laatzen/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Models/EregisterAvailableParametersParser.cs
T

126 lines
3.3 KiB
C#

namespace Common.Hardware.WaterMeter.eRegister.Models
{
using System.Collections.Generic;
public class EregisterAvailableParametersParser : List<byte>
{
public EregisterAvailableParametersParser(byte[] bytes)
{
var bytesLength = bytes.Length;
var available = default(bool);
var cmdLength = default(int);
var index = default(int);
while (bytesLength > index)
{
var cmd = bytes[index++];
_ = EregisterAvailableParametersParser.cmdLengths.TryGetValue(cmd, out cmdLength);
_ = cmdAvailableAfterSeal.TryGetValue(cmd, out available);
if (available)
{
this.Add(cmd);
}
for (var i = 0; i < cmdLength; i++)
{
if (available)
{
this.Add(bytes[index]);
}
index++;
}
}
}
public static implicit operator byte[] (EregisterAvailableParametersParser parser) => parser.ToArray();
private static readonly IDictionary<byte, bool> cmdAvailableAfterSeal = new Dictionary<byte, bool>
{
{ 0, true },
{ 1, false },
{ 2, true },
{ 3, false },
{ 4, true },
{ 5, true },
{ 6, true },
{ 7, true },
{ 10, true },
{ 11, true },
{ 12, false },
{ 14, true },
{ 16, true },
{ 17, true },
{ 19, true },
{ 20, true },
{ 21, true },
{ 22, false },
{ 31, true },
{ 32, true },
{ 33, true },
{ 48, false },
{ 49, false },
{ 50, true },
{ 51, true },
{ 52, true },
{ 53, true },
{ 54, false },
{ 64, true },
{ 65, true },
{ 66, true },
{ 67, true },
{ 68, true },
{ 69, true },
{ 72, true },
{ 73, true },
{ 80, true },
{ 108, true },
{ 146, false },
};
private static readonly IDictionary<byte, int> cmdLengths = new Dictionary<byte, int>
{
{ 0, 1 },
{ 1, 1 },
{ 2, 1 },
{ 3, 1 },
{ 4, 1 },
{ 5, 1 },
{ 6, 1 },
{ 7, 1 },
{ 10, 1 },
{ 11, 1 },
{ 12, 1 },
{ 14, 1 },
{ 16, 2 },
{ 17, 2 },
{ 19, 2 },
{ 20, 2 },
{ 21, 2 },
{ 22, 2 },
{ 31, 2 },
{ 32, 3 },
{ 33, 2 },
{ 48, 4 },
{ 49, 4 },
{ 50, 4 },
{ 51, 4 },
{ 52, 4 },
{ 53, 4 },
{ 54, 4 },
{ 64, 5 },
{ 65, 5 },
{ 66, 5 },
{ 67, 5 },
{ 68, 6 },
{ 69, 6 },
{ 72, 7 },
{ 73, 7 },
{ 80, 9 },
{ 108, 16 },
{ 146, 16 },
};
}
}