CommonHelpers: Vlv0100: Use Instance instead of static.

This commit is contained in:
Kamil Trzciński 2023-12-14 19:39:50 +01:00
parent 943cfd9aa5
commit b47c5fa860
4 changed files with 49 additions and 37 deletions

View file

@ -78,9 +78,9 @@ namespace CommonHelpers
useKernelDrivers = value; useKernelDrivers = value;
if (value) if (value)
Vlv0100.Open(); Vlv0100.Instance.Open();
else else
Vlv0100.Close(); Vlv0100.Instance.Close();
// CPU requires reading RyzenSMU // CPU requires reading RyzenSMU
HardwareComputer.IsCpuEnabled = value; HardwareComputer.IsCpuEnabled = value;
@ -140,13 +140,13 @@ namespace CommonHelpers
{ {
UseKernelDrivers = useKernelDrivers; UseKernelDrivers = useKernelDrivers;
if (Vlv0100.IsOpen && !Vlv0100.IsSupported) if (Vlv0100.Instance.IsOpen && !Vlv0100.Instance.IsSupported)
{ {
String message = ""; String message = "";
message += "Current device is not supported.\n"; message += "Current device is not supported.\n";
message += "FirmwareVersion: " + Vlv0100.FirmwareVersion.ToString("X") + "\n"; message += "FirmwareVersion: " + Vlv0100.Instance.FirmwareVersion.ToString("X") + "\n";
message += "BoardID: " + Vlv0100.BoardID.ToString("X") + "\n"; message += "BoardID: " + Vlv0100.Instance.BoardID.ToString("X") + "\n";
message += "PDCS: " + Vlv0100.PDCS.ToString("X") + "\n"; message += "PDCS: " + Vlv0100.Instance.PDCS.ToString("X") + "\n";
Fatal(title, message); Fatal(title, message);
} }

View file

@ -1,6 +1,6 @@
namespace CommonHelpers namespace CommonHelpers
{ {
public class Vlv0100 public class Vlv0100 : IDisposable
{ {
// Those addresses are taken from DSDT for VLV0100 // Those addresses are taken from DSDT for VLV0100
// and might change at any time with a BIOS update // and might change at any time with a BIOS update
@ -49,28 +49,41 @@
new DeviceVersion() { Firmware = 0x1050, BoardID = 0x5, PDCS = 0 /* 0x2F */, BatteryTempLE = true } new DeviceVersion() { Firmware = 0x1050, BoardID = 0x5, PDCS = 0 /* 0x2F */, BatteryTempLE = true }
}; };
private static InpOut? inpOut; public static Vlv0100 Instance = new Vlv0100();
public static bool IsOpen ~Vlv0100()
{
Close();
}
public void Dispose()
{
GC.SuppressFinalize(this);
Close();
}
private InpOut? inpOut;
public bool IsOpen
{ {
get { return inpOut is not null; } get { return inpOut is not null; }
} }
public static DeviceVersion? SupportedDevice public DeviceVersion? SupportedDevice
{ {
get { return deviceVersions.First((v) => v.IsSupported(FirmwareVersion, BoardID, PDCS)); } get { return deviceVersions.FirstOrDefault((v) => v.IsSupported(FirmwareVersion, BoardID, PDCS)); }
} }
public static bool IsSupported public bool IsSupported
{ {
get { return SupportedDevice is not null; } get { return SupportedDevice is not null; }
} }
public static ushort FirmwareVersion { get; private set; } public ushort FirmwareVersion { get; private set; }
public static byte BoardID { get; private set; } public byte BoardID { get; private set; }
public static byte PDCS { get; private set; } public byte PDCS { get; private set; }
public static bool Open() public bool Open()
{ {
if (inpOut != null) if (inpOut != null)
return true; return true;
@ -96,7 +109,6 @@
PDCS = data[0]; PDCS = data[0];
else else
PDCS = 0xFF; PDCS = 0xFF;
return true; return true;
} }
catch (Exception e) catch (Exception e)
@ -107,14 +119,14 @@
} }
} }
public static void Close() public void Close()
{ {
SetFanControl(false); SetFanControl(false);
using (inpOut) { } using (inpOut) { }
inpOut = null; inpOut = null;
} }
public static ushort GetFanDesiredRPM() public ushort GetFanDesiredRPM()
{ {
var data = inpOut?.ReadMemory(FSLO_FSHI, 2); var data = inpOut?.ReadMemory(FSLO_FSHI, 2);
if (data is null) if (data is null)
@ -122,7 +134,7 @@
return BitConverter.ToUInt16(data); return BitConverter.ToUInt16(data);
} }
public static ushort? GetFanRPM() public ushort? GetFanRPM()
{ {
var data = inpOut?.ReadMemory(FNRL_FNRH, 2); var data = inpOut?.ReadMemory(FNRL_FNRH, 2);
if (data is null) if (data is null)
@ -130,7 +142,7 @@
return BitConverter.ToUInt16(data); return BitConverter.ToUInt16(data);
} }
public static void SetFanControl(Boolean userControlled) public void SetFanControl(Boolean userControlled)
{ {
SetGain(10); SetGain(10);
SetRampRate(userControlled ? (byte)10 : (byte)20); SetRampRate(userControlled ? (byte)10 : (byte)20);
@ -138,7 +150,7 @@
inpOut?.DlPortWritePortUchar(IO6C, userControlled ? (byte)0xCC : (byte)0xCD); inpOut?.DlPortWritePortUchar(IO6C, userControlled ? (byte)0xCC : (byte)0xCD);
} }
public static void SetFanDesiredRPM(ushort rpm) public void SetFanDesiredRPM(ushort rpm)
{ {
if (rpm > MAX_FAN_RPM) if (rpm > MAX_FAN_RPM)
rpm = MAX_FAN_RPM; rpm = MAX_FAN_RPM;
@ -147,7 +159,7 @@
inpOut?.WriteMemory(FSLO_FSHI, data); inpOut?.WriteMemory(FSLO_FSHI, data);
} }
public static bool GetFanCheck() public bool GetFanCheck()
{ {
var data = inpOut?.ReadMemory(FNCK, 1); var data = inpOut?.ReadMemory(FNCK, 1);
if (data is null) if (data is null)
@ -155,7 +167,7 @@
return (data[0] & 0x1) != 0; return (data[0] & 0x1) != 0;
} }
public static float GetBattTemperature() public float GetBattTemperature()
{ {
var data = inpOut?.ReadMemory(BATH_BATL, 2); var data = inpOut?.ReadMemory(BATH_BATL, 2);
if (data is null) if (data is null)
@ -166,12 +178,12 @@
return (float)(value - 0x0AAC) / 10.0f; return (float)(value - 0x0AAC) / 10.0f;
} }
private static void SetGain(ushort gain) private void SetGain(ushort gain)
{ {
byte[] data = BitConverter.GetBytes(gain); byte[] data = BitConverter.GetBytes(gain);
inpOut?.WriteMemory(GNLO_GNHI, data); inpOut?.WriteMemory(GNLO_GNHI, data);
} }
private static void SetRampRate(byte rampRate) private void SetRampRate(byte rampRate)
{ {
byte[] data = BitConverter.GetBytes(rampRate); byte[] data = BitConverter.GetBytes(rampRate);
inpOut?.WriteMemory(FRPR, data); inpOut?.WriteMemory(FRPR, data);

View file

@ -36,7 +36,7 @@ namespace FanControl
public ushort DesiredRPM { get; private set; } public ushort DesiredRPM { get; private set; }
[CategoryAttribute("Board")] [CategoryAttribute("Board")]
public String PDVersion { get; private set; } = Vlv0100.FirmwareVersion.ToString("X"); public String PDVersion { get; private set; } = Vlv0100.Instance.FirmwareVersion.ToString("X");
public FanController() public FanController()
{ {
@ -80,7 +80,7 @@ namespace FanControl
[Browsable(false)] [Browsable(false)]
public bool IsActive public bool IsActive
{ {
get { return Vlv0100.IsOpen; } get { return Vlv0100.Instance.IsOpen; }
} }
public void Update(bool showForDefault = false) public void Update(bool showForDefault = false)
@ -89,7 +89,7 @@ namespace FanControl
if (mutex is null) if (mutex is null)
{ {
// If we cannot acquire mutex slightly increase FAN to compensate just in case // If we cannot acquire mutex slightly increase FAN to compensate just in case
Vlv0100.SetFanDesiredRPM((ushort)(Vlv0100.GetFanDesiredRPM() * 110 / 100)); Vlv0100.Instance.SetFanDesiredRPM((ushort)(Vlv0100.Instance.GetFanDesiredRPM() * 110 / 100));
return; return;
} }
@ -104,7 +104,7 @@ namespace FanControl
sensor.Reset(); sensor.Reset();
return; return;
} }
else if (!Vlv0100.IsOpen) else if (!Vlv0100.Instance.IsOpen)
{ {
Instance.UseKernelDrivers = true; Instance.UseKernelDrivers = true;
SetMode(Mode); SetMode(Mode);
@ -121,12 +121,12 @@ namespace FanControl
mutex.ReleaseMutex(); mutex.ReleaseMutex();
} }
allSensors["Batt"].Update("VLV0100", Vlv0100.GetBattTemperature(), Mode); allSensors["Batt"].Update("VLV0100", Vlv0100.Instance.GetBattTemperature(), Mode);
Vlv0100.SetFanDesiredRPM(getDesiredRPM()); Vlv0100.Instance.SetFanDesiredRPM(getDesiredRPM());
CurrentRPM = Vlv0100.GetFanRPM(); CurrentRPM = Vlv0100.Instance.GetFanRPM();
DesiredRPM = Vlv0100.GetFanDesiredRPM(); DesiredRPM = Vlv0100.Instance.GetFanDesiredRPM();
} }
public void SetMode(FanMode mode) public void SetMode(FanMode mode)
@ -134,12 +134,12 @@ namespace FanControl
switch (mode) switch (mode)
{ {
case FanMode.Default: case FanMode.Default:
Vlv0100.SetFanControl(false); Vlv0100.Instance.SetFanControl(false);
break; break;
default: default:
Instance.UseKernelDrivers = true; Instance.UseKernelDrivers = true;
Vlv0100.SetFanControl(true); Vlv0100.Instance.SetFanControl(true);
break; break;
} }

View file

@ -335,7 +335,7 @@ namespace PerformanceOverlay
{ {
Value = delegate () Value = delegate ()
{ {
return CommonHelpers.Vlv0100.GetFanRPM(); return Vlv0100.Instance.GetFanRPM();
}, },
Format = "F0" Format = "F0"
} }