From 38162b5824561c35f1e730769d7cabdf947984cd Mon Sep 17 00:00:00 2001 From: Rem0o Date: Sat, 25 Sep 2021 04:40:54 -0400 Subject: [PATCH] Fix float to byte conversion. (#547) The conversion was using a double between the float value to the byte value, which cause some issue with a software value of 100f, which resulted to 254 instead of 255. Extracted as a function. --- .../Hardware/Controller/Nzxt/KrakenX3.cs | 1 + .../Hardware/Motherboard/SuperIOHardware.cs | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs index bc5de6f..1b346dc 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs @@ -129,6 +129,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt catch (ObjectDisposedException) { // Could be unplugged, or the app is stopping... + return; } } } diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs index bcbdf44..5aed7b1 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs @@ -87,7 +87,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard } case ControlMode.Software: { - superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55)); + superIO.SetControl(index, GetSoftwareValueAsByte(cc)); break; } default: @@ -100,7 +100,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard control.SoftwareControlValueChanged += cc => { if (cc.ControlMode == ControlMode.Software) - superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55)); + superIO.SetControl(index, GetSoftwareValueAsByte(cc)); }; switch (control.ControlMode) @@ -117,7 +117,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard } case ControlMode.Software: { - superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55)); + superIO.SetControl(index, GetSoftwareValueAsByte(control)); break; } @@ -130,6 +130,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard } } + private static byte GetSoftwareValueAsByte(Control control) + { + const float percentToByteRatio = 2.55f; + float value = control.SoftwareValue * percentToByteRatio; + return (byte)value; + } + private void CreateFanSensors(ISuperIO superIO, ISettings settings, IList f) { foreach (Fan fan in f)