@@ -5,7 +5,7 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using HidLibrary;
|
||||
using HidSharp;
|
||||
|
||||
namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
{
|
||||
@@ -19,13 +19,12 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
_report.AppendLine("AquaComputer Hardware");
|
||||
_report.AppendLine();
|
||||
|
||||
foreach (HidDevice dev in HidDevices.Enumerate(0x0c70))
|
||||
foreach (HidDevice dev in DeviceList.Local.GetHidDevices(0x0c70))
|
||||
{
|
||||
dev.ReadProduct(out byte[] productNameBytes);
|
||||
string productName = Encoding.Unicode.GetString(productNameBytes).Replace("\0", string.Empty);
|
||||
string productName = dev.GetProductName();
|
||||
productName = productName.Substring(0, 1).ToUpper() + productName.Substring(1);
|
||||
|
||||
switch (dev.Attributes.ProductId)
|
||||
switch (dev.ProductID)
|
||||
{
|
||||
case 0xf0b6:
|
||||
{
|
||||
@@ -50,7 +49,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
}
|
||||
default:
|
||||
{
|
||||
_report.AppendLine($"Unknown Hardware PID: {dev.Attributes.ProductHexId} Name: {productName}");
|
||||
_report.AppendLine($"Unknown Hardware PID: {dev.ProductID} Name: {productName}");
|
||||
_report.AppendLine();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using HidLibrary;
|
||||
using HidSharp;
|
||||
|
||||
namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
{
|
||||
@@ -16,58 +16,63 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
|
||||
internal sealed class AquastreamXT : Hardware
|
||||
{
|
||||
private readonly HidDevice _device;
|
||||
private readonly Sensor _fanControl, _pumpPower, _pumpFlow;
|
||||
private readonly Sensor _fanControl;
|
||||
private readonly Sensor[] _frequencies = new Sensor[2];
|
||||
private readonly Sensor _pumpFlow;
|
||||
private readonly Sensor _pumpPower;
|
||||
private readonly byte[] _rawData = new byte[64];
|
||||
private readonly Sensor[] _rpmSensors = new Sensor[2];
|
||||
private readonly HidStream _stream;
|
||||
private readonly Sensor[] _temperatures = new Sensor[3];
|
||||
private readonly Sensor[] _voltages = new Sensor[2];
|
||||
private byte[] _rawData;
|
||||
|
||||
public AquastreamXT(HidDevice dev, ISettings settings) : base("Aquastream XT", new Identifier(dev.DevicePath), settings)
|
||||
{
|
||||
_device = dev;
|
||||
do
|
||||
if (dev.TryOpen(out _stream))
|
||||
{
|
||||
_device.ReadFeatureData(out _rawData, 0x4);
|
||||
do
|
||||
{
|
||||
_rawData[0] = 0x4;
|
||||
_stream.GetFeature(_rawData);
|
||||
}
|
||||
while (_rawData[0] != 0x4);
|
||||
|
||||
Name = $"Aquastream XT {Variant}";
|
||||
FirmwareVersion = BitConverter.ToUInt16(_rawData, 50);
|
||||
|
||||
_temperatures[0] = new Sensor("External Fan VRM", 0, SensorType.Temperature, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_temperatures[0]);
|
||||
_temperatures[1] = new Sensor("External", 1, SensorType.Temperature, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_temperatures[1]);
|
||||
_temperatures[2] = new Sensor("Internal Water", 2, SensorType.Temperature, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_temperatures[2]);
|
||||
|
||||
_voltages[0] = new Sensor("External Fan", 1, SensorType.Voltage, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_voltages[0]);
|
||||
_voltages[1] = new Sensor("Pump", 2, SensorType.Voltage, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_voltages[1]);
|
||||
|
||||
_pumpPower = new Sensor("Pump", 0, SensorType.Power, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_pumpPower);
|
||||
|
||||
_pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_pumpFlow);
|
||||
|
||||
_rpmSensors[0] = new Sensor("External Fan", 0, SensorType.Fan, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_rpmSensors[0]);
|
||||
_rpmSensors[1] = new Sensor("Pump", 1, SensorType.Fan, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_rpmSensors[1]);
|
||||
|
||||
_fanControl = new Sensor("External Fan", 0, SensorType.Control, this, new ParameterDescription[0], settings);
|
||||
Control control = new Control(_fanControl, settings, 0, 100);
|
||||
_fanControl.Control = control;
|
||||
|
||||
ActivateSensor(_fanControl);
|
||||
_frequencies[0] = new Sensor("Pump Frequency", 0, SensorType.Frequency, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_frequencies[0]);
|
||||
_frequencies[1] = new Sensor("Pump MaxFrequency", 1, SensorType.Frequency, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_frequencies[1]);
|
||||
}
|
||||
while (_rawData[0] != 0x4);
|
||||
|
||||
Name = $"Aquastream XT {Variant}";
|
||||
FirmwareVersion = BitConverter.ToUInt16(_rawData, 50);
|
||||
|
||||
_temperatures[0] = new Sensor("External Fan VRM", 0, SensorType.Temperature, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_temperatures[0]);
|
||||
_temperatures[1] = new Sensor("External", 1, SensorType.Temperature, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_temperatures[1]);
|
||||
_temperatures[2] = new Sensor("Internal Water", 2, SensorType.Temperature, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_temperatures[2]);
|
||||
|
||||
_voltages[0] = new Sensor("External Fan", 1, SensorType.Voltage, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_voltages[0]);
|
||||
_voltages[1] = new Sensor("Pump", 2, SensorType.Voltage, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_voltages[1]);
|
||||
|
||||
_pumpPower = new Sensor("Pump", 0, SensorType.Power, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_pumpPower);
|
||||
|
||||
_pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_pumpFlow);
|
||||
|
||||
_rpmSensors[0] = new Sensor("External Fan", 0, SensorType.Fan, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_rpmSensors[0]);
|
||||
_rpmSensors[1] = new Sensor("Pump", 1, SensorType.Fan, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_rpmSensors[1]);
|
||||
|
||||
_fanControl = new Sensor("External Fan", 0, SensorType.Control, this, new ParameterDescription[0], settings);
|
||||
Control control = new Control(_fanControl, settings, 0, 100);
|
||||
_fanControl.Control = control;
|
||||
|
||||
ActivateSensor(_fanControl);
|
||||
_frequencies[0] = new Sensor("Pump Frequency", 0, SensorType.Frequency, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_frequencies[0]);
|
||||
_frequencies[1] = new Sensor("Pump MaxFrequency", 1, SensorType.Frequency, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_frequencies[1]);
|
||||
}
|
||||
|
||||
public ushort FirmwareVersion { get; private set; }
|
||||
@@ -106,17 +111,19 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
return "Standard";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void Close()
|
||||
{
|
||||
_device.CloseDevice();
|
||||
_stream.Close();
|
||||
|
||||
base.Close();
|
||||
}
|
||||
|
||||
//TODO: Check tested and fix unknown variables
|
||||
public override void Update()
|
||||
{
|
||||
_device.ReadFeatureData(out _rawData, 0x4);
|
||||
_rawData[0] = 0x4;
|
||||
_stream.GetFeature(_rawData);
|
||||
|
||||
if (_rawData[0] != 0x4)
|
||||
return;
|
||||
|
||||
@@ -4,59 +4,50 @@
|
||||
// All Rights Reserved.
|
||||
|
||||
using System;
|
||||
using HidLibrary;
|
||||
using HidSharp;
|
||||
|
||||
namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
{
|
||||
internal class MPS : Hardware
|
||||
internal sealed 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;
|
||||
}
|
||||
private readonly Sensor _pumpFlow;
|
||||
private readonly byte[] _rawData = new byte[64];
|
||||
private readonly HidStream _stream;
|
||||
private readonly Sensor[] _temperatures = new Sensor[2];
|
||||
|
||||
private ushort _externalTemperature;
|
||||
|
||||
public MPS(HidDevice dev, ISettings settings) : base("MPS", new Identifier(dev.DevicePath), settings)
|
||||
{
|
||||
_device = dev;
|
||||
|
||||
do
|
||||
if (dev.TryOpen(out _stream))
|
||||
{
|
||||
_device.ReadFeatureData(out _rawData, MPS_REPORT_ID);
|
||||
} while (_rawData[0] != MPS_REPORT_ID);
|
||||
do
|
||||
{
|
||||
_rawData[0] = MPS_REPORT_ID;
|
||||
_stream.GetFeature(_rawData);
|
||||
}
|
||||
while (_rawData[0] != MPS_REPORT_ID);
|
||||
|
||||
Name = $"MPS";
|
||||
FirmwareVersion = ExtractFirmwareVersion();
|
||||
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]);
|
||||
_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);
|
||||
_pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, new ParameterDescription[0], settings);
|
||||
ActivateSensor(_pumpFlow);
|
||||
}
|
||||
}
|
||||
|
||||
public ushort FirmwareVersion { get; private set; }
|
||||
|
||||
public override HardwareType HardwareType
|
||||
{
|
||||
get
|
||||
{
|
||||
return HardwareType.AquaComputer;
|
||||
}
|
||||
get { return HardwareType.AquaComputer; }
|
||||
}
|
||||
|
||||
public string Status
|
||||
@@ -68,41 +59,53 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer
|
||||
{
|
||||
return $"Status: Untested Firmware Version {FirmwareVersion}! Please consider Updating to Version 1012";
|
||||
}
|
||||
|
||||
return "Status: OK";
|
||||
}
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
{
|
||||
_device.CloseDevice();
|
||||
_stream.Close();
|
||||
|
||||
base.Close();
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
_device.ReadFeatureData(out _rawData, MPS_REPORT_ID);
|
||||
_rawData[0] = MPS_REPORT_ID;
|
||||
_stream.GetFeature(_rawData);
|
||||
|
||||
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)
|
||||
if (_externalTemperature != short.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);
|
||||
}
|
||||
|
||||
private sealed class MPSDataIndexes
|
||||
{
|
||||
public const int ExternalTemperature = 43;
|
||||
public const int InternalWaterTemperature = 45;
|
||||
public const int PumpFlow = 35;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user