Innovenergy_trunk/csharp/lib/Devices/EmuMeter/Conversions.cs

41 lines
1.2 KiB
C#

using InnovEnergy.Lib.Protocols.Modbus.Conversions;
using InnovEnergy.Lib.Utils;
namespace InnovEnergy.Lib.Devices.EmuMeter;
public static class Conversions
{
// TODO: integrate into ModbusRegisters
public static IReadOnlyList<Single> ToSingles(this ModbusRegisters regs)
{
return regs
.Chunk(2)
.Select(c => c.Reverse().SelectMany(BitConverter.GetBytes).ToArray())
.Select(d => BitConverter.ToSingle(d))
.ToList();
}
public static IReadOnlyList<Decimal> ToDecimals(this ModbusRegisters regs)
{
return regs
.Chunk(2)
.Select(c => c.Reverse().SelectMany(BitConverter.GetBytes).ToArray())
.Select(d => BitConverter.ToSingle(d))
.Select(d => d.ConvertTo<Decimal>())
.ToList();
}
// ReSharper disable once InconsistentNaming
public static IReadOnlyList<UInt64> ToUInt64s(this ModbusRegisters regs)
{
return regs
.SelectMany(d => BitConverter.GetBytes(d).Reverse())
.Chunk(8)
.Select(c => c.Reverse().ToArray())
.Select(d => BitConverter.ToUInt64(d))
.ToList();
}
}