Files
demorfi bcc197f265 Added base support Asus ROG Crosshair X670E Hero and PSU MSI MEG Ai1300P (#1575)
* Added base support matherboard Asus ROG Crosshair X670E Hero

* Added base support PSU MSI MEG Ai1300P

* Refactoring MSI PSU lib
2025-09-30 19:03:13 +02:00

76 lines
3.2 KiB
C#

// 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) 2024 demorfi<demorfi@gmail.com>
// Copyright (C) LibreHardwareMonitor and Contributors.
// All Rights Reserved.
using System.Collections.Generic;
using System.Globalization;
using HidSharp;
namespace LibreHardwareMonitor.Hardware.Psu.Msi;
internal sealed class MsiPsu : Hardware
{
private readonly HidDevice _device;
private readonly List<PsuSensor> _sensors = [];
public MsiPsu(HidDevice device, ISettings settings, int index)
: base("MSI PSU", new Identifier("psu", "msi", index.ToString()), settings)
{
_device = device;
using HidStream stream = device.Open();
UsbApi.FirmwareInfo fwInfo = UsbApi.FwInfo(stream);
Name = $"{fwInfo.Vendor} {fwInfo.Product}";
AddSensors(settings);
}
public override HardwareType HardwareType => HardwareType.Psu;
public override void Update()
{
using HidStream stream = _device.Open();
float[] info = UsbApi.InfoList(stream);
_sensors.ForEach(s => s.Update(info));
}
private void AddSensors(ISettings settings)
{
int sensorIndex = 0;
_sensors.Add(new PsuSensor("Case", sensorIndex++, SensorType.Fan, this, settings, UsbApi.IndexInfo.FAN_RPM));
_sensors.Add(new PsuSensor("Case", sensorIndex++, SensorType.Temperature, this, settings, UsbApi.IndexInfo.TEMP));
_sensors.Add(new PsuSensor("+12V", sensorIndex++, SensorType.Voltage, this, settings, UsbApi.IndexInfo.VOLTS_12));
_sensors.Add(new PsuSensor("+12V", sensorIndex++, SensorType.Current, this, settings, UsbApi.IndexInfo.AMPS_12));
_sensors.Add(new PsuSensor("+5V", sensorIndex++, SensorType.Voltage, this, settings, UsbApi.IndexInfo.VOLTS_5));
_sensors.Add(new PsuSensor("+5V", sensorIndex++, SensorType.Current, this, settings, UsbApi.IndexInfo.AMPS_5));
_sensors.Add(new PsuSensor("+3.3V", sensorIndex++, SensorType.Voltage, this, settings, UsbApi.IndexInfo.VOLTS_3V3));
_sensors.Add(new PsuSensor("+3.3V", sensorIndex++, SensorType.Current, this, settings, UsbApi.IndexInfo.AMPS_3V3));
_sensors.Add(new PsuSensor("PSU Efficiency", sensorIndex++, SensorType.Level, this, settings, UsbApi.IndexInfo.EFFICIENCY));
_sensors.Add(new PsuSensor("PSU Out", sensorIndex++, SensorType.Power, this, settings, UsbApi.IndexInfo.PSU_OUT));
_sensors.Add(new PsuSensor("Total Runtime", sensorIndex++, SensorType.TimeSpan, this, settings, UsbApi.IndexInfo.RUNTIME, true));
}
private class PsuSensor : Sensor
{
private readonly UsbApi.IndexInfo _indexInfo;
public PsuSensor(string name, int index, SensorType type, MsiPsu hardware, ISettings settings, UsbApi.IndexInfo indexInfo, bool noHistory = false)
: base(name, index, false, type, hardware, null, settings, noHistory)
{
_indexInfo = indexInfo;
hardware.ActivateSensor(this);
}
public void Update(float[] info)
{
Value = info[(int)_indexInfo];
}
}
}