Fix Aquacomputer Farbwerk sensor data out of sync (#1556)
* Fix Farbwerk sensor data out of date * Add farbwerk 360 support * Minor code change * Fix file naming * Standaarise the Temp sensor naming * Standarize the sensor naming * Fix Farbwerk sensor data out of date * Add farbwerk 360 support * Minor code change * Fix file naming * Standaarise the Temp sensor naming * Standarize the sensor naming * Fix Farbwerk sensor data out of date * Add farbwerk 360 support * Minor code change * Fix file naming * Standaarise the Temp sensor naming * Standarize the sensor naming * Add farbwerk 360 support * Minor code change * Fix file naming
This commit is contained in:
@@ -85,6 +85,15 @@ public class AquaComputerGroup : IGroup
|
|||||||
_report.AppendLine();
|
_report.AppendLine();
|
||||||
_hardware.Add(farbwerk);
|
_hardware.Add(farbwerk);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0xF010:
|
||||||
|
var farbwerk360 = new Farbwerk360(dev, settings);
|
||||||
|
_report.AppendLine($"Device name: {productName}");
|
||||||
|
_report.AppendLine($"Firmware version: {farbwerk360.FirmwareVersion}");
|
||||||
|
_report.AppendLine($"{farbwerk360.Status}");
|
||||||
|
_report.AppendLine();
|
||||||
|
_hardware.Add(farbwerk360);
|
||||||
|
break;
|
||||||
|
|
||||||
case 0xF012:
|
case 0xF012:
|
||||||
var highflownext = new HighFlowNext(dev, settings);
|
var highflownext = new HighFlowNext(dev, settings);
|
||||||
|
|||||||
@@ -19,40 +19,40 @@ internal sealed class Farbwerk : Hardware
|
|||||||
private const int COLORS_OFFSET = 40;
|
private const int COLORS_OFFSET = 40;
|
||||||
|
|
||||||
private const int TEMPERATURE_COUNT = 4;
|
private const int TEMPERATURE_COUNT = 4;
|
||||||
|
private const int TEMP_SENSOR_DISCONNECTED = 32767;
|
||||||
private const int COLOR_COUNT = 4;
|
private const int COLOR_COUNT = 4;
|
||||||
private const int COLOR_VALUE_COUNT = COLOR_COUNT * 3;
|
private const int COLOR_VALUE_COUNT = COLOR_COUNT * 3;
|
||||||
|
private readonly HidDevice _device;
|
||||||
private readonly byte[] _rawData = new byte[140];
|
private readonly byte[] _rawData = new byte[140];
|
||||||
private readonly HidStream _stream;
|
|
||||||
private readonly Sensor[] _temperatures = new Sensor[TEMPERATURE_COUNT];
|
private readonly Sensor[] _temperatures = new Sensor[TEMPERATURE_COUNT];
|
||||||
private readonly Sensor[] _colors = new Sensor[COLOR_VALUE_COUNT];
|
private readonly Sensor[] _colors = new Sensor[COLOR_VALUE_COUNT];
|
||||||
|
|
||||||
public Farbwerk(HidDevice dev, ISettings settings) : base("Farbwerk", new Identifier(dev), settings)
|
public Farbwerk(HidDevice dev, ISettings settings) : base("Farbwerk", new Identifier(dev), settings)
|
||||||
{
|
{
|
||||||
if (dev.TryOpen(out _stream))
|
_device = dev;
|
||||||
|
|
||||||
|
for (int i = 0; i < _temperatures.Length; i++)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < _temperatures.Length; i++)
|
_temperatures[i] = new Sensor($"Temperature #{i + 1}", i, SensorType.Temperature, this, settings);
|
||||||
{
|
ActivateSensor(_temperatures[i]);
|
||||||
_temperatures[i] = new Sensor($"Sensor {i + 1}", i, SensorType.Temperature, this, settings);
|
|
||||||
ActivateSensor(_temperatures[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < _colors.Length; i++)
|
|
||||||
{
|
|
||||||
int control = (i / 3) + 1;
|
|
||||||
string color = (i % 3) switch
|
|
||||||
{
|
|
||||||
0 => "Red",
|
|
||||||
1 => "Green",
|
|
||||||
2 => "Blue",
|
|
||||||
_ => "Invalid"
|
|
||||||
};
|
|
||||||
_colors[i] = new Sensor($"Controller {control} {color}", COLOR_COUNT + i, SensorType.Level, this, settings);
|
|
||||||
ActivateSensor(_colors[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < _colors.Length; i++)
|
||||||
|
{
|
||||||
|
int control = (i / 3) + 1;
|
||||||
|
string color = (i % 3) switch
|
||||||
|
{
|
||||||
|
0 => "Red",
|
||||||
|
1 => "Green",
|
||||||
|
2 => "Blue",
|
||||||
|
_ => "Invalid"
|
||||||
|
};
|
||||||
|
_colors[i] = new Sensor($"Controller {control} {color}", COLOR_COUNT + i, SensorType.Level, this, settings);
|
||||||
|
ActivateSensor(_colors[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort FirmwareVersion { get; private set; }
|
public ushort FirmwareVersion { get; private set; }
|
||||||
@@ -82,34 +82,40 @@ internal sealed class Farbwerk : Hardware
|
|||||||
|
|
||||||
public override void Close()
|
public override void Close()
|
||||||
{
|
{
|
||||||
_stream.Close();
|
|
||||||
|
|
||||||
base.Close();
|
base.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Update()
|
public override void Update()
|
||||||
{
|
{
|
||||||
int length = _stream.Read(_rawData);
|
if (_device.TryOpen(out HidStream stream)) {
|
||||||
|
int length = stream.Read(_rawData);
|
||||||
|
|
||||||
if (length != _rawData.Length || _rawData[0] != 0x1)
|
if (length != _rawData.Length || _rawData[0] != 0x1)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FirmwareVersion = Convert.ToUInt16(_rawData[21] << 8 | _rawData[22]);
|
FirmwareVersion = Convert.ToUInt16(_rawData[21] << 8 | _rawData[22]);
|
||||||
|
|
||||||
int offset = HEADER_SIZE + SENSOR_OFFSET;
|
int offset = HEADER_SIZE + SENSOR_OFFSET;
|
||||||
for (int i = 0; i < _temperatures.Length; i++)
|
foreach (Sensor temp in _temperatures)
|
||||||
{
|
{
|
||||||
_temperatures[i].Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 100.0f;
|
temp.Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 100.0f;
|
||||||
offset += 2;
|
|
||||||
}
|
if (temp.Value == (TEMP_SENSOR_DISCONNECTED / 100.0f)) {
|
||||||
|
DeactivateSensor(temp);
|
||||||
offset = HEADER_SIZE + COLORS_OFFSET;
|
}
|
||||||
for (int i = 0; i < _colors.Length; i++)
|
|
||||||
{
|
offset += 2;
|
||||||
_colors[i].Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 81.90f;
|
}
|
||||||
offset += 2;
|
|
||||||
|
offset = HEADER_SIZE + COLORS_OFFSET;
|
||||||
|
foreach (Sensor color in _colors)
|
||||||
|
{
|
||||||
|
color.Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 81.90f;
|
||||||
|
offset += 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,120 @@
|
|||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public License, v. 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 HidSharp;
|
||||||
|
|
||||||
|
namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer;
|
||||||
|
//TODO:
|
||||||
|
//Implement set RGB Controls
|
||||||
|
|
||||||
|
internal sealed class Farbwerk360 : Hardware
|
||||||
|
{
|
||||||
|
private const int FEATURE_ID = 3;
|
||||||
|
|
||||||
|
private const int HEADER_SIZE = 30;
|
||||||
|
private const int SENSOR_OFFSET = 20;
|
||||||
|
private const int COLORS_OFFSET = 43;
|
||||||
|
|
||||||
|
private const int TEMPERATURE_COUNT = 4;
|
||||||
|
private const int TEMP_SENSOR_DISCONNECTED = 32767;
|
||||||
|
private const int COLOR_COUNT = 4;
|
||||||
|
private const int COLOR_VALUE_COUNT = COLOR_COUNT * 3;
|
||||||
|
private readonly HidDevice _device;
|
||||||
|
private readonly byte[] _rawData = new byte[140];
|
||||||
|
private readonly Sensor[] _temperatures = new Sensor[TEMPERATURE_COUNT];
|
||||||
|
private readonly Sensor[] _colors = new Sensor[COLOR_VALUE_COUNT];
|
||||||
|
|
||||||
|
public Farbwerk360(HidDevice dev, ISettings settings) : base("Farbwerk 360", new Identifier(dev), settings)
|
||||||
|
{
|
||||||
|
_device = dev;
|
||||||
|
|
||||||
|
for (int i = 0; i < _temperatures.Length; i++)
|
||||||
|
{
|
||||||
|
_temperatures[i] = new Sensor($"Temperature #{i + 1}", i, SensorType.Temperature, this, settings);
|
||||||
|
ActivateSensor(_temperatures[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < _colors.Length; i++)
|
||||||
|
{
|
||||||
|
int control = (i / 3) + 1;
|
||||||
|
string color = (i % 3) switch
|
||||||
|
{
|
||||||
|
0 => "Red",
|
||||||
|
1 => "Green",
|
||||||
|
2 => "Blue",
|
||||||
|
_ => "Invalid"
|
||||||
|
};
|
||||||
|
_colors[i] = new Sensor($"Controller {control} {color}", COLOR_COUNT + i, SensorType.Level, this, settings);
|
||||||
|
ActivateSensor(_colors[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ushort FirmwareVersion { get; private set; }
|
||||||
|
|
||||||
|
public override HardwareType HardwareType
|
||||||
|
{
|
||||||
|
get { return HardwareType.EmbeddedController; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Status
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_rawData[0] != 0x1)
|
||||||
|
{
|
||||||
|
return $"Status: Invalid header {_rawData[0]}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FirmwareVersion < 1009)
|
||||||
|
{
|
||||||
|
return $"Status: Untested Firmware Version {FirmwareVersion}! Please consider Updating to Version 1009";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "Status: OK";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Close()
|
||||||
|
{
|
||||||
|
base.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update()
|
||||||
|
{
|
||||||
|
if (_device.TryOpen(out HidStream stream)) {
|
||||||
|
int length = stream.Read(_rawData);
|
||||||
|
|
||||||
|
if (length != _rawData.Length || _rawData[0] != 0x1)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FirmwareVersion = Convert.ToUInt16(_rawData[21] << 8 | _rawData[22]);
|
||||||
|
|
||||||
|
int offset = HEADER_SIZE + SENSOR_OFFSET;
|
||||||
|
foreach (Sensor temp in _temperatures)
|
||||||
|
{
|
||||||
|
temp.Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 100.0f;
|
||||||
|
|
||||||
|
if (temp.Value == (TEMP_SENSOR_DISCONNECTED / 100.0f)) {
|
||||||
|
DeactivateSensor(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
offset += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = HEADER_SIZE + COLORS_OFFSET;
|
||||||
|
foreach (Sensor color in _colors)
|
||||||
|
{
|
||||||
|
color.Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 81.90f;
|
||||||
|
offset += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,14 +31,14 @@ internal sealed class Octo : Hardware
|
|||||||
// Initialize the 4 temperature sensors
|
// Initialize the 4 temperature sensors
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
_temperatures[i] = new Sensor($"Temperature {i + 1}", i, SensorType.Temperature, this, Array.Empty<ParameterDescription>(), settings);
|
_temperatures[i] = new Sensor($"Temperature #{i + 1}", i, SensorType.Temperature, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_temperatures[i]);
|
ActivateSensor(_temperatures[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the 8 fan speed sensors
|
// Initialize the 8 fan speed sensors
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
_rpmSensors[i] = new Sensor($"Fan {i + 1}", i, SensorType.Fan, this, Array.Empty<ParameterDescription>(), settings);
|
_rpmSensors[i] = new Sensor($"Fan #{i + 1}", i, SensorType.Fan, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_rpmSensors[i]);
|
ActivateSensor(_rpmSensors[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,21 +49,21 @@ internal sealed class Octo : Hardware
|
|||||||
// Initialize the 8 fan voltage sensors
|
// Initialize the 8 fan voltage sensors
|
||||||
for (int i = 1; i < 9; i++)
|
for (int i = 1; i < 9; i++)
|
||||||
{
|
{
|
||||||
_voltages[i] = new Sensor($"Fan {i}", i, SensorType.Voltage, this, Array.Empty<ParameterDescription>(), settings);
|
_voltages[i] = new Sensor($"Fan #{i}", i, SensorType.Voltage, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_voltages[i]);
|
ActivateSensor(_voltages[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the 8 fan current sensors
|
// Initialize the 8 fan current sensors
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
_currents[i] = new Sensor($"Fan {i + 1}", i, SensorType.Current, this, Array.Empty<ParameterDescription>(), settings);
|
_currents[i] = new Sensor($"Fan #{i + 1}", i, SensorType.Current, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_currents[i]);
|
ActivateSensor(_currents[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the 8 fan power sensors
|
// Initialize the 8 fan power sensors
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
_powers[i] = new Sensor($"Fan {i + 1}", i, SensorType.Power, this, Array.Empty<ParameterDescription>(), settings);
|
_powers[i] = new Sensor($"Fan #{i + 1}", i, SensorType.Power, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_powers[i]);
|
ActivateSensor(_powers[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ internal sealed class Quadro : Hardware
|
|||||||
// Initialize the 4 temperature sensors
|
// Initialize the 4 temperature sensors
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
_temperatures[i] = new Sensor($"Temperature {i + 1}", i, SensorType.Temperature, this, Array.Empty<ParameterDescription>(), settings);
|
_temperatures[i] = new Sensor($"Temperature #{i + 1}", i, SensorType.Temperature, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_temperatures[i]);
|
ActivateSensor(_temperatures[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,28 +48,28 @@ internal sealed class Quadro : Hardware
|
|||||||
// Initialize the 4 fan voltage sensors
|
// Initialize the 4 fan voltage sensors
|
||||||
for (int i = 1; i < 5; i++)
|
for (int i = 1; i < 5; i++)
|
||||||
{
|
{
|
||||||
_voltages[i] = new Sensor($"Fan {i}", i, SensorType.Voltage, this, Array.Empty<ParameterDescription>(), settings);
|
_voltages[i] = new Sensor($"Fan #{i}", i, SensorType.Voltage, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_voltages[i]);
|
ActivateSensor(_voltages[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the 4 fan current sensors
|
// Initialize the 4 fan current sensors
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
_currents[i] = new Sensor($"Fan {i + 1}", i, SensorType.Current, this, Array.Empty<ParameterDescription>(), settings);
|
_currents[i] = new Sensor($"Fan #{i + 1}", i, SensorType.Current, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_currents[i]);
|
ActivateSensor(_currents[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the 4 fan power sensors
|
// Initialize the 4 fan power sensors
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
_powers[i] = new Sensor($"Fan {i + 1}", i, SensorType.Power, this, Array.Empty<ParameterDescription>(), settings);
|
_powers[i] = new Sensor($"Fan #{i + 1}", i, SensorType.Power, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_powers[i]);
|
ActivateSensor(_powers[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize the 4 fan speed sensors
|
// Initialize the 4 fan speed sensors
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
_rpmSensors[i] = new Sensor($"Fan {i + 1}", i, SensorType.Fan, this, Array.Empty<ParameterDescription>(), settings);
|
_rpmSensors[i] = new Sensor($"Fan #{i + 1}", i, SensorType.Fan, this, Array.Empty<ParameterDescription>(), settings);
|
||||||
ActivateSensor(_rpmSensors[i]);
|
ActivateSensor(_rpmSensors[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user