first commit
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
// 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 Farbwerk : Hardware
|
||||
{
|
||||
private const int FEATURE_ID = 3;
|
||||
|
||||
private const int HEADER_SIZE = 27;
|
||||
private const int SENSOR_OFFSET = 20;
|
||||
private const int COLORS_OFFSET = 40;
|
||||
|
||||
private const int TEMPERATURE_COUNT = 4;
|
||||
private const int COLOR_COUNT = 4;
|
||||
private const int COLOR_VALUE_COUNT = COLOR_COUNT * 3;
|
||||
|
||||
private readonly byte[] _rawData = new byte[140];
|
||||
private readonly HidStream _stream;
|
||||
private readonly Sensor[] _temperatures = new Sensor[TEMPERATURE_COUNT];
|
||||
private readonly Sensor[] _colors = new Sensor[COLOR_VALUE_COUNT];
|
||||
|
||||
public Farbwerk(HidDevice dev, ISettings settings) : base("Farbwerk", new Identifier(dev), settings)
|
||||
{
|
||||
if (dev.TryOpen(out _stream))
|
||||
{
|
||||
for (int i = 0; i < _temperatures.Length; 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();
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
_stream.Close();
|
||||
|
||||
base.Close();
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
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;
|
||||
for (int i = 0; i < _temperatures.Length; i++)
|
||||
{
|
||||
_temperatures[i].Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 100.0f;
|
||||
offset += 2;
|
||||
}
|
||||
|
||||
offset = HEADER_SIZE + COLORS_OFFSET;
|
||||
for (int i = 0; i < _colors.Length; i++)
|
||||
{
|
||||
_colors[i].Value = (_rawData[offset] << 8 | _rawData[offset + 1]) / 81.90f;
|
||||
offset += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user