126 lines
3.3 KiB
C#
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 },
|
|
};
|
|
}
|
|
}
|