-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathByteExtensions.cs
42 lines (39 loc) · 1.2 KB
/
ByteExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public enum PacketType
{
PD,
BMS,
EMS,
Inverter,
Unknown
}
public static class ByteExtensions
{
public static byte[] GetHeader(this byte[] data)
{
var header = new byte[18];
Array.Copy(data, 0, header, 0, header.Length);
return header;
}
public static byte[] DecodePayload(this byte[] data)
{
var size = BitConverter.ToInt16(data, 2);
var payload = new byte[size];
Array.Copy(data, 18, payload, 0, size);
payload = payload.Select(b => (byte)(b ^ data[6])).ToArray();
return payload;
}
public static PacketType GetPacketType(this byte[] data)
{
if (data[12] == 2 && data[14] == 32 && data[15] == 2)
return PacketType.PD;
if (data[12] == 3 && data[14] == 32 && data[15] == 2)
return PacketType.EMS;
if (data[12] == 4 && data[14] == 32 && data[15] == 2)
return PacketType.Inverter;
if ((data[12] == 3 && data[14] == 32 && data[15] == 50) ||
(data[12] == 6 && data[14] == 32 && data[15] == 2) ||
(data[12] == 6 && data[14] == 32 && data[15] == 50))
return PacketType.BMS;
return PacketType.Unknown;
}
}