Aquacomputer mps (#128)

Thanks to @fboldog
This commit is contained in:
Ferenc Boldog
2019-10-01 21:29:36 +02:00
committed by Phyxion
parent 963ab50dda
commit b0d4beed26
4 changed files with 120 additions and 1 deletions
+1 -1
View File
@@ -88,7 +88,7 @@ namespace LibreHardwareMonitor.UI
case SensorType.Load: Format = "{0:F1} %"; break;
case SensorType.Temperature: Format = "{0:F1} °C"; break;
case SensorType.Fan: Format = "{0:F0} RPM"; break;
case SensorType.Flow: Format = "{0:F0} L/h"; break;
case SensorType.Flow: Format = "{0:F1} L/h"; break;
case SensorType.Control: Format = "{0:F1} %"; break;
case SensorType.Level: Format = "{0:F1} %"; break;
case SensorType.Power: Format = "{0:F1} W"; break;
@@ -38,6 +38,16 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
_hardware.Add(device);
break;
}
case 0xf003:
{
var device = new MPS(dev, settings);
_report.AppendLine($"Device name: {productName}");
_report.AppendLine($"Firmware version: {device.FirmwareVersion}");
_report.AppendLine($"{device.Status}");
_report.AppendLine();
_hardware.Add(device);
break;
}
default:
{
_report.AppendLine($"Unknown Hardware PID: {dev.Attributes.ProductHexId} Name: {productName}");
@@ -0,0 +1,108 @@
// Mozilla Public License 2.0
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Copyright (C) LibreHardwareMonitor and Contributors
// All Rights Reserved
using System;
using HidLibrary;
namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
{
internal class MPS : Hardware
{
#region USB
private HidDevice _device;
private byte[] _rawData;
public UInt16 FirmwareVersion { get; private set; }
#endregion
private readonly Sensor _pumpFlow;
private readonly Sensor[] _temperatures = new Sensor[2];
private const byte MPS_REPORT_ID = 0x2;
private UInt16 _externalTemperature = 0;
private sealed class MPSDataIndexes
{
public const int PumpFlow = 35;
public const int ExternalTemperature = 43;
public const int InternalWaterTemperature = 45;
}
public MPS(HidDevice dev, ISettings settings) : base("MPS", new Identifier(dev.DevicePath), settings)
{
_device = dev;
do
{
_device.ReadFeatureData(out _rawData, MPS_REPORT_ID);
} while (_rawData[0] != MPS_REPORT_ID);
Name = $"MPS";
FirmwareVersion = ExtractFirmwareVersion();
_temperatures[0] = new Sensor("External", 0, SensorType.Temperature, this, new ParameterDescription[0], settings);
ActivateSensor(_temperatures[0]);
_temperatures[1] = new Sensor("Internal Water", 1, SensorType.Temperature, this, new ParameterDescription[0], settings);
ActivateSensor(_temperatures[1]);
_pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, new ParameterDescription[0], settings);
ActivateSensor(_pumpFlow);
}
public override HardwareType HardwareType
{
get
{
return HardwareType.AquaComputer;
}
}
public string Status
{
get
{
FirmwareVersion = ExtractFirmwareVersion();
if (FirmwareVersion < 1012)
{
return $"Status: Untested Firmware Version {FirmwareVersion}! Please consider Updating to Version 1012";
}
return "Status: OK";
}
}
public override void Close()
{
_device.CloseDevice();
base.Close();
}
public override void Update()
{
_device.ReadFeatureData(out _rawData, MPS_REPORT_ID);
if (_rawData[0] != MPS_REPORT_ID)
return;
_pumpFlow.Value = BitConverter.ToUInt16(_rawData, MPSDataIndexes.PumpFlow) / 10f;
_externalTemperature = BitConverter.ToUInt16(_rawData, MPSDataIndexes.ExternalTemperature);
//sensor reading returns Int16.MaxValue (32767), when not connected
if (_externalTemperature != Int16.MaxValue)
{
_temperatures[0].Value = _externalTemperature / 100f;
}
else
_temperatures[0].Value = null;
_temperatures[1].Value = BitConverter.ToUInt16(_rawData, MPSDataIndexes.InternalWaterTemperature) / 100f;
}
private ushort ExtractFirmwareVersion()
{
return BitConverter.ToUInt16(_rawData, 3);
}
}
}
@@ -33,6 +33,7 @@
<Compile Include="Hardware\Control.cs" />
<Compile Include="Hardware\Controller\AquaComputer\AquaComputerGroup.cs" />
<Compile Include="Hardware\Controller\AquaComputer\AquastreamXT.cs" />
<Compile Include="Hardware\Controller\AquaComputer\MPS.cs" />
<Compile Include="Hardware\Controller\Heatmaster\Heatmaster.cs" />
<Compile Include="Hardware\Controller\Heatmaster\HeatmasterGroup.cs" />
<Compile Include="Interop\Ftd2xx.cs" />