From 38b97e10d0da86c6f8a9b0722eec9063f30997b1 Mon Sep 17 00:00:00 2001 From: PhyxionNL <7643972+PhyxionNL@users.noreply.github.com> Date: Wed, 29 Jun 2022 19:38:57 +0200 Subject: [PATCH] Update editorconfig + changes (#771) --- .editorconfig | 81 ++- .../Hardware/Battery/BatteryGroup.cs | 31 +- LibreHardwareMonitorLib/Hardware/Computer.cs | 3 +- .../Controller/AeroCool/AeroCoolGroup.cs | 6 +- .../Hardware/Controller/AeroCool/P7-H1.cs | 3 +- .../AquaComputer/AquaComputerGroup.cs | 48 +- .../Controller/AquaComputer/AquastreamXT.cs | 29 +- .../Controller/AquaComputer/D5Next.cs | 8 +- .../Hardware/Controller/AquaComputer/MPS.cs | 9 +- .../Hardware/Controller/AquaComputer/Octo.cs | 2 +- .../Controller/Heatmaster/Heatmaster.cs | 81 ++- .../Controller/Heatmaster/HeatmasterGroup.cs | 13 +- .../Hardware/Controller/Nzxt/KrakenX3.cs | 10 +- .../Hardware/Controller/Nzxt/NzxtGroup.cs | 9 +- .../Controller/TBalancer/TBalancer.cs | 41 +- .../Controller/TBalancer/TBalancerGroup.cs | 9 +- .../Hardware/Cpu/Amd0FCpu.cs | 11 +- .../Hardware/Cpu/Amd10Cpu.cs | 163 ++--- .../Hardware/Cpu/Amd17Cpu.cs | 23 +- .../Hardware/Cpu/AmdCpu.cs | 1 - .../Hardware/Cpu/CpuGroup.cs | 16 +- LibreHardwareMonitorLib/Hardware/Cpu/CpuId.cs | 65 +- .../Hardware/Cpu/CpuLoad.cs | 3 +- .../Hardware/Cpu/GenericCpu.cs | 24 +- .../Hardware/Cpu/IntelCpu.cs | 446 +++++++------- .../Hardware/D3DDisplayDevice.cs | 2 +- .../Hardware/FirmwareTable.cs | 2 - .../Hardware/Gpu/AmdGpu.cs | 15 +- .../Hardware/Gpu/AmdGpuGroup.cs | 6 +- .../Hardware/Gpu/NvidiaGpu.cs | 12 +- .../Hardware/Gpu/NvidiaGroup.cs | 1 - .../Hardware/GroupAffinity.cs | 5 +- LibreHardwareMonitorLib/Hardware/Hardware.cs | 3 +- LibreHardwareMonitorLib/Hardware/IHardware.cs | 1 - LibreHardwareMonitorLib/Hardware/InpOut.cs | 6 - .../Hardware/Memory/GenericLinuxMemory.cs | 20 +- .../Hardware/Memory/GenericWindowsMemory.cs | 7 +- .../Motherboard/Lpc/EC/EmbeddedController.cs | 399 ++++++++----- .../Hardware/Motherboard/Lpc/F718XX.cs | 19 +- .../Hardware/Motherboard/Lpc/IT87XX.cs | 193 ++---- .../Hardware/Motherboard/Lpc/LMSensors.cs | 15 +- .../Hardware/Motherboard/Lpc/LpcIO.cs | 224 ++----- .../Hardware/Motherboard/Lpc/Nct677X.cs | 254 ++++---- .../Hardware/Motherboard/Lpc/W836XX.cs | 188 +++--- .../Hardware/Motherboard/Motherboard.cs | 5 +- .../Hardware/Motherboard/SuperIOHardware.cs | 560 ++++++------------ .../Hardware/Network/NetworkGroup.cs | 12 +- LibreHardwareMonitorLib/Hardware/Parameter.cs | 6 +- .../Hardware/Psu/Corsair/CorsairPsu.cs | 43 +- LibreHardwareMonitorLib/Hardware/RyzenSMU.cs | 201 ++----- LibreHardwareMonitorLib/Hardware/SMBios.cs | 20 +- LibreHardwareMonitorLib/Hardware/Sensor.cs | 2 - .../Hardware/SensorVisitor.cs | 2 - .../Hardware/Storage/AbstractStorage.cs | 15 +- .../Hardware/Storage/DebugSmart.cs | 2 +- .../Hardware/Storage/GenericHardDisk.cs | 2 +- .../Hardware/Storage/NVMeGeneric.cs | 15 +- .../Hardware/Storage/NVMeIntel.cs | 6 +- .../Hardware/Storage/NVMeIntelRst.cs | 6 +- .../Hardware/Storage/NVMeSamsung.cs | 2 +- .../Hardware/Storage/NVMeSmart.cs | 375 ++++++------ .../Hardware/Storage/NVMeWindows.cs | 6 +- .../Hardware/Storage/StorageGroup.cs | 4 +- .../Hardware/Storage/WindowsSmart.cs | 9 +- .../Hardware/ThreadAffinity.cs | 11 +- LibreHardwareMonitorLib/Interop/AtiAdlxx.cs | 2 +- LibreHardwareMonitorLib/Interop/Kernel32.cs | 2 +- .../Software/OperatingSystem.cs | 2 +- 68 files changed, 1530 insertions(+), 2287 deletions(-) diff --git a/.editorconfig b/.editorconfig index 73f2470..9422b2d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,12 +10,14 @@ root = true insert_final_newline = true indent_style = space indent_size = 4 +trim_trailing_whitespace = true [project.json] indent_size = 2 # C# files [*.{cs,vb}] + # New line preferences csharp_new_line_before_open_brace = all csharp_new_line_before_else = true @@ -28,14 +30,15 @@ csharp_new_line_between_query_expression_clauses = true # Indentation preferences csharp_indent_block_contents = true csharp_indent_braces = false -csharp_indent_case_contents = false -csharp_indent_case_contents_when_block = false +csharp_indent_case_contents = true +csharp_indent_case_contents_when_block = true csharp_indent_switch_labels = true csharp_indent_labels = one_less_than_current # Modifier preferences csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion + # avoid this. unless absolutely necessary dotnet_style_qualification_for_field = false:suggestion dotnet_style_qualification_for_property = false:suggestion @@ -49,22 +52,6 @@ csharp_style_var_elsewhere = false:suggestion dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion dotnet_style_predefined_type_for_member_access = true:suggestion -# methods -dotnet_naming_rule.methods_must_be_capitalized.severity = suggestion -dotnet_naming_rule.methods_must_be_capitalized.symbols = methods_symbols -dotnet_naming_rule.methods_must_be_capitalized.style = methods_case_style -dotnet_naming_symbols.methods_symbols.applicable_kinds = method -dotnet_naming_symbols.methods_symbols.applicable_accessibilities = public, private, protected, internal -dotnet_naming_style.methods_case_style.capitalization = pascal_case - -# public fields -dotnet_naming_rule.public_members_must_be_capitalized.severity = suggestion -dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols -dotnet_naming_rule.public_members_must_be_capitalized.style = public_case_style -dotnet_naming_symbols.public_symbols.applicable_kinds = property,field,event,delegate -dotnet_naming_symbols.public_symbols.applicable_accessibilities = public -dotnet_naming_style.public_case_style.capitalization = pascal_case - # name all constant fields using PascalCase dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields @@ -73,6 +60,16 @@ dotnet_naming_symbols.constant_fields.applicable_kinds = field dotnet_naming_symbols.constant_fields.required_modifiers = const dotnet_naming_style.pascal_case_style.capitalization = pascal_case +# static fields should have s_ prefix +dotnet_naming_rule.static_fields_should_have_prefix.severity = suggestion +dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields +dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style +dotnet_naming_symbols.static_fields.applicable_kinds = field +dotnet_naming_symbols.static_fields.required_modifiers = static +dotnet_naming_symbols.static_fields.applicable_accessibilities = private, internal, private_protected +dotnet_naming_style.static_prefix_style.required_prefix = s_ +dotnet_naming_style.static_prefix_style.capitalization = camel_case + # internal and private fields should be _camelCase dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields @@ -84,17 +81,14 @@ dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case # Code style defaults csharp_using_directive_placement = outside_namespace:suggestion -dotnet_sort_system_directives_first = true:suggestion -csharp_prefer_braces = when_multiline:suggestion +dotnet_sort_system_directives_first = true +csharp_prefer_braces = true:silent csharp_preserve_single_line_blocks = true:none csharp_preserve_single_line_statements = false:none csharp_prefer_static_local_function = true:suggestion csharp_prefer_simple_using_statement = false:none csharp_style_prefer_switch_expression = true:suggestion - -# Code quality dotnet_style_readonly_field = true:suggestion -dotnet_code_quality_unused_parameters = non_public:suggestion # Expression-level preferences dotnet_style_object_initializer = true:suggestion @@ -106,19 +100,19 @@ dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggesti dotnet_style_prefer_inferred_tuple_names = true:suggestion dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion dotnet_style_prefer_auto_properties = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:refactoring -dotnet_style_prefer_conditional_expression_over_return = true:refactoring +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent csharp_prefer_simple_default_expression = true:suggestion # Expression-bodied members -csharp_style_expression_bodied_methods = true:refactoring -csharp_style_expression_bodied_constructors = true:refactoring -csharp_style_expression_bodied_operators = true:refactoring -csharp_style_expression_bodied_properties = true:refactoring -csharp_style_expression_bodied_indexers = true:refactoring -csharp_style_expression_bodied_accessors = true:refactoring -csharp_style_expression_bodied_lambdas = true:refactoring -csharp_style_expression_bodied_local_functions = true:refactoring +csharp_style_expression_bodied_methods = true:silent +csharp_style_expression_bodied_constructors = true:silent +csharp_style_expression_bodied_operators = true:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = true:silent # Pattern matching csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion @@ -161,18 +155,15 @@ csharp_space_between_square_brackets = false # Analyzers dotnet_code_quality.ca1802.api_surface = private, internal -# C++ Files -[*.{cpp,h,in}] -curly_bracket_next_line = true -indent_brace_style = Allman +# CS1591: Missing XML comment for publicly visible type or member +dotnet_diagnostic.CS1591.severity = suggestion # Xml project files -[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +[*.{csproj,vbproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] indent_size = 2 -# Xml build files -[*.builds] -indent_size = 2 +[*.{csproj,vbproj,proj,nativeproj,locproj}] +charset = utf-8 # Xml files [*.{xml,stylecop,resx,ruleset}] @@ -182,8 +173,6 @@ indent_size = 2 [*.{props,targets,config,nuspec}] indent_size = 2 -# Shell scripts -[*.sh] -end_of_line = lf -[*.{cmd, bat}] -end_of_line = crlf +# YAML config files +[*.{yml,yaml}] +indent_size = 2 diff --git a/LibreHardwareMonitorLib/Hardware/Battery/BatteryGroup.cs b/LibreHardwareMonitorLib/Hardware/Battery/BatteryGroup.cs index bf99c9f..4b08485 100644 --- a/LibreHardwareMonitorLib/Hardware/Battery/BatteryGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Battery/BatteryGroup.cs @@ -163,29 +163,16 @@ namespace LibreHardwareMonitor.Hardware.Battery foreach (Battery bat in _hardware) { - string chemistry = "Unknown"; - - switch (bat.Chemistry) + string chemistry = bat.Chemistry switch { - case BatteryChemistry.LeadAcid: - chemistry = "Lead Acid"; - break; - case BatteryChemistry.NickelCadmium: - chemistry = "Nickel-Cadmium"; - break; - case BatteryChemistry.NickelMetalHydride: - chemistry = "Nickel-Metal Hydride"; - break; - case BatteryChemistry.LithiumIon: - chemistry = "Lithium Ion"; - break; - case BatteryChemistry.NickelZinc: - chemistry = "Nickel-Zinc"; - break; - case BatteryChemistry.AlkalineManganese: - chemistry = "Rechargeable Alkaline-Manganese"; - break; - } + BatteryChemistry.LeadAcid => "Lead Acid", + BatteryChemistry.NickelCadmium => "Nickel-Cadmium", + BatteryChemistry.NickelMetalHydride => "Nickel-Metal Hydride", + BatteryChemistry.LithiumIon => "Lithium Ion", + BatteryChemistry.NickelZinc => "Nickel-Zinc", + BatteryChemistry.AlkalineManganese => "Rechargeable Alkaline-Manganese", + _ => "Unknown" + }; reportBuilder.Append("Battery #").Append(count).AppendLine(":") .Append(" Name: ").AppendLine(bat.Name) diff --git a/LibreHardwareMonitorLib/Hardware/Computer.cs b/LibreHardwareMonitorLib/Hardware/Computer.cs index 18843cc..19e898b 100644 --- a/LibreHardwareMonitorLib/Hardware/Computer.cs +++ b/LibreHardwareMonitorLib/Hardware/Computer.cs @@ -358,8 +358,7 @@ namespace LibreHardwareMonitor.Hardware w.Write(report); } - IEnumerable hardwareArray = group.Hardware; - foreach (IHardware hardware in hardwareArray) + foreach (IHardware hardware in (IEnumerable)group.Hardware) ReportHardware(hardware, w); } diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs index 14876cc..cd52e8d 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/AeroCoolGroup.cs @@ -11,8 +11,8 @@ namespace LibreHardwareMonitor.Hardware.Controller.AeroCool { public class AeroCoolGroup : IGroup { - private readonly List _hardware = new List(); - private readonly StringBuilder _report = new StringBuilder(); + private readonly List _hardware = new(); + private readonly StringBuilder _report = new(); public AeroCoolGroup(ISettings settings) { @@ -22,7 +22,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AeroCool foreach (HidDevice dev in DeviceList.Local.GetHidDevices(0x2E97)) { int hubno = dev.ProductID - 0x1000; - if (dev.DevicePath.Contains("mi_02") && (hubno >= 1) && (hubno <= 8)) + if (dev.DevicePath.Contains("mi_02") && hubno is >= 1 and <= 8) { var device = new P7H1(dev, settings); _report.AppendLine($"Device name: {device.Name}"); diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/P7-H1.cs b/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/P7-H1.cs index 57cb955..d3323b0 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/P7-H1.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AeroCool/P7-H1.cs @@ -67,8 +67,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AeroCool { for (int i = 0; i < 5; i++) { - int speed = inputReportBuffer[i * 3 + 2] * 256 + inputReportBuffer[i * 3 + 3]; - _speeds[i] = speed; + _speeds[i] = (inputReportBuffer[(i * 3) + 2] * 256) + inputReportBuffer[(i * 3) + 3]; } } } diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs index 69c78a8..c2a18dd 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquaComputerGroup.cs @@ -11,8 +11,8 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer { public class AquaComputerGroup : IGroup { - private readonly List _hardware = new List(); - private readonly StringBuilder _report = new StringBuilder(); + private readonly List _hardware = new(); + private readonly StringBuilder _report = new(); public AquaComputerGroup(ISettings settings) { @@ -27,50 +27,44 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer switch (dev.ProductID) { case 0xF00E: - { - var device = new D5Next(dev, settings); + var d5Next = new D5Next(dev, settings); _report.AppendLine($"Device name: {productName}"); - _report.AppendLine($"Firmware version: {device.FirmwareVersion}"); + _report.AppendLine($"Firmware version: {d5Next.FirmwareVersion}"); _report.AppendLine(); - _hardware.Add(device); + _hardware.Add(d5Next); break; - } + case 0xf0b6: - { - var device = new AquastreamXT(dev, settings); + var aquastreamXt = new AquastreamXT(dev, settings); _report.AppendLine($"Device name: {productName}"); - _report.AppendLine($"Device variant: {device.Variant}"); - _report.AppendLine($"Firmware version: {device.FirmwareVersion}"); - _report.AppendLine($"{device.Status}"); + _report.AppendLine($"Device variant: {aquastreamXt.Variant}"); + _report.AppendLine($"Firmware version: {aquastreamXt.FirmwareVersion}"); + _report.AppendLine($"{aquastreamXt.Status}"); _report.AppendLine(); - _hardware.Add(device); + _hardware.Add(aquastreamXt); break; - } + case 0xf003: - { - var device = new MPS(dev, settings); + var mps = new MPS(dev, settings); _report.AppendLine($"Device name: {productName}"); - _report.AppendLine($"Firmware version: {device.FirmwareVersion}"); - _report.AppendLine($"{device.Status}"); + _report.AppendLine($"Firmware version: {mps.FirmwareVersion}"); + _report.AppendLine($"{mps.Status}"); _report.AppendLine(); - _hardware.Add(device); + _hardware.Add(mps); break; - } + case 0xF011: - { - var device = new Octo(dev, settings); + var octo = new Octo(dev, settings); _report.AppendLine($"Device name: {productName}"); - _report.AppendLine($"Firmware version: {device.FirmwareVersion}"); + _report.AppendLine($"Firmware version: {octo.FirmwareVersion}"); _report.AppendLine(); - _hardware.Add(device); + _hardware.Add(octo); break; - } + default: - { _report.AppendLine($"Unknown Hardware PID: {dev.ProductID} Name: {productName}"); _report.AppendLine(); break; - } } } diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquastreamXT.cs b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquastreamXT.cs index c79d9bb..25c05bf 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquastreamXT.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/AquastreamXT.cs @@ -40,37 +40,36 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer Name = $"Aquastream XT {Variant}"; FirmwareVersion = BitConverter.ToUInt16(_rawData, 50); - _temperatures[0] = new Sensor("External Fan VRM", 0, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[0] = new Sensor("External Fan VRM", 0, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[0]); - _temperatures[1] = new Sensor("External", 1, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[1] = new Sensor("External", 1, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[1]); - _temperatures[2] = new Sensor("Internal Water", 2, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[2] = new Sensor("Internal Water", 2, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[2]); - _voltages[0] = new Sensor("External Fan", 1, SensorType.Voltage, this, new ParameterDescription[0], settings); + _voltages[0] = new Sensor("External Fan", 1, SensorType.Voltage, this, Array.Empty(), settings); ActivateSensor(_voltages[0]); - _voltages[1] = new Sensor("Pump", 2, SensorType.Voltage, this, new ParameterDescription[0], settings); + _voltages[1] = new Sensor("Pump", 2, SensorType.Voltage, this, Array.Empty(), settings); ActivateSensor(_voltages[1]); - _pumpPower = new Sensor("Pump", 0, SensorType.Power, this, new ParameterDescription[0], settings); + _pumpPower = new Sensor("Pump", 0, SensorType.Power, this, Array.Empty(), settings); ActivateSensor(_pumpPower); - _pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, new ParameterDescription[0], settings); + _pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, Array.Empty(), settings); ActivateSensor(_pumpFlow); - _rpmSensors[0] = new Sensor("External Fan", 0, SensorType.Fan, this, new ParameterDescription[0], settings); + _rpmSensors[0] = new Sensor("External Fan", 0, SensorType.Fan, this, Array.Empty(), settings); ActivateSensor(_rpmSensors[0]); - _rpmSensors[1] = new Sensor("Pump", 1, SensorType.Fan, this, new ParameterDescription[0], settings); + _rpmSensors[1] = new Sensor("Pump", 1, SensorType.Fan, this, Array.Empty(), settings); ActivateSensor(_rpmSensors[1]); - _fanControl = new Sensor("External Fan", 0, SensorType.Control, this, new ParameterDescription[0], settings); - Control control = new Control(_fanControl, settings, 0, 100); - _fanControl.Control = control; + _fanControl = new Sensor("External Fan", 0, SensorType.Control, this, Array.Empty(), settings); + _fanControl.Control = new Control(_fanControl, settings, 0, 100); ActivateSensor(_fanControl); - _frequencies[0] = new Sensor("Pump Frequency", 0, SensorType.Frequency, this, new ParameterDescription[0], settings); + _frequencies[0] = new Sensor("Pump Frequency", 0, SensorType.Frequency, this, Array.Empty(), settings); ActivateSensor(_frequencies[0]); - _frequencies[1] = new Sensor("Pump MaxFrequency", 1, SensorType.Frequency, this, new ParameterDescription[0], settings); + _frequencies[1] = new Sensor("Pump MaxFrequency", 1, SensorType.Frequency, this, Array.Empty(), settings); ActivateSensor(_frequencies[1]); } } @@ -107,7 +106,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer if (mode.HasFlag(MODE.MODE_FAN_AMP)) return "Advanced"; - return "Standard"; } } @@ -128,7 +126,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer if (_rawData[0] != 0x4) return; - //var rawSensorsFan = BitConverter.ToUInt16(rawData, 1); //unknown - redundant? //var rawSensorsExt = BitConverter.ToUInt16(rawData, 3); //unknown - redundant? //var rawSensorsWater = BitConverter.ToUInt16(rawData, 5); //unknown - redundant? diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/D5Next.cs b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/D5Next.cs index cd1d011..b145046 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/D5Next.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/D5Next.cs @@ -34,15 +34,15 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer Name = $"D5Next"; FirmwareVersion = Convert.ToUInt16(_rawData[14] | (_rawData[13] << 8)); - _temperatures[0] = new Sensor("Water Temperature", 0, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[0] = new Sensor("Water Temperature", 0, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[0]); - - _rpmSensors[0] = new Sensor("Pump", 0, SensorType.Fan, this, new ParameterDescription[0], settings); + + _rpmSensors[0] = new Sensor("Pump", 0, SensorType.Fan, this, Array.Empty(), settings); ActivateSensor(_rpmSensors[0]); } } - public ushort FirmwareVersion { get; private set; } + public ushort FirmwareVersion { get; } public override HardwareType HardwareType { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/MPS.cs b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/MPS.cs index e76f007..ca82b3c 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/MPS.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/MPS.cs @@ -16,7 +16,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer private readonly byte[] _rawData = new byte[64]; private readonly HidStream _stream; private readonly Sensor[] _temperatures = new Sensor[2]; - + private ushort _externalTemperature; public MPS(HidDevice dev, ISettings settings) : base("MPS", new Identifier(dev.DevicePath), settings) @@ -33,12 +33,12 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer Name = "MPS"; FirmwareVersion = ExtractFirmwareVersion(); - _temperatures[0] = new Sensor("External", 0, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[0] = new Sensor("External", 0, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[0]); - _temperatures[1] = new Sensor("Internal Water", 1, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[1] = new Sensor("Internal Water", 1, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[1]); - _pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, new ParameterDescription[0], settings); + _pumpFlow = new Sensor("Pump", 0, SensorType.Flow, this, Array.Empty(), settings); ActivateSensor(_pumpFlow); } } @@ -79,7 +79,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer if (_rawData[0] != MPS_REPORT_ID) return; - _pumpFlow.Value = BitConverter.ToUInt16(_rawData, MPSDataIndexes.PumpFlow) / 10f; _externalTemperature = BitConverter.ToUInt16(_rawData, MPSDataIndexes.ExternalTemperature); diff --git a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/Octo.cs b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/Octo.cs index 12613c1..5f9a5f4 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/Octo.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/AquaComputer/Octo.cs @@ -69,7 +69,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.AquaComputer } } - public ushort FirmwareVersion { get; private set; } + public ushort FirmwareVersion { get; } public override HardwareType HardwareType { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/Heatmaster.cs b/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/Heatmaster.cs index a575660..a5b1e5b 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/Heatmaster.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/Heatmaster.cs @@ -17,7 +17,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster internal sealed class Heatmaster : Hardware, IDisposable { private readonly bool _available; - private readonly StringBuilder _buffer = new StringBuilder(); + private readonly StringBuilder _buffer = new(); private readonly Sensor[] _controls; private readonly Sensor[] _fans; private readonly int _firmwareCrc; @@ -117,7 +117,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster private string ReadLine(int timeout) { int i = 0; - StringBuilder builder = new StringBuilder(); + StringBuilder builder = new(); while (i <= timeout) { while (_serialPort.BytesToRead > 0) @@ -160,7 +160,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster if (s != null && s[0] == '"' && s[s.Length - 1] == '"') return s.Substring(1, s.Length - 2); - return null; } @@ -170,7 +169,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster if (int.TryParse(s, out int i)) return i; - return 0; } @@ -194,54 +192,50 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster private void ProcessUpdateLine(string line) { Match match = Regex.Match(line, @">\[0:(\d+)\]([0-9:\|-]+)"); - if (match.Success) + if (match.Success && int.TryParse(match.Groups[1].Value, out int device)) { - if (int.TryParse(match.Groups[1].Value, out int device)) + foreach (string s in match.Groups[2].Value.Split('|')) { - foreach (string s in match.Groups[2].Value.Split('|')) + string[] strings = s.Split(':'); + int[] ints = new int[strings.Length]; + bool valid = true; + for (int i = 0; i < ints.Length; i++) { - string[] strings = s.Split(':'); - int[] ints = new int[strings.Length]; - bool valid = true; - for (int i = 0; i < ints.Length; i++) + if (!int.TryParse(strings[i], out ints[i])) { - if (!int.TryParse(strings[i], out ints[i])) + valid = false; + break; + } + } + + if (!valid) + continue; + + switch (device) + { + case 32: + if (ints.Length == 3 && ints[0] <= _fans.Length) { - valid = false; - break; + _fans[ints[0] - 1].Value = ints[1]; + _controls[ints[0] - 1].Value = (100 / 255.0f) * ints[2]; } - } - if (!valid) - continue; + break; + case 48: + if (ints.Length == 2 && ints[0] <= _temperatures.Length) + _temperatures[ints[0] - 1].Value = 0.1f * ints[1]; + break; + case 64: + if (ints.Length == 3 && ints[0] <= _flows.Length) + _flows[ints[0] - 1].Value = 0.1f * ints[1]; - switch (device) - { - case 32: - if (ints.Length == 3 && ints[0] <= _fans.Length) - { - _fans[ints[0] - 1].Value = ints[1]; - _controls[ints[0] - 1].Value = (100 / 255.0f) * ints[2]; - } + break; + case 80: + if (ints.Length == 2 && ints[0] <= _relays.Length) + _relays[ints[0] - 1].Value = 100 * ints[1]; - break; - case 48: - if (ints.Length == 2 && ints[0] <= _temperatures.Length) - _temperatures[ints[0] - 1].Value = 0.1f * ints[1]; - - break; - case 64: - if (ints.Length == 3 && ints[0] <= _flows.Length) - _flows[ints[0] - 1].Value = 0.1f * ints[1]; - - break; - case 80: - if (ints.Length == 2 && ints[0] <= _relays.Length) - _relays[ints[0] - 1].Value = 100 * ints[1]; - - break; - } + break; } } } @@ -252,7 +246,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster if (!_available) return; - while (_serialPort.IsOpen && _serialPort.BytesToRead > 0) { byte b = (byte)_serialPort.ReadByte(); @@ -270,7 +263,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster public override string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("Heatmaster"); r.AppendLine(); r.Append("Port: "); diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs index 7ba0a1a..9040f50 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Heatmaster/HeatmasterGroup.cs @@ -17,8 +17,8 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster { internal class HeatmasterGroup : IGroup { - private readonly List _hardware = new List(); - private readonly StringBuilder _report = new StringBuilder(); + private readonly List _hardware = new(); + private readonly StringBuilder _report = new(); public HeatmasterGroup(ISettings settings) { @@ -26,14 +26,13 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster if (Software.OperatingSystem.IsUnix) return; - string[] portNames = GetRegistryPortNames(); for (int i = 0; i < portNames.Length; i++) { bool isValid = false; try { - using (SerialPort serialPort = new SerialPort(portNames[i], 38400, Parity.None, 8, StopBits.One)) + using (SerialPort serialPort = new(portNames[i], 38400, Parity.None, 8, StopBits.One)) { serialPort.NewLine = ((char)0x0D).ToString(); _report.Append("Port Name: "); @@ -137,7 +136,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster { if (_report.Length > 0) { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("Serial Port Heatmaster"); r.AppendLine(); r.Append(_report); @@ -157,7 +156,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster private static string ReadLine(SerialPort port, int timeout) { int i = 0; - StringBuilder builder = new StringBuilder(); + StringBuilder builder = new(); while (i < timeout) { while (port.BytesToRead > 0) @@ -182,7 +181,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Heatmaster private static string[] GetRegistryPortNames() { - List result = new List(); + List result = new(); string[] paths = { string.Empty, "&MI_00" }; try { diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs index 1b346dc..f9ec5d7 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/KrakenX3.cs @@ -59,7 +59,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt Name = "Nzxt Kraken X3"; - _pump = new Sensor("Pump Control", 0, SensorType.Control, this, new ParameterDescription[0], settings); + _pump = new Sensor("Pump Control", 0, SensorType.Control, this, Array.Empty(), settings); _pumpControl = new Control(_pump, settings, 0, 100); _pump.Control = _pumpControl; _pumpControl.ControlModeChanged += SoftwareControlValueChanged; @@ -67,17 +67,17 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt SoftwareControlValueChanged(_pumpControl); ActivateSensor(_pump); - _pumpRpm = new Sensor("Pump", 0, SensorType.Fan, this, new ParameterDescription[0], settings); + _pumpRpm = new Sensor("Pump", 0, SensorType.Fan, this, Array.Empty(), settings); ActivateSensor(_pumpRpm); - _temperature = new Sensor("Internal Water", 0, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperature = new Sensor("Internal Water", 0, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperature); ThreadPool.UnsafeQueueUserWorkItem(ContinuousRead, _rawData); } } - public string FirmwareVersion { get; private set; } + public string FirmwareVersion { get; } public override HardwareType HardwareType => HardwareType.Cooler; @@ -141,7 +141,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt { if (_rawData[0] == 0x75 && _rawData[1] == 0x02) { - _temperature.Value = _rawData[15] + _rawData[16] / 10.0f; + _temperature.Value = _rawData[15] + (_rawData[16] / 10.0f); _pumpRpm.Value = (_rawData[18] << 8) | _rawData[17]; // The following logic makes sure the pump is set to the controlling value. This pump sometimes sets itself to 0% when instructed to a value. diff --git a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs index 4349d58..7b9efa7 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/Nzxt/NzxtGroup.cs @@ -11,8 +11,8 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt { internal class NzxtGroup : IGroup { - private readonly List _hardware = new List(); - private readonly StringBuilder _report = new StringBuilder(); + private readonly List _hardware = new(); + private readonly StringBuilder _report = new(); public NzxtGroup(ISettings settings) { @@ -26,7 +26,6 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt switch (dev.ProductID) { case 0x2007: - { var device = new KrakenX3(dev, settings); _report.AppendLine($"Device name: {productName}"); _report.AppendLine($"Firmware version: {device.FirmwareVersion}"); @@ -34,13 +33,11 @@ namespace LibreHardwareMonitor.Hardware.Controller.Nzxt _report.AppendLine(); _hardware.Add(device); break; - } + default: - { _report.AppendLine($"Unknown Hardware PID: {dev.ProductID} Name: {productName}"); _report.AppendLine(); break; - } } } diff --git a/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancer.cs b/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancer.cs index c3d306f..c9eb236 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancer.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancer.cs @@ -4,6 +4,7 @@ // Partial Copyright (C) Michael Möller and Contributors. // All Rights Reserved. +using System; using System.Collections.Generic; using System.Globalization; using System.Text; @@ -21,7 +22,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer private readonly MethodDelegate _alternativeRequest; private readonly Sensor[] _analogTemperatures = new Sensor[4]; private readonly Sensor[] _controls = new Sensor[4]; - private readonly List _deactivating = new List(); + private readonly List _deactivating = new(); private readonly Sensor[] _digitalTemperatures = new Sensor[8]; private readonly Sensor[] _fans = new Sensor[4]; private readonly Sensor[] _miniNgControls = new Sensor[4]; @@ -31,10 +32,10 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer private readonly byte _protocolVersion; private readonly Sensor[] _sensorHubFlows = new Sensor[2]; private readonly Sensor[] _sensorHubTemperatures = new Sensor[6]; - private byte[] _alternativeData = new byte[0]; + private byte[] _alternativeData = Array.Empty(); private readonly byte[] _data = new byte[285]; private Ftd2xx.FT_HANDLE _handle; - private byte[] _primaryData = new byte[0]; + private byte[] _primaryData = Array.Empty(); public TBalancer(int portIndex, byte protocolVersion, ISettings settings) : base("T-Balancer bigNG", new Identifier("bigng", portIndex.ToString(CultureInfo.InvariantCulture)), settings) @@ -60,7 +61,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer offset += _sensorHubTemperatures.Length; for (int i = 0; i < _miniNgTemperatures.Length; i++) - _miniNgTemperatures[i] = new Sensor("miniNG #" + (i / 2 + 1) + " Sensor " + (i % 2 + 1), offset + i, SensorType.Temperature, this, parameter, settings); + _miniNgTemperatures[i] = new Sensor("miniNG #" + ((i / 2) + 1) + " Sensor " + ((i % 2) + 1), offset + i, SensorType.Temperature, this, parameter, settings); for (int i = 0; i < _sensorHubFlows.Length; i++) { @@ -79,7 +80,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer for (int i = 0; i < _miniNgControls.Length; i++) { - _miniNgControls[i] = new Sensor("miniNG #" + (i / 2 + 1) + " Fan Channel " + (i % 2 + 1), 4 + i, SensorType.Control, this, settings); + _miniNgControls[i] = new Sensor("miniNG #" + ((i / 2) + 1) + " Fan Channel " + ((i % 2) + 1), 4 + i, SensorType.Control, this, settings); } _alternativeRequest = DelayedAlternativeRequest; @@ -114,18 +115,17 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer private void ReadMiniNg(int number) { - int offset = 1 + number * 65; + int offset = 1 + (number * 65); if (_data[offset + 61] != EndFlag) return; - for (int i = 0; i < 2; i++) { - Sensor sensor = _miniNgTemperatures[number * 2 + i]; + Sensor sensor = _miniNgTemperatures[(number * 2) + i]; if (_data[offset + 7 + i] > 0) { - sensor.Value = 0.5f * _data[offset + 7 + i] + + sensor.Value = (0.5f * _data[offset + 7 + i]) + sensor.Parameters[0].Value; ActivateSensor(sensor); @@ -138,17 +138,17 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer for (int i = 0; i < 2; i++) { - if (_miniNgFans[number * 2 + i] == null) - _miniNgFans[number * 2 + i] = new Sensor("miniNG #" + (number + 1) + " Fan Channel " + (i + 1), 4 + number * 2 + i, SensorType.Fan, this, _settings); + if (_miniNgFans[(number * 2) + i] == null) + _miniNgFans[(number * 2) + i] = new Sensor("miniNG #" + (number + 1) + " Fan Channel " + (i + 1), 4 + (number * 2) + i, SensorType.Fan, this, _settings); - Sensor sensor = _miniNgFans[number * 2 + i]; - sensor.Value = 20.0f * _data[offset + 43 + 2 * i]; + Sensor sensor = _miniNgFans[(number * 2) + i]; + sensor.Value = 20.0f * _data[offset + 43 + (2 * i)]; ActivateSensor(sensor); } for (int i = 0; i < 2; i++) { - Sensor sensor = _miniNgControls[number * 2 + i]; + Sensor sensor = _miniNgControls[(number * 2) + i]; sensor.Value = _data[offset + 15 + i]; ActivateSensor(sensor); } @@ -163,14 +163,13 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer return; } - if (_data[1] == 255 || _data[1] == 88) + if (_data[1] is 255 or 88) { // bigNG if (_data[274] != _protocolVersion) return; - if (_primaryData.Length == 0) _primaryData = new byte[_data.Length]; @@ -180,7 +179,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer { if (_data[238 + i] > 0) { - _digitalTemperatures[i].Value = 0.5f * _data[238 + i] + _digitalTemperatures[i].Parameters[0].Value; + _digitalTemperatures[i].Value = (0.5f * _data[238 + i]) + _digitalTemperatures[i].Parameters[0].Value; ActivateSensor(_digitalTemperatures[i]); } else @@ -193,7 +192,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer { if (_data[260 + i] > 0) { - _analogTemperatures[i].Value = 0.5f * _data[260 + i] + _analogTemperatures[i].Parameters[0].Value; + _analogTemperatures[i].Value = (0.5f * _data[260 + i]) + _analogTemperatures[i].Parameters[0].Value; ActivateSensor(_analogTemperatures[i]); } else @@ -206,7 +205,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer { if (_data[246 + i] > 0) { - _sensorHubTemperatures[i].Value = 0.5f * _data[246 + i] + _sensorHubTemperatures[i].Parameters[0].Value; + _sensorHubTemperatures[i].Value = (0.5f * _data[246 + i]) + _sensorHubTemperatures[i].Parameters[0].Value; ActivateSensor(_sensorHubTemperatures[i]); } else @@ -232,7 +231,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer for (int i = 0; i < _fans.Length; i++) { - float maxRpm = 11.5f * ((_data[149 + 2 * i] << 8) | _data[148 + 2 * i]); + float maxRpm = 11.5f * ((_data[149 + (2 * i)] << 8) | _data[148 + (2 * i)]); if (_fans[i] == null) { @@ -278,7 +277,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer public override string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("T-Balancer bigNG"); r.AppendLine(); diff --git a/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs b/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs index 380fb81..236b26b 100644 --- a/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Controller/TBalancer/TBalancerGroup.cs @@ -17,12 +17,13 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer { internal class TBalancerGroup : IGroup { - private readonly List _hardware = new List(); - private readonly StringBuilder _report = new StringBuilder(); + private readonly List _hardware = new(); + private readonly StringBuilder _report = new(); public TBalancerGroup(ISettings settings) { uint numDevices; + try { if (!Ftd2xx.DllExists()) @@ -37,7 +38,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer return; } } - catch (Exception e) when (e is DllNotFoundException || e is ArgumentNullException || e is EntryPointNotFoundException || e is BadImageFormatException) + catch (Exception e) when (e is DllNotFoundException or ArgumentNullException or EntryPointNotFoundException or BadImageFormatException) { return; } @@ -160,7 +161,7 @@ namespace LibreHardwareMonitor.Hardware.Controller.TBalancer { if (_report.Length > 0) { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("FTD2XX"); r.AppendLine(); r.Append(_report); diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/Amd0FCpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/Amd0FCpu.cs index 718f6af..b074bab 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/Amd0FCpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/Amd0FCpu.cs @@ -4,6 +4,7 @@ // Partial Copyright (C) Michael Möller and Contributors. // All Rights Reserved. +using System; using System.Globalization; using System.Text; using System.Threading; @@ -26,7 +27,7 @@ namespace LibreHardwareMonitor.Hardware.CPU // AM2+ 65nm +21 offset uint model = cpuId[0][0].Model; - if (model >= 0x69 && model != 0xc1 && model != 0x6c && model != 0x7c) + if (model is >= 0x69 and not 0xc1 and not 0x6c and not 0x7c) offset += 21; if (model < 40) @@ -58,7 +59,7 @@ namespace LibreHardwareMonitor.Hardware.CPU } else { - _coreTemperatures = new Sensor[0]; + _coreTemperatures = Array.Empty(); } _miscellaneousControlAddress = GetPciAddress(MISCELLANEOUS_CONTROL_FUNCTION, MISCELLANEOUS_CONTROL_DEVICE_ID); @@ -81,7 +82,7 @@ namespace LibreHardwareMonitor.Hardware.CPU public override string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.Append(base.GetReport()); r.Append("Miscellaneous Control Address: 0x"); r.AppendLine(_miscellaneousControlAddress.ToString("X", CultureInfo.InvariantCulture)); @@ -92,7 +93,7 @@ namespace LibreHardwareMonitor.Hardware.CPU public override void Update() { base.Update(); - + if (Ring0.WaitPciBusMutex(10)) { if (_miscellaneousControlAddress != Interop.Ring0.INVALID_PCI_ADDRESS) @@ -119,7 +120,6 @@ namespace LibreHardwareMonitor.Hardware.CPU Ring0.ReleasePciBusMutex(); } - if (HasTimeStampCounter) { double newBusClock = 0; @@ -156,7 +156,6 @@ namespace LibreHardwareMonitor.Hardware.CPU private const uint FIDVID_STATUS = 0xC0010042; private const ushort MISCELLANEOUS_CONTROL_DEVICE_ID = 0x1103; private const byte MISCELLANEOUS_CONTROL_FUNCTION = 3; - private const uint THERMTRIP_STATUS_REGISTER = 0xE4; // ReSharper restore InconsistentNaming } diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs index dc573be..7f4ee50 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs @@ -22,14 +22,13 @@ namespace LibreHardwareMonitor.Hardware.CPU private readonly Sensor _coreVoltage; private readonly byte _cStatesIoOffset; private readonly Sensor[] _cStatesResidency; - private readonly bool _isSvi2; private readonly bool _hasSmuTemperatureRegister; + private readonly bool _isSvi2; private readonly uint _miscellaneousControlAddress; private readonly Sensor _northbridgeVoltage; private readonly FileStream _temperatureStream; private readonly double _timeStampCounterMultiplier; - public Amd10Cpu(int processorIndex, CpuId[][] cpuId, ISettings settings) : base(processorIndex, cpuId, settings) { // AMD family 1Xh processors support only one temperature sensor @@ -45,91 +44,54 @@ namespace LibreHardwareMonitor.Hardware.CPU switch (_family) { case 0x10: - { miscellaneousControlDeviceId = FAMILY_10H_MISCELLANEOUS_CONTROL_DEVICE_ID; break; - } case 0x11: - { miscellaneousControlDeviceId = FAMILY_11H_MISCELLANEOUS_CONTROL_DEVICE_ID; break; - } case 0x12: - { miscellaneousControlDeviceId = FAMILY_12H_MISCELLANEOUS_CONTROL_DEVICE_ID; break; - } case 0x14: - { miscellaneousControlDeviceId = FAMILY_14H_MISCELLANEOUS_CONTROL_DEVICE_ID; break; - } case 0x15: - { switch (_model & 0xF0) { case 0x00: - { miscellaneousControlDeviceId = FAMILY_15H_MODEL_00_MISC_CONTROL_DEVICE_ID; break; - } case 0x10: - { miscellaneousControlDeviceId = FAMILY_15H_MODEL_10_MISC_CONTROL_DEVICE_ID; break; - } case 0x30: - { miscellaneousControlDeviceId = FAMILY_15H_MODEL_30_MISC_CONTROL_DEVICE_ID; break; - } case 0x70: - { miscellaneousControlDeviceId = FAMILY_15H_MODEL_70_MISC_CONTROL_DEVICE_ID; _hasSmuTemperatureRegister = true; break; - } - case 0x60: - { + case 0x60: miscellaneousControlDeviceId = FAMILY_15H_MODEL_60_MISC_CONTROL_DEVICE_ID; _hasSmuTemperatureRegister = true; break; - } default: - { miscellaneousControlDeviceId = 0; break; - } } + break; - } case 0x16: - { - switch (_model & 0xF0) + miscellaneousControlDeviceId = (_model & 0xF0) switch { - case 0x00: - { - miscellaneousControlDeviceId = FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID; - break; - } - case 0x30: - { - miscellaneousControlDeviceId = FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID; - break; - } - default: - { - miscellaneousControlDeviceId = 0; - break; - } - } + 0x00 => FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID, + 0x30 => FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID, + _ => 0, + }; break; - } default: - { miscellaneousControlDeviceId = 0; break; - } } // get the pci address for the Miscellaneous Control registers @@ -146,7 +108,7 @@ namespace LibreHardwareMonitor.Hardware.CPU bool corePerformanceBoostSupport = (cpuId[0][0].ExtData[7, 3] & (1 << 9)) > 0; // set affinity to the first thread for all frequency estimations - var previousAffinity = ThreadAffinity.Set(cpuId[0][0].Affinity); + GroupAffinity previousAffinity = ThreadAffinity.Set(cpuId[0][0].Affinity); // disable core performance boost Ring0.ReadMsr(HWCR, out uint hwcrEax, out uint hwcrEdx); @@ -174,25 +136,23 @@ namespace LibreHardwareMonitor.Hardware.CPU if (Software.OperatingSystem.IsUnix) { - string[] devicePaths = Directory.GetDirectories("/sys/class/hwmon/"); - foreach (string path in devicePaths) + foreach (string path in Directory.GetDirectories("/sys/class/hwmon/")) { string name = null; try { - using StreamReader reader = new StreamReader(path + "/device/name"); + using StreamReader reader = new(path + "/device/name"); name = reader.ReadLine(); } catch (IOException) { } - switch (name) + _temperatureStream = name switch { - case "k10temp": - _temperatureStream = new FileStream(path + "/device/temp1_input", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - break; - } + "k10temp" => new FileStream(path + "/device/temp1_input", FileMode.Open, FileAccess.Read, FileShare.ReadWrite), + _ => _temperatureStream + }; } } @@ -203,7 +163,7 @@ namespace LibreHardwareMonitor.Hardware.CPU if (dev == 0x43851002) _cStatesIoOffset = (byte)((rev & 0xFF) < 0x40 ? 0xB3 : 0x9C); - else if (dev == 0x780B1022 || dev == 0x790B1022) + else if (dev is 0x780B1022 or 0x790B1022) _cStatesIoOffset = 0x9C; } @@ -224,7 +184,7 @@ namespace LibreHardwareMonitor.Hardware.CPU EstimateTimeStampCounterMultiplier(0); // estimate the multiplier - List estimate = new List(3); + List estimate = new(3); for (int i = 0; i < 3; i++) estimate.Add(EstimateTimeStampCounterMultiplier(0.025)); @@ -278,7 +238,7 @@ namespace LibreHardwareMonitor.Hardware.CPU public override string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.Append(base.GetReport()); r.Append("Miscellaneous Control Address: 0x"); r.AppendLine(_miscellaneousControlAddress.ToString("X", CultureInfo.InvariantCulture)); @@ -297,73 +257,50 @@ namespace LibreHardwareMonitor.Hardware.CPU private double GetCoreMultiplier(uint cofVidEax) { + uint cpuDid; + uint cpuFid; + switch (_family) { case 0x10: case 0x11: case 0x15: case 0x16: - { // 8:6 CpuDid: current core divisor ID // 5:0 CpuFid: current core frequency ID - uint cpuDid = (cofVidEax >> 6) & 7; - uint cpuFid = cofVidEax & 0x1F; + cpuDid = (cofVidEax >> 6) & 7; + cpuFid = cofVidEax & 0x1F; return 0.5 * (cpuFid + 0x10) / (1 << (int)cpuDid); - } + case 0x12: - { // 8:4 CpuFid: current CPU core frequency ID // 3:0 CpuDid: current CPU core divisor ID - uint cpuFid = (cofVidEax >> 4) & 0x1F; - uint cpuDid = cofVidEax & 0xF; - double divisor; - switch (cpuDid) + cpuFid = (cofVidEax >> 4) & 0x1F; + cpuDid = cofVidEax & 0xF; + double divisor = cpuDid switch { - case 0: - divisor = 1; - break; - case 1: - divisor = 1.5; - break; - case 2: - divisor = 2; - break; - case 3: - divisor = 3; - break; - case 4: - divisor = 4; - break; - case 5: - divisor = 6; - break; - case 6: - divisor = 8; - break; - case 7: - divisor = 12; - break; - case 8: - divisor = 16; - break; - default: - divisor = 1; - break; - } - + 0 => 1, + 1 => 1.5, + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 6, + 6 => 8, + 7 => 12, + 8 => 16, + _ => 1, + }; return (cpuFid + 0x10) / divisor; - } + case 0x14: - { // 8:4: current CPU core divisor ID most significant digit // 3:0: current CPU core divisor ID least significant digit uint divisorIdMsd = (cofVidEax >> 4) & 0x1F; uint divisorIdLsd = cofVidEax & 0xF; Ring0.ReadPciConfig(_miscellaneousControlAddress, CLOCK_POWER_TIMING_CONTROL_0_REGISTER, out uint value); uint frequencyId = value & 0x1F; - return (frequencyId + 0x10) / - (divisorIdMsd + (divisorIdLsd * 0.25) + 1); - } + return (frequencyId + 0x10) / (divisorIdMsd + (divisorIdLsd * 0.25) + 1); + default: return 1; } @@ -371,13 +308,13 @@ namespace LibreHardwareMonitor.Hardware.CPU private static string ReadFirstLine(Stream stream) { - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = new(); try { stream.Seek(0, SeekOrigin.Begin); int b = stream.ReadByte(); - while (b != -1 && b != 10) + while (b is not (-1) and not 10) { stringBuilder.Append((char)b); b = stream.ReadByte(); @@ -407,16 +344,16 @@ namespace LibreHardwareMonitor.Hardware.CPU { if (_family == 0x15 && (_model & 0xF0) == 0x00) { - _coreTemperature.Value = ((value >> 21) & 0x7FC) / 8.0f + _coreTemperature.Parameters[0].Value - 49; + _coreTemperature.Value = (((value >> 21) & 0x7FC) / 8.0f) + _coreTemperature.Parameters[0].Value - 49; } else { - _coreTemperature.Value = ((value >> 21) & 0x7FF) / 8.0f + _coreTemperature.Parameters[0].Value - 49; + _coreTemperature.Value = (((value >> 21) & 0x7FF) / 8.0f) + _coreTemperature.Parameters[0].Value - 49; } } else { - _coreTemperature.Value = ((value >> 21) & 0x7FF) / 8.0f + _coreTemperature.Parameters[0].Value; + _coreTemperature.Value = (((value >> 21) & 0x7FF) / 8.0f) + _coreTemperature.Parameters[0].Value; } ActivateSensor(_coreTemperature); @@ -466,14 +403,15 @@ namespace LibreHardwareMonitor.Hardware.CPU _coreClocks[i].Value = (float)TimeStampCounterFrequency; } - float SVI2Volt(uint vid) => vid < 0b1111_1000 ? 1.5500f - 0.00625f * vid : 0; - float SVI1Volt(uint vid) => vid < 0x7C ? 1.550f - 0.0125f * vid : 0; + float SVI2Volt(uint vid) => vid < 0b1111_1000 ? 1.5500f - (0.00625f * vid) : 0; + + float SVI1Volt(uint vid) => vid < 0x7C ? 1.550f - (0.0125f * vid) : 0; float newCoreVoltage, newNbVoltage; uint coreVid60 = (curEax >> 9) & 0x7F; if (_isSvi2) { - newCoreVoltage = SVI2Volt(curEax >> 13 & 0x80 | coreVid60); + newCoreVoltage = SVI2Volt((curEax >> 13 & 0x80) | coreVid60); newNbVoltage = SVI2Volt(curEax >> 24); } else @@ -560,7 +498,6 @@ namespace LibreHardwareMonitor.Hardware.CPU private const ushort FAMILY_15H_MODEL_70_MISC_CONTROL_DEVICE_ID = 0x15B3; private const ushort FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1533; private const ushort FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x1583; - // ReSharper restore InconsistentNaming } } diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs index 72d3dbf..ef3d0af 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs @@ -107,7 +107,7 @@ namespace LibreHardwareMonitor.Hardware.CPU private readonly Sensor _packagePower; private readonly Dictionary, Sensor> _smuSensors = new(); private readonly Sensor _socVoltage; - + private Sensor _ccdsAverageTemperature; private Sensor _ccdsMaxTemperature; private DateTime _lastPwrTime = new(0); @@ -186,26 +186,22 @@ namespace LibreHardwareMonitor.Hardware.CPU switch (cpuId.Model) { case 0x31: // Threadripper 3000. - { sviPlane0Offset = F17H_M01H_SVI + 0x14; sviPlane1Offset = F17H_M01H_SVI + 0x10; supportsPerCcdTemperatures = true; break; - } + case 0x71: // Zen 2. case 0x21: // Zen 3. - { sviPlane0Offset = F17H_M01H_SVI + 0x10; sviPlane1Offset = F17H_M01H_SVI + 0xC; supportsPerCcdTemperatures = true; break; - } + default: // Zen and Zen+. - { sviPlane0Offset = F17H_M01H_SVI + 0xC; sviPlane1Offset = F17H_M01H_SVI + 0x10; break; - } } // SVI0_PLANE0_VDDCOR [24:16] @@ -348,17 +344,17 @@ namespace LibreHardwareMonitor.Hardware.CPU if ((smuSvi0Tfn & 0x01) == 0) { svi0PlaneXVddCor = (smuSvi0TelPlane0 >> 16) & 0xff; - vcc = 1.550 - vidStep * svi0PlaneXVddCor; + vcc = 1.550 - (vidStep * svi0PlaneXVddCor); _coreVoltage.Value = (float)vcc; _cpu.ActivateSensor(_coreVoltage); } // SoC (0x02), not every Zen cpu has this voltage. - if (cpuId.Model == 0x11 || cpuId.Model == 0x21 || cpuId.Model == 0x71 || cpuId.Model == 0x31 || (smuSvi0Tfn & 0x02) == 0) + if (cpuId.Model is 0x11 or 0x21 or 0x71 or 0x31 || (smuSvi0Tfn & 0x02) == 0) { svi0PlaneXVddCor = (smuSvi0TelPlane1 >> 16) & 0xff; - vcc = 1.550 - vidStep * svi0PlaneXVddCor; + vcc = 1.550 - (vidStep * svi0PlaneXVddCor); _socVoltage.Value = (float)vcc; _cpu.ActivateSensor(_socVoltage); @@ -375,7 +371,7 @@ namespace LibreHardwareMonitor.Hardware.CPU { float[] smuData = _cpu._smu.GetPmTable(); - foreach (var sensor in _smuSensors) + foreach (KeyValuePair, Sensor> sensor in _smuSensors) { if (smuData.Length > sensor.Key.Key) { @@ -495,7 +491,7 @@ namespace LibreHardwareMonitor.Hardware.CPU return; - var previousAffinity = ThreadAffinity.Set(cpu.Affinity); + GroupAffinity previousAffinity = ThreadAffinity.Set(cpu.Affinity); // MSRC001_0299 // TU [19:16] @@ -546,7 +542,7 @@ namespace LibreHardwareMonitor.Hardware.CPU // Voltage const double vidStep = 0.00625; - double vcc = 1.550 - vidStep * curCpuVid; + double vcc = 1.550 - (vidStep * curCpuVid); _vcore.Value = (float)vcc; // power consumption @@ -592,7 +588,6 @@ namespace LibreHardwareMonitor.Hardware.CPU private const uint MSR_PSTATE_0 = 0xC0010064; private const uint MSR_PWR_UNIT = 0xC0010299; private const uint PERF_CTL_0 = 0xC0010000; - private const uint PERF_CTR_0 = 0xC0010004; // ReSharper restore InconsistentNaming } diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/AmdCpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/AmdCpu.cs index 906cd8f..4f8609c 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/AmdCpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/AmdCpu.cs @@ -23,7 +23,6 @@ namespace LibreHardwareMonitor.Hardware.CPU if (deviceVendor != (deviceId << 16 | AMD_VENDOR_ID)) return Interop.Ring0.INVALID_PCI_ADDRESS; - return address; } diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs b/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs index 90a4257..cf6ee1f 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/CpuGroup.cs @@ -13,7 +13,7 @@ namespace LibreHardwareMonitor.Hardware.CPU { internal class CpuGroup : IGroup { - private readonly List _hardware = new List(); + private readonly List _hardware = new(); private readonly CpuId[][][] _threads; public CpuGroup(ISettings settings) @@ -27,7 +27,6 @@ namespace LibreHardwareMonitor.Hardware.CPU if (threads.Length == 0) continue; - CpuId[][] coreThreads = GroupThreadsByCore(threads); _threads[index] = coreThreads; @@ -76,8 +75,7 @@ namespace LibreHardwareMonitor.Hardware.CPU if (_threads == null) return null; - - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("CPUID"); r.AppendLine(); for (int i = 0; i < _threads.Length; i++) @@ -125,8 +123,8 @@ namespace LibreHardwareMonitor.Hardware.CPU private static CpuId[][] GetProcessorThreads() { - List threads = new List(); - + List threads = new(); + for (int i = 0; i < ThreadAffinity.ProcessorGroupCount; i++) { for (int j = 0; j < 64; j++) @@ -136,7 +134,6 @@ namespace LibreHardwareMonitor.Hardware.CPU if (!ThreadAffinity.IsValid(GroupAffinity.Single((ushort)i, j))) continue; - var cpuid = CpuId.Get(i, j); if (cpuid != null) threads.Add(cpuid); @@ -149,8 +146,7 @@ namespace LibreHardwareMonitor.Hardware.CPU } } - - SortedDictionary> processors = new SortedDictionary>(); + SortedDictionary> processors = new(); foreach (CpuId thread in threads) { processors.TryGetValue(thread.ProcessorId, out List list); @@ -176,7 +172,7 @@ namespace LibreHardwareMonitor.Hardware.CPU private static CpuId[][] GroupThreadsByCore(IEnumerable threads) { - SortedDictionary> cores = new SortedDictionary>(); + SortedDictionary> cores = new(); foreach (CpuId thread in threads) { cores.TryGetValue(thread.CoreId, out List coreList); diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/CpuId.cs b/LibreHardwareMonitorLib/Hardware/Cpu/CpuId.cs index e75917c..4ea2268 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/CpuId.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/CpuId.cs @@ -37,7 +37,6 @@ namespace LibreHardwareMonitor.Hardware.CPU if (thread >= 64) throw new ArgumentOutOfRangeException(nameof(thread)); - uint maxCpuid; if (OpCode.CpuId(CPUID_0, 0, out uint eax, out uint ebx, out uint ecx, out uint edx)) { @@ -46,25 +45,16 @@ namespace LibreHardwareMonitor.Hardware.CPU else return; - - StringBuilder vendorBuilder = new StringBuilder(); + StringBuilder vendorBuilder = new(); AppendRegister(vendorBuilder, ebx); AppendRegister(vendorBuilder, edx); AppendRegister(vendorBuilder, ecx); - string cpuVendor = vendorBuilder.ToString(); - - switch (cpuVendor) + Vendor = vendorBuilder.ToString() switch { - case "GenuineIntel": - Vendor = Vendor.Intel; - break; - case "AuthenticAMD": - Vendor = Vendor.AMD; - break; - default: - Vendor = Vendor.Unknown; - break; - } + "GenuineIntel" => Vendor.Intel, + "AuthenticAMD" => Vendor.AMD, + _ => Vendor.Unknown, + }; if (OpCode.CpuId(CPUID_EXT, 0, out eax, out _, out _, out _)) { @@ -98,7 +88,7 @@ namespace LibreHardwareMonitor.Hardware.CPU OpCode.CpuId(CPUID_EXT + i, 0, out ExtData[i, 0], out ExtData[i, 1], out ExtData[i, 2], out ExtData[i, 3]); } - StringBuilder nameBuilder = new StringBuilder(); + StringBuilder nameBuilder = new(); for (uint i = 2; i <= 4; i++) { if (OpCode.CpuId(CPUID_EXT + i, 0, out eax, out ebx, out ecx, out edx)) @@ -146,7 +136,6 @@ namespace LibreHardwareMonitor.Hardware.CPU switch (Vendor) { case Vendor.Intel: - { uint maxCoreAndThreadIdPerPackage = (Data[1, 1] >> 16) & 0xFF; uint maxCoreIdPerPackage; if (maxCpuid >= 4) @@ -157,9 +146,8 @@ namespace LibreHardwareMonitor.Hardware.CPU threadMaskWith = NextLog2(maxCoreAndThreadIdPerPackage / maxCoreIdPerPackage); coreMaskWith = NextLog2(maxCoreIdPerPackage); break; - } + case Vendor.AMD: - { uint corePerPackage; if (maxCpuidExt >= 8) corePerPackage = (ExtData[8, 2] & 0xFF) + 1; @@ -169,41 +157,27 @@ namespace LibreHardwareMonitor.Hardware.CPU threadMaskWith = 0; coreMaskWith = NextLog2(corePerPackage); - if (Family == 0x17 || Family == 0x19) + if (Family is 0x17 or 0x19) { // ApicIdCoreIdSize: APIC ID size. // cores per DIE // we need this for Ryzen 5 (4 cores, 8 threads) ans Ryzen 6 (6 cores, 12 threads) // Ryzen 5: [core0][core1][dummy][dummy][core2][core3] (Core0 EBX = 00080800, Core2 EBX = 08080800) - uint maxCoresPerDie = (ExtData[8, 2] >> 12) & 0xF; - switch (maxCoresPerDie) + coreMaskWith = ((ExtData[8, 2] >> 12) & 0xF) switch { - case 0x04: // Ryzen - { - coreMaskWith = NextLog2(16); - break; - } - case 0x05: // Threadripper - { - coreMaskWith = NextLog2(32); - break; - } - case 0x06: // Epic - { - coreMaskWith = NextLog2(64); - break; - } - } + 0x04 => NextLog2(16), // Ryzen + 0x05 => NextLog2(32), // Threadripper + 0x06 => NextLog2(64), // Epic + _ => coreMaskWith + }; } break; - } + default: - { threadMaskWith = 0; coreMaskWith = 0; break; - } } ProcessorId = ApicId >> (int)(coreMaskWith + threadMaskWith); @@ -231,6 +205,8 @@ namespace LibreHardwareMonitor.Hardware.CPU public string Name { get; } = string.Empty; + public uint PkgType { get; } + public uint ProcessorId { get; } public uint Stepping { get; } @@ -241,8 +217,6 @@ namespace LibreHardwareMonitor.Hardware.CPU public Vendor Vendor { get; } = Vendor.Unknown; - public uint PkgType { get; } - /// /// Gets the specified . /// @@ -254,14 +228,12 @@ namespace LibreHardwareMonitor.Hardware.CPU if (thread >= 64) return null; - var affinity = GroupAffinity.Single((ushort)group, thread); GroupAffinity previousAffinity = ThreadAffinity.Set(affinity); if (previousAffinity == GroupAffinity.Undefined) return null; - try { return new CpuId(group, thread, affinity); @@ -285,7 +257,6 @@ namespace LibreHardwareMonitor.Hardware.CPU if (x <= 0) return 0; - x--; uint count = 0; while (x > 0) diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/CpuLoad.cs b/LibreHardwareMonitorLib/Hardware/Cpu/CpuLoad.cs index ec39061..f899a7d 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/CpuLoad.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/CpuLoad.cs @@ -85,7 +85,6 @@ namespace LibreHardwareMonitor.Hardware.CPU if (!GetTimes(out long[] newIdleTimes, out long[] newTotalTimes)) return; - for (int i = 0; i < Math.Min(newTotalTimes.Length, _totalTimes.Length); i++) { if (newTotalTimes[i] - _totalTimes[i] < 100000) @@ -107,7 +106,7 @@ namespace LibreHardwareMonitor.Hardware.CPU if (count > 0) { - total = 1.0f - total / count; + total = 1.0f - (total / count); total = total < 0 ? 0 : total; } else diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/GenericCpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/GenericCpu.cs index 55af923..cfe056d 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/GenericCpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/GenericCpu.cs @@ -15,12 +15,12 @@ namespace LibreHardwareMonitor.Hardware.CPU public class GenericCpu : Hardware { protected readonly int _coreCount; - protected readonly int _threadCount; protected readonly CpuId[][] _cpuId; protected readonly uint _family; protected readonly uint _model; protected readonly uint _packageType; protected readonly uint _stepping; + protected readonly int _threadCount; private readonly CpuLoad _cpuLoad; private readonly double _estimatedTimeStampCounterFrequency; @@ -120,25 +120,17 @@ namespace LibreHardwareMonitor.Hardware.CPU if (_coreCount == 1) return "CPU Core"; - return "CPU Core #" + (i + 1); } private static Identifier CreateIdentifier(Vendor vendor, int processorIndex) { - string s; - switch (vendor) + string s = vendor switch { - case Vendor.AMD: - s = "amdcpu"; - break; - case Vendor.Intel: - s = "intelcpu"; - break; - default: - s = "genericcpu"; - break; - } + Vendor.AMD => "amdcpu", + Vendor.Intel => "intelcpu", + _ => "genericcpu", + }; return new Identifier(s, processorIndex.ToString(CultureInfo.InvariantCulture)); } @@ -244,7 +236,7 @@ namespace LibreHardwareMonitor.Hardware.CPU r.AppendLine(); uint[] msrArray = GetMsrs(); - if (msrArray != null && msrArray.Length > 0) + if (msrArray is { Length: > 0 }) { for (int i = 0; i < _cpuId.Length; i++) { @@ -284,7 +276,7 @@ namespace LibreHardwareMonitor.Hardware.CPU { // ignore the first reading because there are no initial values // ignore readings with too large or too small time window - if (_lastTime != 0 && delta > 0.5 && delta < 2) + if (_lastTime != 0 && delta is > 0.5 and < 2) { // update the TSC frequency with the new value TimeStampCounterFrequency = (timeStampCount - _lastTimeStampCount) / (1e6 * delta); diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/IntelCpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/IntelCpu.cs index f31d2f8..3d31176 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/IntelCpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/IntelCpu.cs @@ -18,12 +18,11 @@ namespace LibreHardwareMonitor.Hardware.CPU private readonly Sensor[] _coreClocks; private readonly Sensor _coreMax; private readonly Sensor[] _coreTemperatures; - private readonly Sensor _coreVoltage; private readonly Sensor[] _coreVIDs; + private readonly Sensor _coreVoltage; private readonly Sensor[] _distToTjMaxTemperatures; private readonly uint[] _energyStatusMsrs = { MSR_PKG_ENERGY_STATUS, MSR_PP0_ENERGY_STATUS, MSR_PP1_ENERGY_STATUS, MSR_DRAM_ENERGY_STATUS }; - private readonly float _energyUnitMultiplier; private readonly uint[] _lastEnergyConsumed; private readonly DateTime[] _lastEnergyTime; @@ -32,8 +31,6 @@ namespace LibreHardwareMonitor.Hardware.CPU private readonly Sensor[] _powerSensors; private readonly double _timeStampCounterMultiplier; - public float EnergyUnitsMultiplier => _energyUnitMultiplier; - public IntelCpu(int processorIndex, CpuId[][] cpuId, ISettings settings) : base(processorIndex, cpuId, settings) { uint eax; @@ -44,174 +41,182 @@ namespace LibreHardwareMonitor.Hardware.CPU switch (_family) { case 0x06: - { - switch (_model) { - case 0x0F: // Intel Core 2 (65nm) - _microArchitecture = MicroArchitecture.Core; - switch (_stepping) - { - case 0x06: // B2 - switch (_coreCount) + switch (_model) + { + case 0x0F: // Intel Core 2 (65nm) + _microArchitecture = MicroArchitecture.Core; + tjMax = _stepping switch + { + // B2 + 0x06 => _coreCount switch { - case 2: - tjMax = Floats(80 + 10); - break; - case 4: - tjMax = Floats(90 + 10); - break; - default: - tjMax = Floats(85 + 10); - break; - } - break; - case 0x0B: // G0 - tjMax = Floats(90 + 10); - break; - case 0x0D: // M0 - tjMax = Floats(85 + 10); - break; - default: - tjMax = Floats(85 + 10); - break; - } - break; - case 0x17: // Intel Core 2 (45nm) - _microArchitecture = MicroArchitecture.Core; - tjMax = Floats(100); - break; - case 0x1C: // Intel Atom (45nm) - _microArchitecture = MicroArchitecture.Atom; - switch (_stepping) - { - case 0x02: // C0 - tjMax = Floats(90); - break; - case 0x0A: // A0, B0 - tjMax = Floats(100); - break; - default: - tjMax = Floats(90); - break; - } - break; - case 0x1A: // Intel Core i7 LGA1366 (45nm) - case 0x1E: // Intel Core i5, i7 LGA1156 (45nm) - case 0x1F: // Intel Core i5, i7 - case 0x25: // Intel Core i3, i5, i7 LGA1156 (32nm) - case 0x2C: // Intel Core i7 LGA1366 (32nm) 6 Core - case 0x2E: // Intel Xeon Processor 7500 series (45nm) - case 0x2F: // Intel Xeon Processor (32nm) - _microArchitecture = MicroArchitecture.Nehalem; - tjMax = GetTjMaxFromMsr(); - break; - case 0x2A: // Intel Core i5, i7 2xxx LGA1155 (32nm) - case 0x2D: // Next Generation Intel Xeon, i7 3xxx LGA2011 (32nm) - _microArchitecture = MicroArchitecture.SandyBridge; - tjMax = GetTjMaxFromMsr(); - break; - case 0x3A: // Intel Core i5, i7 3xxx LGA1155 (22nm) - case 0x3E: // Intel Core i7 4xxx LGA2011 (22nm) - _microArchitecture = MicroArchitecture.IvyBridge; - tjMax = GetTjMaxFromMsr(); - break; - case 0x3C: // Intel Core i5, i7 4xxx LGA1150 (22nm) - case 0x3F: // Intel Xeon E5-2600/1600 v3, Core i7-59xx - // LGA2011-v3, Haswell-E (22nm) - case 0x45: // Intel Core i5, i7 4xxxU (22nm) - case 0x46: - _microArchitecture = MicroArchitecture.Haswell; - tjMax = GetTjMaxFromMsr(); - break; - case 0x3D: // Intel Core M-5xxx (14nm) - case 0x47: // Intel i5, i7 5xxx, Xeon E3-1200 v4 (14nm) - case 0x4F: // Intel Xeon E5-26xx v4 - case 0x56: // Intel Xeon D-15xx - _microArchitecture = MicroArchitecture.Broadwell; - tjMax = GetTjMaxFromMsr(); - break; - case 0x36: // Intel Atom S1xxx, D2xxx, N2xxx (32nm) - _microArchitecture = MicroArchitecture.Atom; - tjMax = GetTjMaxFromMsr(); - break; - case 0x37: // Intel Atom E3xxx, Z3xxx (22nm) - case 0x4A: - case 0x4D: // Intel Atom C2xxx (22nm) - case 0x5A: - case 0x5D: - _microArchitecture = MicroArchitecture.Silvermont; - tjMax = GetTjMaxFromMsr(); - break; - case 0x4E: - case 0x5E: // Intel Core i5, i7 6xxxx LGA1151 (14nm) - case 0x55: // Intel Core X i7, i9 7xxx LGA2066 (14nm) - _microArchitecture = MicroArchitecture.Skylake; - tjMax = GetTjMaxFromMsr(); - break; - case 0x4C: // Intel Airmont (Cherry Trail, Braswell) - _microArchitecture = MicroArchitecture.Airmont; - tjMax = GetTjMaxFromMsr(); - break; - case 0x8E: // Intel Core i5, i7 7xxxx (14nm) (Kaby Lake) and 8xxxx (14nm++) (Coffee Lake) - case 0x9E: - _microArchitecture = MicroArchitecture.KabyLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0x5C: // Goldmont (Apollo Lake) - case 0x5F: // (Denverton) - _microArchitecture = MicroArchitecture.Goldmont; - tjMax = GetTjMaxFromMsr(); - break; - case 0x7A: // Goldmont plus (Gemini Lake) - _microArchitecture = MicroArchitecture.GoldmontPlus; - tjMax = GetTjMaxFromMsr(); - break; - case 0x66: // Intel Core i3 8xxx (10nm) (Cannon Lake) - _microArchitecture = MicroArchitecture.CannonLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0x7D: // Intel Core i3, i5, i7 10xxx (10nm) (Ice Lake) - case 0x7E: - case 0x6A: // Ice Lake server - case 0x6C: - _microArchitecture = MicroArchitecture.IceLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0xA5: - case 0xA6: // Intel Core i3, i5, i7 10xxxU (14nm) - _microArchitecture = MicroArchitecture.CometLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0x86: // Tremont (10nm) (Elkhart Lake, Skyhawk Lake) - _microArchitecture = MicroArchitecture.Tremont; - tjMax = GetTjMaxFromMsr(); - break; - case 0x8C: // Tiger Lake (10nm) - case 0x8D: - _microArchitecture = MicroArchitecture.TigerLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0x97: // Alder Lake (7nm) - _microArchitecture = MicroArchitecture.AlderLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0x9C: // Jasper Lake (10nm) - _microArchitecture = MicroArchitecture.JasperLake; - tjMax = GetTjMaxFromMsr(); - break; - case 0xA7: // Intel Core i5, i6, i7 11xxx (14nm) (Rocket Lake) - _microArchitecture = MicroArchitecture.RocketLake; - tjMax = GetTjMaxFromMsr(); - break; - default: - _microArchitecture = MicroArchitecture.Unknown; - tjMax = Floats(100); - break; + 2 => Floats(80 + 10), + 4 => Floats(90 + 10), + _ => Floats(85 + 10), + }, + // G0 + 0x0B => Floats(90 + 10), + // M0 + 0x0D => Floats(85 + 10), + _ => Floats(85 + 10), + }; + break; + + case 0x17: // Intel Core 2 (45nm) + _microArchitecture = MicroArchitecture.Core; + tjMax = Floats(100); + break; + + case 0x1C: // Intel Atom (45nm) + _microArchitecture = MicroArchitecture.Atom; + tjMax = _stepping switch + { + // C0 + 0x02 => Floats(90), + // A0, B0 + 0x0A => Floats(100), + _ => Floats(90), + }; + break; + + case 0x1A: // Intel Core i7 LGA1366 (45nm) + case 0x1E: // Intel Core i5, i7 LGA1156 (45nm) + case 0x1F: // Intel Core i5, i7 + case 0x25: // Intel Core i3, i5, i7 LGA1156 (32nm) + case 0x2C: // Intel Core i7 LGA1366 (32nm) 6 Core + case 0x2E: // Intel Xeon Processor 7500 series (45nm) + case 0x2F: // Intel Xeon Processor (32nm) + _microArchitecture = MicroArchitecture.Nehalem; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x2A: // Intel Core i5, i7 2xxx LGA1155 (32nm) + case 0x2D: // Next Generation Intel Xeon, i7 3xxx LGA2011 (32nm) + _microArchitecture = MicroArchitecture.SandyBridge; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x3A: // Intel Core i5, i7 3xxx LGA1155 (22nm) + case 0x3E: // Intel Core i7 4xxx LGA2011 (22nm) + _microArchitecture = MicroArchitecture.IvyBridge; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x3C: // Intel Core i5, i7 4xxx LGA1150 (22nm) + case 0x3F: // Intel Xeon E5-2600/1600 v3, Core i7-59xx + // LGA2011-v3, Haswell-E (22nm) + case 0x45: // Intel Core i5, i7 4xxxU (22nm) + case 0x46: + _microArchitecture = MicroArchitecture.Haswell; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x3D: // Intel Core M-5xxx (14nm) + case 0x47: // Intel i5, i7 5xxx, Xeon E3-1200 v4 (14nm) + case 0x4F: // Intel Xeon E5-26xx v4 + case 0x56: // Intel Xeon D-15xx + _microArchitecture = MicroArchitecture.Broadwell; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x36: // Intel Atom S1xxx, D2xxx, N2xxx (32nm) + _microArchitecture = MicroArchitecture.Atom; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x37: // Intel Atom E3xxx, Z3xxx (22nm) + case 0x4A: + case 0x4D: // Intel Atom C2xxx (22nm) + case 0x5A: + case 0x5D: + _microArchitecture = MicroArchitecture.Silvermont; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x4E: + case 0x5E: // Intel Core i5, i7 6xxxx LGA1151 (14nm) + case 0x55: // Intel Core X i7, i9 7xxx LGA2066 (14nm) + _microArchitecture = MicroArchitecture.Skylake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x4C: // Intel Airmont (Cherry Trail, Braswell) + _microArchitecture = MicroArchitecture.Airmont; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x8E: // Intel Core i5, i7 7xxxx (14nm) (Kaby Lake) and 8xxxx (14nm++) (Coffee Lake) + case 0x9E: + _microArchitecture = MicroArchitecture.KabyLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x5C: // Goldmont (Apollo Lake) + case 0x5F: // (Denverton) + _microArchitecture = MicroArchitecture.Goldmont; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x7A: // Goldmont plus (Gemini Lake) + _microArchitecture = MicroArchitecture.GoldmontPlus; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x66: // Intel Core i3 8xxx (10nm) (Cannon Lake) + _microArchitecture = MicroArchitecture.CannonLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x7D: // Intel Core i3, i5, i7 10xxx (10nm) (Ice Lake) + case 0x7E: + case 0x6A: // Ice Lake server + case 0x6C: + _microArchitecture = MicroArchitecture.IceLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0xA5: + case 0xA6: // Intel Core i3, i5, i7 10xxxU (14nm) + _microArchitecture = MicroArchitecture.CometLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x86: // Tremont (10nm) (Elkhart Lake, Skyhawk Lake) + _microArchitecture = MicroArchitecture.Tremont; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x8C: // Tiger Lake (10nm) + case 0x8D: + _microArchitecture = MicroArchitecture.TigerLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x97: // Alder Lake (7nm) + _microArchitecture = MicroArchitecture.AlderLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0x9C: // Jasper Lake (10nm) + _microArchitecture = MicroArchitecture.JasperLake; + tjMax = GetTjMaxFromMsr(); + break; + + case 0xA7: // Intel Core i5, i6, i7 11xxx (14nm) (Rocket Lake) + _microArchitecture = MicroArchitecture.RocketLake; + tjMax = GetTjMaxFromMsr(); + break; + + default: + _microArchitecture = MicroArchitecture.Unknown; + tjMax = Floats(100); + break; + } } - } - break; + + break; case 0x0F: - { switch (_model) { case 0x00: // Pentium 4 (180nm) @@ -223,32 +228,30 @@ namespace LibreHardwareMonitor.Hardware.CPU _microArchitecture = MicroArchitecture.NetBurst; tjMax = Floats(100); break; + default: _microArchitecture = MicroArchitecture.Unknown; tjMax = Floats(100); break; } - } - break; + + break; default: _microArchitecture = MicroArchitecture.Unknown; tjMax = Floats(100); - break; + break; } + // set timeStampCounterMultiplier switch (_microArchitecture) { case MicroArchitecture.Atom: case MicroArchitecture.Core: case MicroArchitecture.NetBurst: - { if (Ring0.ReadMsr(IA32_PERF_STATUS, out uint _, out edx)) - { - _timeStampCounterMultiplier = ((edx >> 8) & 0x1f) + 0.5 * ((edx >> 14) & 1); - } + _timeStampCounterMultiplier = ((edx >> 8) & 0x1f) + (0.5 * ((edx >> 14) & 1)); break; - } case MicroArchitecture.Airmont: case MicroArchitecture.AlderLake: case MicroArchitecture.Broadwell: @@ -268,13 +271,10 @@ namespace LibreHardwareMonitor.Hardware.CPU case MicroArchitecture.Skylake: case MicroArchitecture.TigerLake: case MicroArchitecture.Tremont: - { if (Ring0.ReadMsr(MSR_PLATFORM_INFO, out eax, out uint _)) - { _timeStampCounterMultiplier = (eax >> 8) & 0xff; - } - } - break; + + break; default: _timeStampCounterMultiplier = 0; break; @@ -304,7 +304,7 @@ namespace LibreHardwareMonitor.Hardware.CPU } } else - _coreTemperatures = new Sensor[0]; + _coreTemperatures = Array.Empty(); // check if processor supports a digital thermal sensor at package level if (cpuId[0][0].Data.GetLength(0) > 6 && (cpuId[0][0].Data[6, 0] & 0x40) != 0 && _microArchitecture != MicroArchitecture.Unknown) @@ -336,7 +336,7 @@ namespace LibreHardwareMonitor.Hardware.CPU } } else - _distToTjMaxTemperatures = new Sensor[0]; + _distToTjMaxTemperatures = Array.Empty(); //core temp avg and max value //is only available when the cpu has more than 1 core @@ -364,42 +364,39 @@ namespace LibreHardwareMonitor.Hardware.CPU ActivateSensor(_coreClocks[i]); } - if (_microArchitecture == MicroArchitecture.Airmont || - _microArchitecture == MicroArchitecture.AlderLake || - _microArchitecture == MicroArchitecture.Broadwell || - _microArchitecture == MicroArchitecture.CannonLake || - _microArchitecture == MicroArchitecture.CometLake || - _microArchitecture == MicroArchitecture.Goldmont || - _microArchitecture == MicroArchitecture.GoldmontPlus || - _microArchitecture == MicroArchitecture.Haswell || - _microArchitecture == MicroArchitecture.IceLake || - _microArchitecture == MicroArchitecture.IvyBridge || - _microArchitecture == MicroArchitecture.JasperLake || - _microArchitecture == MicroArchitecture.KabyLake || - _microArchitecture == MicroArchitecture.RocketLake || - _microArchitecture == MicroArchitecture.SandyBridge || - _microArchitecture == MicroArchitecture.Silvermont || - _microArchitecture == MicroArchitecture.Skylake || - _microArchitecture == MicroArchitecture.TigerLake || - _microArchitecture == MicroArchitecture.Tremont) + if (_microArchitecture is MicroArchitecture.Airmont or + MicroArchitecture.AlderLake or + MicroArchitecture.Broadwell or + MicroArchitecture.CannonLake or + MicroArchitecture.CometLake or + MicroArchitecture.Goldmont or + MicroArchitecture.GoldmontPlus or + MicroArchitecture.Haswell or + MicroArchitecture.IceLake or + MicroArchitecture.IvyBridge or + MicroArchitecture.JasperLake or + MicroArchitecture.KabyLake or + MicroArchitecture.RocketLake or + MicroArchitecture.SandyBridge or + MicroArchitecture.Silvermont or + MicroArchitecture.Skylake or + MicroArchitecture.TigerLake or + MicroArchitecture.Tremont) { _powerSensors = new Sensor[_energyStatusMsrs.Length]; _lastEnergyTime = new DateTime[_energyStatusMsrs.Length]; _lastEnergyConsumed = new uint[_energyStatusMsrs.Length]; if (Ring0.ReadMsr(MSR_RAPL_POWER_UNIT, out eax, out uint _)) - switch (_microArchitecture) + { + EnergyUnitsMultiplier = _microArchitecture switch { - case MicroArchitecture.Silvermont: - case MicroArchitecture.Airmont: - _energyUnitMultiplier = 1.0e-6f * (1 << (int)((eax >> 8) & 0x1F)); - break; - default: - _energyUnitMultiplier = 1.0f / (1 << (int)((eax >> 8) & 0x1F)); - break; - } + MicroArchitecture.Silvermont or MicroArchitecture.Airmont => 1.0e-6f * (1 << (int)((eax >> 8) & 0x1F)), + _ => 1.0f / (1 << (int)((eax >> 8) & 0x1F)), + }; + } - if (_energyUnitMultiplier != 0) + if (EnergyUnitsMultiplier != 0) { string[] powerSensorLabels = { "CPU Package", "CPU Cores", "CPU Graphics", "CPU Memory" }; @@ -441,6 +438,8 @@ namespace LibreHardwareMonitor.Hardware.CPU Update(); } + public float EnergyUnitsMultiplier { get; } + private float[] Floats(float f) { float[] result = new float[_coreCount]; @@ -483,7 +482,7 @@ namespace LibreHardwareMonitor.Hardware.CPU public override string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.Append(base.GetReport()); r.Append("MicroArchitecture: "); r.AppendLine(_microArchitecture.ToString()); @@ -511,7 +510,7 @@ namespace LibreHardwareMonitor.Hardware.CPU float deltaT = (eax & 0x007F0000) >> 16; float tjMax = _coreTemperatures[i].Parameters[0].Value; float tSlope = _coreTemperatures[i].Parameters[1].Value; - _coreTemperatures[i].Value = tjMax - tSlope * deltaT; + _coreTemperatures[i].Value = tjMax - (tSlope * deltaT); coreAvg += (float)_coreTemperatures[i].Value; if (coreMax < _coreTemperatures[i].Value) @@ -543,7 +542,7 @@ namespace LibreHardwareMonitor.Hardware.CPU float deltaT = (eax & 0x007F0000) >> 16; float tjMax = _packageTemperature.Parameters[0].Value; float tSlope = _packageTemperature.Parameters[1].Value; - _packageTemperature.Value = tjMax - tSlope * deltaT; + _packageTemperature.Value = tjMax - (tSlope * deltaT); } else { @@ -563,11 +562,8 @@ namespace LibreHardwareMonitor.Hardware.CPU switch (_microArchitecture) { case MicroArchitecture.Nehalem: - { - uint multiplier = eax & 0xff; - _coreClocks[i].Value = (float)(multiplier * newBusClock); + _coreClocks[i].Value = (float)((eax & 0xff) * newBusClock); break; - } case MicroArchitecture.Airmont: case MicroArchitecture.AlderLake: case MicroArchitecture.Broadwell: @@ -586,17 +582,11 @@ namespace LibreHardwareMonitor.Hardware.CPU case MicroArchitecture.Skylake: case MicroArchitecture.TigerLake: case MicroArchitecture.Tremont: - { - uint multiplier = (eax >> 8) & 0xff; - _coreClocks[i].Value = (float)(multiplier * newBusClock); + _coreClocks[i].Value = (float)(((eax >> 8) & 0xff) * newBusClock); break; - } default: - { - double multiplier = ((eax >> 8) & 0x1f) + 0.5 * ((eax >> 14) & 1); - _coreClocks[i].Value = (float)(multiplier * newBusClock); + _coreClocks[i].Value = (float)((((eax >> 8) & 0x1f) + (0.5 * ((eax >> 14) & 1))) * newBusClock); break; - } } } else @@ -623,15 +613,13 @@ namespace LibreHardwareMonitor.Hardware.CPU if (!Ring0.ReadMsr(_energyStatusMsrs[sensor.Index], out eax, out uint _)) continue; - DateTime time = DateTime.UtcNow; uint energyConsumed = eax; float deltaTime = (float)(time - _lastEnergyTime[sensor.Index]).TotalSeconds; if (deltaTime < 0.01) continue; - - sensor.Value = _energyUnitMultiplier * unchecked(energyConsumed - _lastEnergyConsumed[sensor.Index]) / deltaTime; + sensor.Value = EnergyUnitsMultiplier * unchecked(energyConsumed - _lastEnergyConsumed[sensor.Index]) / deltaTime; _lastEnergyTime[sensor.Index] = time; _lastEnergyConsumed[sensor.Index] = energyConsumed; } diff --git a/LibreHardwareMonitorLib/Hardware/D3DDisplayDevice.cs b/LibreHardwareMonitorLib/Hardware/D3DDisplayDevice.cs index 40450be..38d2ca7 100644 --- a/LibreHardwareMonitorLib/Hardware/D3DDisplayDevice.cs +++ b/LibreHardwareMonitorLib/Hardware/D3DDisplayDevice.cs @@ -73,7 +73,7 @@ namespace LibreHardwareMonitor.Hardware deviceInfo.Nodes = new D3DDeviceNodeInfo[nodeCount]; - var queryTime = DateTime.Now; + DateTime queryTime = DateTime.Now; for (uint nodeId = 0; nodeId < nodeCount; nodeId++) { diff --git a/LibreHardwareMonitorLib/Hardware/FirmwareTable.cs b/LibreHardwareMonitorLib/Hardware/FirmwareTable.cs index 6ab8dc4..6be9faf 100644 --- a/LibreHardwareMonitorLib/Hardware/FirmwareTable.cs +++ b/LibreHardwareMonitorLib/Hardware/FirmwareTable.cs @@ -34,7 +34,6 @@ namespace LibreHardwareMonitor.Hardware if (size <= 0) return null; - IntPtr allocatedBuffer = IntPtr.Zero; try @@ -45,7 +44,6 @@ namespace LibreHardwareMonitor.Hardware if (Marshal.GetLastWin32Error() != 0) return null; - byte[] buffer = new byte[size]; Marshal.Copy(allocatedBuffer, buffer, 0, size); return buffer; diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs index 3db41c6..3873d74 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpu.cs @@ -133,14 +133,11 @@ namespace LibreHardwareMonitor.Hardware.Gpu int version = 0; if (AtiAdlxx.ADL_Method_Exists(nameof(AtiAdlxx.ADL2_Adapter_FrameMetrics_Caps)) && - AtiAdlxx.ADL2_Adapter_FrameMetrics_Caps(_context, _adapterInfo.AdapterIndex, ref supported) == AtiAdlxx.ADLStatus.ADL_OK) + AtiAdlxx.ADL2_Adapter_FrameMetrics_Caps(_context, _adapterInfo.AdapterIndex, ref supported) == AtiAdlxx.ADLStatus.ADL_OK && supported == AtiAdlxx.ADL_TRUE && AtiAdlxx.ADL2_Adapter_FrameMetrics_Start(_context, _adapterInfo.AdapterIndex, 0) == AtiAdlxx.ADLStatus.ADL_OK) { - if (supported == AtiAdlxx.ADL_TRUE && AtiAdlxx.ADL2_Adapter_FrameMetrics_Start(_context, _adapterInfo.AdapterIndex, 0) == AtiAdlxx.ADLStatus.ADL_OK) - { - _frameMetricsStarted = true; - _fullscreenFps.Value = -1; - ActivateSensor(_fullscreenFps); - } + _frameMetricsStarted = true; + _fullscreenFps.Value = -1; + ActivateSensor(_fullscreenFps); } if (AtiAdlxx.ADL_Overdrive_Caps(_adapterInfo.AdapterIndex, ref supported, ref enabled, ref version) == AtiAdlxx.ADLStatus.ADL_OK) @@ -581,7 +578,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu try { var adlf = new AtiAdlxx.ADLFanSpeedValue { SpeedType = AtiAdlxx.ADL_DL_FANCTRL_SPEED_TYPE_RPM }; - var status = AtiAdlxx.ADL_Overdrive5_FanSpeed_Get(_adapterInfo.AdapterIndex, 0, ref adlf); + AtiAdlxx.ADLStatus status = AtiAdlxx.ADL_Overdrive5_FanSpeed_Get(_adapterInfo.AdapterIndex, 0, ref adlf); r.Append(" Status RPM: "); r.AppendLine(status.ToString()); r.AppendFormat(" Value RPM: {0}{1}", adlf.FanSpeed, Environment.NewLine); @@ -686,7 +683,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu r.AppendLine(); try { - var status = AtiAdlxx.ADL2_OverdriveN_PerformanceStatus_Get(_context, _adapterInfo.AdapterIndex, out var ps); + AtiAdlxx.ADLStatus status = AtiAdlxx.ADL2_OverdriveN_PerformanceStatus_Get(_context, _adapterInfo.AdapterIndex, out AtiAdlxx.ADLODNPerformanceStatus ps); r.Append(" Status: "); r.AppendLine(status.ToString()); diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs index b8ecef6..2e4d53d 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/AmdGpuGroup.cs @@ -15,8 +15,8 @@ namespace LibreHardwareMonitor.Hardware.Gpu { internal class AmdGpuGroup : IGroup { - private readonly List _hardware = new List(); - private readonly StringBuilder _report = new StringBuilder(); + private readonly List _hardware = new(); + private readonly StringBuilder _report = new(); private readonly AtiAdlxx.ADLStatus _status; public AmdGpuGroup(ISettings settings) @@ -84,7 +84,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu foreach (IGrouping amdGpus in potentialHardware.GroupBy(x => $"{x.BusNumber}-{x.DeviceNumber}")) { - var amdGpu = amdGpus.OrderByDescending(x => x.Sensors.Length).FirstOrDefault(); + AmdGpu amdGpu = amdGpus.OrderByDescending(x => x.Sensors.Length).FirstOrDefault(); if (amdGpu != null) _hardware.Add(amdGpu); } diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGpu.cs b/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGpu.cs index 525e4d5..23cf8bf 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGpu.cs @@ -77,7 +77,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu _ => "GPU" }; - _temperatures[i] = new Sensor(name, i, SensorType.Temperature, this, new ParameterDescription[0], settings); + _temperatures[i] = new Sensor(name, i, SensorType.Temperature, this, Array.Empty(), settings); ActivateSensor(_temperatures[i]); } } @@ -990,7 +990,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu NvApi.NvThermalSettings settings = new() { - Version = (uint)NvApi.MAKE_NVAPI_VERSION(1), + Version = (uint)NvApi.MAKE_NVAPI_VERSION(1), Count = NvApi.MAX_THERMAL_SENSORS_PER_GPU, }; @@ -1008,7 +1008,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu var thermalSensors = new NvApi.NvThermalSensors { - Version = (uint)NvApi.MAKE_NVAPI_VERSION(2), + Version = (uint)NvApi.MAKE_NVAPI_VERSION(2), Mask = mask }; @@ -1026,7 +1026,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu var coolers = new NvApi.NvFanCoolersStatus { - Version = (uint)NvApi.MAKE_NVAPI_VERSION(1), + Version = (uint)NvApi.MAKE_NVAPI_VERSION(1), Items = new NvApi.NvFanCoolersStatusItem[NvApi.MAX_FAN_COOLERS_STATUS_ITEMS] }; @@ -1061,7 +1061,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu NvApi.NvCoolerSettings settings = new() { - Version = (uint)NvApi.MAKE_NVAPI_VERSION(2), + Version = (uint)NvApi.MAKE_NVAPI_VERSION(2), Cooler = new NvApi.NvCooler[NvApi.MAX_COOLERS_PER_GPU] }; @@ -1079,7 +1079,7 @@ namespace LibreHardwareMonitor.Hardware.Gpu NvApi.NvDynamicPStatesInfo pStatesInfo = new() { - Version = (uint)NvApi.MAKE_NVAPI_VERSION(1), + Version = (uint)NvApi.MAKE_NVAPI_VERSION(1), Utilizations = new NvApi.NvDynamicPState[NvApi.MAX_GPU_UTILIZATIONS] }; diff --git a/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs b/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs index 7b4c842..f7a874e 100644 --- a/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Gpu/NvidiaGroup.cs @@ -21,7 +21,6 @@ namespace LibreHardwareMonitor.Hardware.Gpu if (!NvApi.IsAvailable) return; - _report.AppendLine("NvApi"); _report.AppendLine(); diff --git a/LibreHardwareMonitorLib/Hardware/GroupAffinity.cs b/LibreHardwareMonitorLib/Hardware/GroupAffinity.cs index f441cd4..8fd060b 100644 --- a/LibreHardwareMonitorLib/Hardware/GroupAffinity.cs +++ b/LibreHardwareMonitorLib/Hardware/GroupAffinity.cs @@ -11,7 +11,7 @@ namespace LibreHardwareMonitor.Hardware /// public readonly struct GroupAffinity { - public static GroupAffinity Undefined = new GroupAffinity(ushort.MaxValue, 0); + public static GroupAffinity Undefined = new(ushort.MaxValue, 0); /// /// Initializes a new instance of the struct. @@ -52,10 +52,9 @@ namespace LibreHardwareMonitor.Hardware /// true if the specified is equal to this instance; otherwise, false. public override bool Equals(object o) { - if (o == null || GetType() != o.GetType()) + if (o == null || GetType() != o.GetType()) return false; - GroupAffinity a = (GroupAffinity)o; return (Group == a.Group) && (Mask == a.Mask); } diff --git a/LibreHardwareMonitorLib/Hardware/Hardware.cs b/LibreHardwareMonitorLib/Hardware/Hardware.cs index 6f0a34c..9b3051e 100644 --- a/LibreHardwareMonitorLib/Hardware/Hardware.cs +++ b/LibreHardwareMonitorLib/Hardware/Hardware.cs @@ -78,7 +78,7 @@ namespace LibreHardwareMonitor.Hardware /// public IHardware[] SubHardware { - get { return new IHardware[0]; } + get { return Array.Empty(); } } /// @@ -96,7 +96,6 @@ namespace LibreHardwareMonitor.Hardware if (visitor == null) throw new ArgumentNullException(nameof(visitor)); - visitor.VisitHardware(this); } diff --git a/LibreHardwareMonitorLib/Hardware/IHardware.cs b/LibreHardwareMonitorLib/Hardware/IHardware.cs index 666845b..b719e17 100644 --- a/LibreHardwareMonitorLib/Hardware/IHardware.cs +++ b/LibreHardwareMonitorLib/Hardware/IHardware.cs @@ -71,7 +71,6 @@ namespace LibreHardwareMonitor.Hardware /// /// An that will be triggered when one of the sensors is removed. - /// /// event SensorEventHandler SensorRemoved; diff --git a/LibreHardwareMonitorLib/Hardware/InpOut.cs b/LibreHardwareMonitorLib/Hardware/InpOut.cs index cf84958..f5df7f9 100644 --- a/LibreHardwareMonitorLib/Hardware/InpOut.cs +++ b/LibreHardwareMonitorLib/Hardware/InpOut.cs @@ -25,7 +25,6 @@ namespace LibreHardwareMonitor.Hardware if (IsOpen) return true; - _filePath = GetFilePath(); if (_filePath != null && (File.Exists(_filePath) || Extract(_filePath))) { @@ -111,7 +110,6 @@ namespace LibreHardwareMonitor.Hardware catch (IOException) { } - const string fileName = "inpout.dll"; try @@ -129,15 +127,12 @@ namespace LibreHardwareMonitor.Hardware if (!string.IsNullOrEmpty(filePath)) return Path.Combine(Path.GetDirectoryName(filePath) ?? string.Empty, fileName); - filePath = GetPathFromAssembly(typeof(Ring0).Assembly); if (!string.IsNullOrEmpty(filePath)) return Path.Combine(Path.GetDirectoryName(filePath) ?? string.Empty, fileName); - return null; - static string GetPathFromAssembly(Assembly assembly) { try @@ -178,7 +173,6 @@ namespace LibreHardwareMonitor.Hardware if (buffer == null) return false; - try { using FileStream target = new(filePath, FileMode.Create); diff --git a/LibreHardwareMonitorLib/Hardware/Memory/GenericLinuxMemory.cs b/LibreHardwareMonitorLib/Hardware/Memory/GenericLinuxMemory.cs index 2e196cd..057743f 100644 --- a/LibreHardwareMonitorLib/Hardware/Memory/GenericLinuxMemory.cs +++ b/LibreHardwareMonitorLib/Hardware/Memory/GenericLinuxMemory.cs @@ -48,23 +48,23 @@ namespace LibreHardwareMonitor.Hardware.Memory { try { - var memoryInfo = File.ReadAllLines("/proc/meminfo"); + string[] memoryInfo = File.ReadAllLines("/proc/meminfo"); { - var totalMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("MemTotal:"))) / 1024.0f / 1024.0f; - var freeMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("MemFree:"))) / 1024.0f / 1024.0f; - var cachedMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("Cached:"))) / 1024.0f / 1024.0f; + float totalMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("MemTotal:"))) / 1024.0f / 1024.0f; + float freeMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("MemFree:"))) / 1024.0f / 1024.0f; + float cachedMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("Cached:"))) / 1024.0f / 1024.0f; - var usedMemory_GB = totalMemory_GB - freeMemory_GB - cachedMemory_GB; + float usedMemory_GB = totalMemory_GB - freeMemory_GB - cachedMemory_GB; _physicalMemoryUsed.Value = usedMemory_GB; _physicalMemoryAvailable.Value = totalMemory_GB; _physicalMemoryLoad.Value = 100.0f * (usedMemory_GB / totalMemory_GB); } { - var totalSwapMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("SwapTotal"))) / 1024.0f / 1024.0f; - var freeSwapMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("SwapFree"))) / 1024.0f / 1024.0f; - var usedSwapMemory_GB = totalSwapMemory_GB - freeSwapMemory_GB; + float totalSwapMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("SwapTotal"))) / 1024.0f / 1024.0f; + float freeSwapMemory_GB = GetMemInfoValue(memoryInfo.First(entry => entry.StartsWith("SwapFree"))) / 1024.0f / 1024.0f; + float usedSwapMemory_GB = totalSwapMemory_GB - freeSwapMemory_GB; _virtualMemoryUsed.Value = usedSwapMemory_GB; _virtualMemoryAvailable.Value = totalSwapMemory_GB; @@ -87,8 +87,8 @@ namespace LibreHardwareMonitor.Hardware.Memory { // Example: "MemTotal: 32849676 kB" - var valueWithUnit = line.Split(':').Skip(1).First().Trim(); - var valueAsString = valueWithUnit.Split(' ').First(); + string valueWithUnit = line.Split(':').Skip(1).First().Trim(); + string valueAsString = valueWithUnit.Split(' ').First(); return long.Parse(valueAsString); } diff --git a/LibreHardwareMonitorLib/Hardware/Memory/GenericWindowsMemory.cs b/LibreHardwareMonitorLib/Hardware/Memory/GenericWindowsMemory.cs index 0e45b15..3cbc329 100644 --- a/LibreHardwareMonitorLib/Hardware/Memory/GenericWindowsMemory.cs +++ b/LibreHardwareMonitorLib/Hardware/Memory/GenericWindowsMemory.cs @@ -46,19 +46,18 @@ namespace LibreHardwareMonitor.Hardware.Memory public override void Update() { - Kernel32.MEMORYSTATUSEX status = new Kernel32.MEMORYSTATUSEX { dwLength = (uint)Marshal.SizeOf() }; + Kernel32.MEMORYSTATUSEX status = new() { dwLength = (uint)Marshal.SizeOf() }; if (!Kernel32.GlobalMemoryStatusEx(ref status)) return; - _physicalMemoryUsed.Value = (float)(status.ullTotalPhys - status.ullAvailPhys) / (1024 * 1024 * 1024); _physicalMemoryAvailable.Value = (float)status.ullAvailPhys / (1024 * 1024 * 1024); - _physicalMemoryLoad.Value = 100.0f - (100.0f * status.ullAvailPhys) / status.ullTotalPhys; + _physicalMemoryLoad.Value = 100.0f - ((100.0f * status.ullAvailPhys) / status.ullTotalPhys); _virtualMemoryUsed.Value = (float)(status.ullTotalPageFile - status.ullAvailPageFile) / (1024 * 1024 * 1024); _virtualMemoryAvailable.Value = (float)status.ullAvailPageFile / (1024 * 1024 * 1024); - _virtualMemoryLoad.Value = 100.0f - (100.0f * status.ullAvailPageFile) / status.ullTotalPageFile; + _virtualMemoryLoad.Value = 100.0f - ((100.0f * status.ullAvailPageFile) / status.ullTotalPageFile); } } } diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/EC/EmbeddedController.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/EC/EmbeddedController.cs index 21dfbc4..1660d5c 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/EC/EmbeddedController.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/EC/EmbeddedController.cs @@ -13,75 +13,154 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC { public abstract class EmbeddedController : Hardware { - private enum ECSensor + // If you are updating board information, please consider sharing your changes with the corresponding Linux driver. + // You can do that at https://github.com/zeule/asus-ec-sensors or contribute directly to Linux HWMON. + // If you are adding a new board, please share DSDT table for the board at https://github.com/zeule/asus-ec-sensors. + // https://dortania.github.io/Getting-Started-With-ACPI/Manual/dump.html + private static readonly BoardInfo[] _boards = { - /// Chipset temperature [℃] - TempChipset, - /// CPU temperature [℃] - TempCPU, - /// motherboard temperature [℃] - TempMB, - /// "T_Sensor" temperature sensor reading [℃] - TempTSensor, - /// VRM temperature [℃] - TempVrm, - /// CPU Core voltage [mV] - VoltageCPU, - /// CPU_Opt fan [RPM] - FanCPUOpt, - /// VRM heat sink fan [RPM] - FanVrmHS, - /// Chipset fan [RPM] - FanChipset, - /// Water Pump [RPM] - FanWaterPump, - /// Water flow sensor reading [RPM] - FanWaterFlow, - /// CPU current [A] - CurrCPU, - /// "Water_In" temperature sensor reading [℃] - TempWaterIn, - /// "Water_Out" temperature sensor reading [℃] - TempWaterOut, - /// Water block temperature sensor reading [℃] - TempWaterBlockIn, - Max - }; - - private enum BoardFamily - { - Amd400, - Amd500, - Intel100, - Intel600, - } - - private struct BoardInfo - { - public BoardInfo(Model[] models, BoardFamily family, params ECSensor[] sensors) - { - Models = models; - Family = family; - Sensors = sensors; - } - - public BoardInfo(Model model, BoardFamily family, params ECSensor[] sensors) - { - Models = new Model[] { model }; - Family = family; - Sensors = sensors; - } - - public Model[] Models { get; } - public BoardFamily Family { get; } - public ECSensor[] Sensors { get; } + new(Model.PRIME_X470_PRO, + BoardFamily.Amd400, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempVrm, + ECSensor.TempVrm, + ECSensor.FanCPUOpt, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.PRIME_X570_PRO, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempVrm, + ECSensor.TempTSensor, + ECSensor.FanChipset), + new(Model.PROART_X570_CREATOR_WIFI, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempVrm, + ECSensor.TempTSensor, + ECSensor.FanCPUOpt, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.PRO_WS_X570_ACE, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempVrm, + ECSensor.FanChipset, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(new[] { Model.ROG_CROSSHAIR_VIII_HERO, Model.ROG_CROSSHAIR_VIII_HERO_WIFI, Model.ROG_CROSSHAIR_VIII_FORMULA }, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.TempVrm, + ECSensor.TempWaterIn, + ECSensor.TempWaterOut, + ECSensor.FanCPUOpt, + ECSensor.FanChipset, + ECSensor.FanWaterFlow, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.ROG_CROSSHAIR_VIII_DARK_HERO, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.TempVrm, + ECSensor.TempWaterIn, + ECSensor.TempWaterOut, + ECSensor.FanCPUOpt, + ECSensor.FanWaterFlow, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.ROG_CROSSHAIR_VIII_IMPACT, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.TempVrm, + ECSensor.FanChipset, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.ROG_STRIX_B550_E_GAMING, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.TempVrm, + ECSensor.FanCPUOpt), + new(Model.ROG_STRIX_B550_I_GAMING, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.TempVrm, + ECSensor.FanVrmHS, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.ROG_STRIX_X570_E_GAMING, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.TempVrm, + ECSensor.FanChipset, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), + new(Model.ROG_STRIX_X570_F_GAMING, + BoardFamily.Amd500, + ECSensor.TempChipset, + ECSensor.TempCPU, + ECSensor.TempMB, + ECSensor.TempTSensor, + ECSensor.FanChipset), + new(Model.ROG_STRIX_X570_I_GAMING, + BoardFamily.Amd500, + ECSensor.TempTSensor, + ECSensor.FanVrmHS, + ECSensor.FanChipset, + ECSensor.CurrCPU, + ECSensor.VoltageCPU, + ECSensor.TempChipset, + ECSensor.TempVrm), + new(Model.ROG_STRIX_Z690_A_GAMING_WIFI_D4, + BoardFamily.Intel600, + ECSensor.TempTSensor, + ECSensor.TempVrm), + new(Model.ROG_MAXIMUS_Z690_EXTREME_GLACIAL, + BoardFamily.Intel600, + ECSensor.TempVrm, + ECSensor.TempWaterIn, + ECSensor.TempWaterOut, + ECSensor.TempWaterBlockIn, + ECSensor.FanWaterFlow), + new(Model.Z170_A, + BoardFamily.Intel100, + ECSensor.TempTSensor, + ECSensor.TempChipset, + ECSensor.FanWaterPump, + ECSensor.CurrCPU, + ECSensor.VoltageCPU), }; private static readonly Dictionary> _knownSensors = new() { { - BoardFamily.Amd400, - new() // no chipset fans in this generation + BoardFamily.Amd400, new Dictionary() // no chipset fans in this generation { { ECSensor.TempChipset, new EmbeddedControllerSource("Chipset", SensorType.Temperature, 0x003a) }, { ECSensor.TempCPU, new EmbeddedControllerSource("CPU", SensorType.Temperature, 0x003b) }, @@ -98,8 +177,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC } }, { - BoardFamily.Amd500, - new() + BoardFamily.Amd500, new Dictionary { { ECSensor.TempChipset, new EmbeddedControllerSource("Chipset", SensorType.Temperature, 0x003a) }, { ECSensor.TempCPU, new EmbeddedControllerSource("CPU", SensorType.Temperature, 0x003b) }, @@ -118,8 +196,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC } }, { - BoardFamily.Intel100, - new() { + BoardFamily.Intel100, new Dictionary + { { ECSensor.TempChipset, new EmbeddedControllerSource("Chipset", SensorType.Temperature, 0x003a) }, { ECSensor.TempTSensor, new EmbeddedControllerSource("T Sensor", SensorType.Temperature, 0x003d, blank: -40) }, { ECSensor.FanWaterPump, new EmbeddedControllerSource("Water Pump", SensorType.Fan, 0x00bc, 2) }, @@ -128,8 +206,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC } }, { - BoardFamily.Intel600, - new() + BoardFamily.Intel600, new Dictionary { { ECSensor.TempTSensor, new EmbeddedControllerSource("T Sensor", SensorType.Temperature, 0x003d, blank: -40) }, { ECSensor.TempVrm, new EmbeddedControllerSource("VRM", SensorType.Temperature, 0x003e) }, @@ -141,93 +218,17 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC }, }; - // If you are updating board information, please consider sharing your changes with the corresponding Linux driver. - // You can do that at https://github.com/zeule/asus-ec-sensors or contribute directly to Linux HWMON. - // If you are adding a new board, please share DSDT table for the board at https://github.com/zeule/asus-ec-sensors. - // https://dortania.github.io/Getting-Started-With-ACPI/Manual/dump.html - private static readonly BoardInfo[] _boards = new BoardInfo[]{ - new(Model.PRIME_X470_PRO, BoardFamily.Amd400, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempVrm, ECSensor.TempVrm, ECSensor.FanCPUOpt, - ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new (Model.PRIME_X570_PRO, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempVrm, ECSensor.TempTSensor, ECSensor.FanChipset - ), - new(Model.PROART_X570_CREATOR_WIFI, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempVrm, ECSensor.TempTSensor, ECSensor.FanCPUOpt, - ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(Model.PRO_WS_X570_ACE, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempVrm, ECSensor.FanChipset, ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(new Model[] {Model.ROG_CROSSHAIR_VIII_HERO, Model.ROG_CROSSHAIR_VIII_HERO_WIFI, Model.ROG_CROSSHAIR_VIII_FORMULA }, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.TempVrm, ECSensor.TempWaterIn, ECSensor.TempWaterOut, - ECSensor.FanCPUOpt, ECSensor.FanChipset, ECSensor.FanWaterFlow, - ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(Model.ROG_CROSSHAIR_VIII_DARK_HERO, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.TempVrm, ECSensor.TempWaterIn, ECSensor.TempWaterOut, - ECSensor.FanCPUOpt, ECSensor.FanWaterFlow, ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(Model.ROG_CROSSHAIR_VIII_IMPACT, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.TempVrm, - ECSensor.FanChipset, ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(Model.ROG_STRIX_B550_E_GAMING, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.TempVrm, ECSensor.FanCPUOpt - ), - new(Model.ROG_STRIX_B550_I_GAMING, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.TempVrm, - ECSensor.FanVrmHS, ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(Model.ROG_STRIX_X570_E_GAMING, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.TempVrm, - ECSensor.FanChipset, ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - new(Model.ROG_STRIX_X570_F_GAMING, BoardFamily.Amd500, - ECSensor.TempChipset, ECSensor.TempCPU, ECSensor.TempMB, - ECSensor.TempTSensor, ECSensor.FanChipset - ), - new(Model.ROG_STRIX_X570_I_GAMING, BoardFamily.Amd500, - ECSensor.TempTSensor, ECSensor.FanVrmHS, ECSensor.FanChipset, - ECSensor.CurrCPU, ECSensor.VoltageCPU, ECSensor.TempChipset, - ECSensor.TempVrm - ), - new(Model.ROG_STRIX_Z690_A_GAMING_WIFI_D4, BoardFamily.Intel600, - ECSensor.TempTSensor, ECSensor.TempVrm - ), - new(Model.ROG_MAXIMUS_Z690_EXTREME_GLACIAL, BoardFamily.Intel600, - ECSensor.TempVrm, ECSensor.TempWaterIn, ECSensor.TempWaterOut, ECSensor.TempWaterBlockIn, ECSensor.FanWaterFlow - ), - new(Model.Z170_A, BoardFamily.Intel100, - ECSensor.TempTSensor, ECSensor.TempChipset, ECSensor.FanWaterPump, - ECSensor.CurrCPU, ECSensor.VoltageCPU - ), - }; + private readonly byte[] _data; + private readonly ushort[] _registers; + private readonly List _sensors; private readonly IReadOnlyList _sources; - private readonly List _sensors; - private readonly ushort[] _registers; - private readonly byte[] _data; protected EmbeddedController(IEnumerable sources, ISettings settings) : base("Embedded Controller", new Identifier("lpc", "ec"), settings) { // sorting by address, which implies sorting by bank, for optimized EC access var sourcesList = sources.ToList(); - sourcesList.Sort((left, right) => - { - return left.Register.CompareTo(right.Register); - }); + sourcesList.Sort((left, right) => left.Register.CompareTo(right.Register)); _sources = sourcesList; var indices = new Dictionary(); foreach (SensorType t in Enum.GetValues(typeof(SensorType))) @@ -261,10 +262,12 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC var boards = _boards.Where(b => b.Models.Contains(model)).ToList(); if (boards.Count == 0) return null; + if (boards.Count > 1) throw new MultipleBoardRecordsFoundException(model.ToString()); + BoardInfo board = boards[0]; - var sources = board.Sensors.Select(ecs => _knownSensors[board.Family][ecs]); + IEnumerable sources = board.Sensors.Select(ecs => _knownSensors[board.Family][ecs]); return Environment.OSVersion.Platform switch { @@ -290,6 +293,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC 2 => unchecked((short)((_data[readRegister] << 8) + _data[readRegister + 1])), _ => 0, }; + readRegister += _sources[si].Size; _sensors[si].Value = val != _sources[si].Blank ? val * _sources[si].Factor : null; @@ -315,6 +319,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC { src[i] = i; } + embeddedControllerIO.Read(src, data); for (int i = 0; i <= 0xF; ++i) { @@ -355,18 +360,102 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC } } - public class IOException: System.IO.IOException { - public IOException(string message): base($"ACPI embedded controller I/O error: {message}") { } + private enum ECSensor + { + /// Chipset temperature [℃] + TempChipset, + + /// CPU temperature [℃] + TempCPU, + + /// motherboard temperature [℃] + TempMB, + + /// "T_Sensor" temperature sensor reading [℃] + TempTSensor, + + /// VRM temperature [℃] + TempVrm, + + /// CPU Core voltage [mV] + VoltageCPU, + + /// CPU_Opt fan [RPM] + FanCPUOpt, + + /// VRM heat sink fan [RPM] + FanVrmHS, + + /// Chipset fan [RPM] + FanChipset, + + /// Water Pump [RPM] + FanWaterPump, + + /// Water flow sensor reading [RPM] + FanWaterFlow, + + /// CPU current [A] + CurrCPU, + + /// "Water_In" temperature sensor reading [℃] + TempWaterIn, + + /// "Water_Out" temperature sensor reading [℃] + TempWaterOut, + + /// Water block temperature sensor reading [℃] + TempWaterBlockIn, + Max } - public class BadConfigurationException: System.Exception + private enum BoardFamily { - public BadConfigurationException(string message): base(message) { } + Amd400, + Amd500, + Intel100, + Intel600, + } + + private struct BoardInfo + { + public BoardInfo(Model[] models, BoardFamily family, params ECSensor[] sensors) + { + Models = models; + Family = family; + Sensors = sensors; + } + + public BoardInfo(Model model, BoardFamily family, params ECSensor[] sensors) + { + Models = new[] { model }; + Family = family; + Sensors = sensors; + } + + public Model[] Models { get; } + + public BoardFamily Family { get; } + + public ECSensor[] Sensors { get; } + } + + public class IOException : System.IO.IOException + { + public IOException(string message) : base($"ACPI embedded controller I/O error: {message}") + { } + } + + public class BadConfigurationException : Exception + { + public BadConfigurationException(string message) : base(message) + { } } public class MultipleBoardRecordsFoundException : BadConfigurationException { - public MultipleBoardRecordsFoundException(string model) : base($"Multiple board records refer to the same model '{model}'") { } + public MultipleBoardRecordsFoundException(string model) : base($"Multiple board records refer to the same model '{model}'") + { } } } } diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/F718XX.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/F718XX.cs index be260e8..2f3a8bb 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/F718XX.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/F718XX.cs @@ -25,7 +25,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc Voltages = new float?[chip == Chip.F71858 ? 3 : 9]; Temperatures = new float?[chip == Chip.F71808E ? 2 : 3]; - Fans = new float?[chip == Chip.F71882 || chip == Chip.F71858 ? 4 : 3]; + Fans = new float?[chip is Chip.F71882 or Chip.F71858 ? 4 : 3]; Controls = new float?[chip == Chip.F71878AD ? 3 : 0]; } @@ -52,11 +52,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (index < 0 || index >= Controls.Length) throw new ArgumentOutOfRangeException(nameof(index)); - if (!Ring0.WaitIsaBusMutex(10)) return; - if (value.HasValue) { SaveDefaultFanPwmControl(index); @@ -73,7 +71,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc public string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("LPC " + GetType().Name); r.AppendLine(); @@ -84,7 +82,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(100)) return r.ToString(); - r.AppendLine("Hardware Monitor Registers"); r.AppendLine(); r.AppendLine(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"); @@ -115,7 +112,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(10)) return; - for (int i = 0; i < Voltages.Length; i++) { if (Chip == Chip.F71808E && i == 6) @@ -137,15 +133,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc case Chip.F71858: { int tableMode = 0x3 & ReadByte(TEMPERATURE_CONFIG_REG); - int high = ReadByte((byte)(TEMPERATURE_BASE_REG + 2 * i)); - int low = ReadByte((byte)(TEMPERATURE_BASE_REG + 2 * i + 1)); - if (high != 0xbb && high != 0xcc) + int high = ReadByte((byte)(TEMPERATURE_BASE_REG + (2 * i))); + int low = ReadByte((byte)(TEMPERATURE_BASE_REG + (2 * i) + 1)); + if (high is not 0xbb and not 0xcc) { int bits = 0; switch (tableMode) { case 0: - bits = 0; break; case 1: bits = 0; @@ -172,8 +167,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc break; default: { - sbyte value = (sbyte)ReadByte((byte)(TEMPERATURE_BASE_REG + 2 * (i + 1))); - if (value < sbyte.MaxValue && value > 0) + sbyte value = (sbyte)ReadByte((byte)(TEMPERATURE_BASE_REG + (2 * (i + 1)))); + if (value is < sbyte.MaxValue and > 0) Temperatures[i] = value; else Temperatures[i] = null; diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/IT87XX.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/IT87XX.cs index d72b9b6..3d003b8 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/IT87XX.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/IT87XX.cs @@ -19,7 +19,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private readonly ushort _addressReg; private readonly int _bankCount; private readonly ushort _dataReg; - private readonly bool[] _fansDisabled = new bool[0]; + private readonly bool[] _fansDisabled = Array.Empty(); private readonly ushort _gpioAddress; private readonly int _gpioCount; private readonly bool _has16BitFanCounter; @@ -48,7 +48,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) return; - bool hasMatchingVendorId = false; foreach (byte iteVendorId in ITE_VENDOR_IDS) { @@ -62,13 +61,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!hasMatchingVendorId) return; - // Bit 0x10 of the configuration register should always be 1 byte configuration = ReadByte(CONFIGURATION_REGISTER, out valid); if (!valid || ((configuration & 0x10) == 0 && chip != Chip.IT8655E && chip != Chip.IT8665E)) return; - FAN_PWM_CTRL_REG = chip == Chip.IT8665E ? new byte[] { 0x15, 0x16, 0x17, 0x1e, 0x1f } : new byte[] { 0x15, 0x16, 0x17, 0x7f, 0xa7, 0xaf }; @@ -79,152 +76,112 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _ => 1 }; - _hasExtReg = chip == Chip.IT8721F || - chip == Chip.IT8728F || - chip == Chip.IT8665E || - chip == Chip.IT8686E || - chip == Chip.IT8688E || - chip == Chip.IT8689E || - chip == Chip.IT8695E || - chip == Chip.IT8628E || - chip == Chip.IT8620E || - chip == Chip.IT8613E || - chip == Chip.IT879XE || - chip == Chip.IT8655E || - chip == Chip.IT8631E; + _hasExtReg = chip is Chip.IT8721F or + Chip.IT8728F or + Chip.IT8665E or + Chip.IT8686E or + Chip.IT8688E or + Chip.IT8689E or + Chip.IT8695E or + Chip.IT8628E or + Chip.IT8620E or + Chip.IT8613E or + Chip.IT879XE or + Chip.IT8655E or + Chip.IT8631E; switch (chip) { case Chip.IT8613E: - { Voltages = new float?[10]; Temperatures = new float?[4]; Fans = new float?[5]; Controls = new float?[4]; break; - } + case Chip.IT8628E: - { Voltages = new float?[10]; Temperatures = new float?[6]; Fans = new float?[4]; Controls = new float?[4]; break; - } + case Chip.IT8631E: - { Voltages = new float?[9]; Temperatures = new float?[2]; Fans = new float?[2]; Controls = new float?[2]; break; - } + case Chip.IT8665E: case Chip.IT8686E: - { Voltages = new float?[10]; Temperatures = new float?[6]; Fans = new float?[6]; Controls = new float?[5]; break; - } + case Chip.IT8688E: - { Voltages = new float?[11]; Temperatures = new float?[6]; Fans = new float?[6]; Controls = new float?[5]; break; - } + case Chip.IT8689E: - { Voltages = new float?[10]; Temperatures = new float?[6]; Fans = new float?[6]; Controls = new float?[6]; break; - } + case Chip.IT8695E: - { Voltages = new float?[6]; Temperatures = new float?[3]; Fans = new float?[3]; Controls = new float?[3]; break; - } + case Chip.IT8655E: - { Voltages = new float?[9]; Temperatures = new float?[6]; Fans = new float?[3]; Controls = new float?[3]; break; - } + case Chip.IT879XE: - { Voltages = new float?[9]; Temperatures = new float?[3]; Fans = new float?[3]; Controls = new float?[3]; break; - } + case Chip.IT8705F: - { Voltages = new float?[9]; Temperatures = new float?[3]; Fans = new float?[3]; Controls = new float?[3]; break; - } + default: - { Voltages = new float?[9]; Temperatures = new float?[3]; Fans = new float?[5]; Controls = new float?[3]; break; - } } _fansDisabled = new bool[Fans.Length]; - switch (chip) + // IT8620E, IT8628E, IT8721F, IT8728F, IT8772E and IT8686E use a 12mV resolution. + // All others 16mV. + _voltageGain = chip switch { - // IT8620E, IT8628E, IT8721F, IT8728F, IT8772E and IT8686E use a 12mV resolution. - // All others 16mV. - case Chip.IT8613E: - case Chip.IT8620E: - case Chip.IT8628E: - case Chip.IT8631E: - case Chip.IT8721F: - case Chip.IT8728F: - case Chip.IT8771E: - case Chip.IT8772E: - case Chip.IT8686E: - case Chip.IT8688E: - case Chip.IT8689E: - { - _voltageGain = 0.012f; - break; - } - case Chip.IT8695E: - { - _voltageGain = 11f / 1000f; - break; - } - case Chip.IT8655E: - case Chip.IT8665E: - case Chip.IT879XE: - { - _voltageGain = 0.0109f; - break; - } - default: - { - _voltageGain = 0.016f; - break; - } - } + Chip.IT8613E or Chip.IT8620E or Chip.IT8628E or Chip.IT8631E or Chip.IT8721F or Chip.IT8728F or Chip.IT8771E or Chip.IT8772E or Chip.IT8686E or Chip.IT8688E or Chip.IT8689E => 0.012f, + Chip.IT8695E => 11f / 1000f, + Chip.IT8655E or Chip.IT8665E or Chip.IT879XE => 0.0109f, + _ => 0.016f, + }; // Older IT8705F and IT8721F revisions do not have 16-bit fan counters. _has16BitFanCounter = (chip != Chip.IT8705F || version >= 3) && (chip != Chip.IT8712F || version >= 8); @@ -237,7 +194,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) return; - if (Fans.Length >= 5) { _fansDisabled[3] = (modes & (1 << 4)) == 0; @@ -249,46 +205,29 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc } // Set the number of GPIO sets - switch (chip) + _gpioCount = chip switch { - case Chip.IT8712F: - case Chip.IT8716F: - case Chip.IT8718F: - case Chip.IT8726F: - { - _gpioCount = 5; - break; - } - case Chip.IT8720F: - case Chip.IT8721F: - { - _gpioCount = 8; - break; - } - default: - { - _gpioCount = 0; - break; - } - } + Chip.IT8712F or Chip.IT8716F or Chip.IT8718F or Chip.IT8726F => 5, + Chip.IT8720F or Chip.IT8721F => 8, + _ => 0, + }; } public Chip Chip { get; } - public float?[] Controls { get; } = new float?[0]; + public float?[] Controls { get; } = Array.Empty(); - public float?[] Fans { get; } = new float?[0]; + public float?[] Fans { get; } = Array.Empty(); - public float?[] Temperatures { get; } = new float?[0]; + public float?[] Temperatures { get; } = Array.Empty(); - public float?[] Voltages { get; } = new float?[0]; + public float?[] Voltages { get; } = Array.Empty(); public byte? ReadGpio(int index) { if (index >= _gpioCount) return null; - return Ring0.ReadIoPort((ushort)(_gpioAddress + index)); } @@ -297,7 +236,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (index >= _gpioCount) return; - Ring0.WriteIoPort((ushort)(_gpioAddress + index), value); } @@ -306,11 +244,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (index < 0 || index >= Controls.Length) throw new ArgumentOutOfRangeException(nameof(index)); - if (!Ring0.WaitIsaBusMutex(10)) return; - if (value.HasValue) { SaveDefaultFanPwmControl(index); @@ -326,7 +262,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc } else { - WriteByte(FAN_PWM_CTRL_REG[index], (byte)(_initialFanPwmControl[index] & 0x7F)); + WriteByte(FAN_PWM_CTRL_REG[index], (byte)(_initialFanPwmControl[index] & 0x7F)); } WriteByte(FAN_PWM_CTRL_EXT_REG[index], value.Value); } @@ -345,7 +281,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc public string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("LPC " + GetType().Name); r.AppendLine(); @@ -367,7 +303,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { if (SupportsMultipleBanks && b > 0) { - SelectBank(b); + SelectBank(b); } r.AppendLine($"Environment Controller Registers Bank {b}"); r.AppendLine(); @@ -387,13 +323,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc r.AppendLine(); } - + r.AppendLine(); } if (SupportsMultipleBanks) { - SelectBank(0); + SelectBank(0); } r.AppendLine(); @@ -411,26 +347,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc Ring0.ReleaseIsaBusMutex(); return r.ToString(); } - - /// - /// Return the currently active bank index. - /// - /// - private int GetCurrentBank() - { - if (_bankCount <= 1) - return 0; // current chip does not support multi bank registers - - var value = ReadByte(BANK_REGISTER, out bool valid); - if (valid) - { - return (value & 0x60) >> 5; - } - else - { - return -1; - } - } /// /// Selects another bank. Memory from 0x10-0xAF swaps to data from new bank. @@ -446,12 +362,12 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc // hard cap SelectBank to 2 bit values. If we ever have chips with more bank bits rewrite this method. bankIndex &= 0x3; - var value = ReadByte(BANK_REGISTER, out bool valid); + byte value = ReadByte(BANK_REGISTER, out bool valid); if (valid) { value &= 0x9F; value |= (byte)(bankIndex << 5); - WriteByte(BANK_REGISTER, value ); + WriteByte(BANK_REGISTER, value); } } @@ -460,7 +376,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(10)) return; - for (int i = 0; i < Voltages.Length; i++) { float value = _voltageGain * ReadByte((byte)(VOLTAGE_BASE_REG + i), out bool valid); @@ -468,7 +383,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) continue; - if (value > 0) Voltages[i] = value; else @@ -481,8 +395,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) continue; - - if (value < sbyte.MaxValue && value > 0) + if (value is < sbyte.MaxValue and > 0) Temperatures[i] = value; else Temperatures[i] = null; @@ -495,17 +408,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (_fansDisabled[i]) continue; - int value = ReadByte(FAN_TACHOMETER_REG[i], out bool valid); if (!valid) continue; - value |= ReadByte(FAN_TACHOMETER_EXT_REG[i], out valid) << 8; if (!valid) continue; - if (value > 0x3f) Fans[i] = value < 0xffff ? 1.35e6f / (value * 2) : 0; else @@ -520,7 +430,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) continue; - int divisor = 2; if (i < 2) { @@ -528,7 +437,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) continue; - divisor = 1 << ((divisors >> (3 * i)) & 0x7); } @@ -545,7 +453,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!valid) continue; - if ((value & 0x80) > 0) { // Automatic operation (value can't be read). @@ -644,7 +551,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private const byte VOLTAGE_BASE_REG = 0x20; private readonly byte[] FAN_PWM_CTRL_REG; - private readonly byte[] FAN_PWM_CTRL_EXT_REG = { 0x63, 0x6b, 0x73, 0x7b, 0xa3, 0xab}; + private readonly byte[] FAN_PWM_CTRL_EXT_REG = { 0x63, 0x6b, 0x73, 0x7b, 0xa3, 0xab }; private readonly byte[] FAN_TACHOMETER_EXT_REG = { 0x18, 0x19, 0x1a, 0x81, 0x83, 0x4d }; private readonly byte[] FAN_TACHOMETER_REG = { 0x0d, 0x0e, 0x0f, 0x80, 0x82, 0x4c }; diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LMSensors.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LMSensors.cs index 9985f50..f333bcc 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LMSensors.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LMSensors.cs @@ -4,6 +4,7 @@ // Partial Copyright (C) Michael Möller and Contributors. // All Rights Reserved. +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -15,13 +16,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { internal class LMSensors { - private readonly List _superIOs = new List(); + private readonly List _superIOs = new(); public LMSensors() { - string[] basePaths = Directory.GetDirectories("/sys/class/hwmon/"); - - foreach (string basePath in basePaths) + foreach (string basePath in Directory.GetDirectories("/sys/class/hwmon/")) { foreach (string devicePath in new[] { "/device", string.Empty }) { @@ -30,7 +29,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc string name = null; try { - using (StreamReader reader = new StreamReader(path + "/name")) + using (StreamReader reader = new(path + "/name")) name = reader.ReadLine(); } catch (IOException) @@ -188,7 +187,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc for (int i = 0; i < fanPaths.Length; i++) _fanStreams[i] = new FileStream(fanPaths[i], FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - Controls = new float?[0]; + Controls = Array.Empty(); } public Chip Chip { get; } @@ -263,12 +262,12 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private string ReadFirstLine(Stream stream) { - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new(); try { stream.Seek(0, SeekOrigin.Begin); int b = stream.ReadByte(); - while (b != -1 && b != 10) + while (b is not (-1) and not 10) { sb.Append((char)b); b = stream.ReadByte(); diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs index 4bf4918..3a0f25c 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/LpcIO.cs @@ -14,8 +14,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { internal class LpcIO { - private readonly StringBuilder _report = new StringBuilder(); - private readonly List _superIOs = new List(); + private readonly StringBuilder _report = new(); + private readonly List _superIOs = new(); public LpcIO() { @@ -25,7 +25,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(100)) return; - Detect(); Ring0.ReleaseIsaBusMutex(); @@ -51,26 +50,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc port.SmscEnter(); ushort chipId = port.ReadWord(CHIP_ID_REGISTER); - Chip chip; - switch (chipId) - { - default: - chip = Chip.Unknown; - break; - } - if (chip == Chip.Unknown) - { - if (chipId != 0 && chipId != 0xffff) - { - port.SmscExit(); - ReportUnknownChip(port, "SMSC", chipId); - } - } - else + if (chipId is not 0 and not 0xffff) { port.SmscExit(); - return true; + ReportUnknownChip(port, "SMSC", chipId); } return false; @@ -112,408 +96,291 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc switch (id) { case 0x05: - { switch (revision) { case 0x07: - { chip = Chip.F71858; logicalDeviceNumber = F71858_HARDWARE_MONITOR_LDN; break; - } case 0x41: - { chip = Chip.F71882; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x06: - { switch (revision) { case 0x01: - { chip = Chip.F71862; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x07: - { switch (revision) { case 0x23: - { chip = Chip.F71889F; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x08: - { switch (revision) { case 0x14: - { chip = Chip.F71869; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x09: - { switch (revision) { case 0x01: - { chip = Chip.F71808E; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } case 0x09: - { chip = Chip.F71889ED; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x10: - { switch (revision) { case 0x05: - { chip = Chip.F71889AD; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } case 0x07: - { chip = Chip.F71869A; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x11: - { switch (revision) { case 0x06: - { chip = Chip.F71878AD; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } case 0x18: - { chip = Chip.F71811; logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x52: - { switch (revision) { case 0x17: case 0x3A: case 0x41: - { chip = Chip.W83627HF; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x82: - { switch (revision & 0xF0) { case 0x80: - { chip = Chip.W83627THF; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x85: - { switch (revision) { case 0x41: - { chip = Chip.W83687THF; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0x88: - { switch (revision & 0xF0) { case 0x50: case 0x60: - { chip = Chip.W83627EHF; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xA0: - { switch (revision & 0xF0) { case 0x20: - { chip = Chip.W83627DHG; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xA5: - { switch (revision & 0xF0) { case 0x10: - { chip = Chip.W83667HG; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xB0: - { switch (revision & 0xF0) { case 0x70: - { chip = Chip.W83627DHGP; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xB3: - { switch (revision & 0xF0) { case 0x50: - { chip = Chip.W83667HGB; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xB4: - { switch (revision & 0xF0) { case 0x70: - { chip = Chip.NCT6771F; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xC3: - { switch (revision & 0xF0) { case 0x30: - { chip = Chip.NCT6776F; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xC4: - { switch (revision & 0xF0) { case 0x50: - { chip = Chip.NCT610XD; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xC5: - { switch (revision & 0xF0) { case 0x60: - { chip = Chip.NCT6779D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xC8: - { switch (revision) { case 0x03: - { chip = Chip.NCT6791D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xC9: - { switch (revision) { case 0x11: - { chip = Chip.NCT6792D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } case 0x13: - { chip = Chip.NCT6792DA; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xD1: - { switch (revision) { case 0x21: - { chip = Chip.NCT6793D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xD3: - { switch (revision) { case 0x52: - { chip = Chip.NCT6795D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xD4: - { switch (revision) { case 0x23: - { chip = Chip.NCT6796D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } case 0x2A: - { chip = Chip.NCT6796DR; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } case 0x51: - { chip = Chip.NCT6797D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } case 0x2B: - { chip = Chip.NCT6798D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 0xD5: - { switch (revision) { case 0x92: - { chip = Chip.NCT6687D; logicalDeviceNumber = WINBOND_NUVOTON_HARDWARE_MONITOR_LDN; break; - } } - break; - } + case 199: - { switch (revision) { case 50: @@ -522,12 +389,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc break; } break; - } } if (chip == Chip.Unknown) { - if (id != 0 && id != 0xff) + if (id is not 0 and not 0xff) { port.WinbondNuvotonFintekExit(); ReportUnknownChip(port, "Winbond / Nuvoton / Fintek", (id << 8) | revision); @@ -543,15 +409,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc ushort vendorId = port.ReadWord(FINTEK_VENDOR_ID_REGISTER); // disable the hardware monitor i/o space lock on NCT679XD chips - if (address == verify && (chip == Chip.NCT6791D || - chip == Chip.NCT6792D || - chip == Chip.NCT6792DA || - chip == Chip.NCT6793D || - chip == Chip.NCT6795D || - chip == Chip.NCT6796D || - chip == Chip.NCT6796DR || - chip == Chip.NCT6798D || - chip == Chip.NCT6797D)) + if (address == verify && + chip is Chip.NCT6791D or Chip.NCT6792D or Chip.NCT6792DA or Chip.NCT6793D or Chip.NCT6795D or Chip.NCT6796D or Chip.NCT6796DR or Chip.NCT6798D or Chip.NCT6797D) { port.NuvotonDisableIOSpaceLock(); } @@ -597,10 +456,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc case Chip.W83667HG: case Chip.W83667HGB: case Chip.W83687THF: - { _superIOs.Add(new W836XX(chip, revision, address)); break; - } + case Chip.NCT610XD: case Chip.NCT6771F: case Chip.NCT6776F: @@ -616,10 +474,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc case Chip.NCT6798D: case Chip.NCT6687D: case Chip.NCT6683D: - { _superIOs.Add(new Nct677X(chip, revision, address, port)); break; - } + case Chip.F71858: case Chip.F71862: case Chip.F71869: @@ -630,7 +487,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc case Chip.F71889ED: case Chip.F71889F: case Chip.F71808E: - { if (vendorId != FINTEK_VENDOR_ID) { _report.Append("Chip ID: 0x"); @@ -646,7 +502,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _superIOs.Add(new F718XX(chip, address)); break; - } } return true; @@ -659,10 +514,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { // IT87XX can enter only on port 0x2E // IT8792 using 0x4E - if (port.RegisterPort != 0x2E && port.RegisterPort != 0x4E) + if (port.RegisterPort is not 0x2E and not 0x4E) return false; - port.IT87Enter(); ushort chipId = port.ReadWord(CHIP_ID_REGISTER); @@ -678,8 +532,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc case 0x8628: chip = Chip.IT8628E; break; - case 0x8631: - chip = Chip.IT8631E; + case 0x8631: + chip = Chip.IT8631E; break; case 0x8665: chip = Chip.IT8665E; @@ -739,7 +593,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (chip == Chip.Unknown) { - if (chipId != 0 && chipId != 0xffff) + if (chipId is not 0 and not 0xffff) { port.IT87Exit(); @@ -748,7 +602,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc } else { - port.Select(IT87_ENVIRONMENT_CONTROLLER_LDN); + port.Select(IT87_ENVIRONMENT_CONTROLLER_LDN); ushort address = port.ReadWord(BASE_ADDRESS_REGISTER); Thread.Sleep(1); diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/Nct677X.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/Nct677X.cs index 3dc22f8..9b1adec 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/Nct677X.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/Nct677X.cs @@ -17,7 +17,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { private readonly struct TemperatureSourceData { - public TemperatureSourceData(Enum? source, ushort register, ushort halfRegister = 0, int halfBit = -1, ushort sourceRegister = 0, ushort? alternateRegister = null) + public TemperatureSourceData(Enum source, ushort register, ushort halfRegister = 0, int halfBit = -1, ushort sourceRegister = 0, ushort? alternateRegister = null) { Source = source; Register = register; @@ -26,7 +26,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc SourceRegister = sourceRegister; AlternateRegister = alternateRegister; } - public readonly Enum? Source; + public readonly Enum Source; public readonly ushort Register; public readonly ushort HalfRegister; public readonly int HalfBit; @@ -69,7 +69,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _vBatMonitorControlRegister = 0x0318; } - else if (chip == Chip.NCT6687D || chip == Chip.NCT6683D) + else if (chip is Chip.NCT6687D or Chip.NCT6683D) { FAN_PWM_OUT_REG = new ushort[] { 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167 }; FAN_PWM_COMMAND_REG = new ushort[] { 0xA28, 0xA29, 0xA2A, 0xA2B, 0xA2C, 0xA2D, 0xA2E, 0xA2F }; @@ -81,10 +81,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc VENDOR_ID_HIGH_REGISTER = 0x804F; VENDOR_ID_LOW_REGISTER = 0x004F; - if (chip == Chip.NCT6797D || chip == Chip.NCT6798D) - FAN_PWM_OUT_REG = new ushort[] { 0x001, 0x003, 0x011, 0x013, 0x015, 0xA09, 0xB09 }; - else - FAN_PWM_OUT_REG = new ushort[] { 0x001, 0x003, 0x011, 0x013, 0x015, 0x017, 0x029 }; + FAN_PWM_OUT_REG = chip is Chip.NCT6797D or Chip.NCT6798D + ? new ushort[] { 0x001, 0x003, 0x011, 0x013, 0x015, 0xA09, 0xB09 } + : new ushort[] { 0x001, 0x003, 0x011, 0x013, 0x015, 0x017, 0x029 }; FAN_PWM_COMMAND_REG = new ushort[] { 0x109, 0x209, 0x309, 0x809, 0x909, 0xA09, 0xB09 }; FAN_CONTROL_MODE_REG = new ushort[] { 0x102, 0x202, 0x302, 0x802, 0x902, 0xA02, 0xB02 }; @@ -97,12 +96,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!_isNuvotonVendor) return; - switch (chip) { case Chip.NCT6771F: case Chip.NCT6776F: - { if (chip == Chip.NCT6771F) { Fans = new float?[4]; @@ -129,20 +126,20 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _voltageVBatRegister = 0x551; _temperaturesSource = new TemperatureSourceData[] { - new TemperatureSourceData(chip == Chip.NCT6771F ? SourceNct6771F.PECI_0 : SourceNct6776F.PECI_0, 0x027, 0, -1, 0x621), - new TemperatureSourceData(chip == Chip.NCT6771F ? SourceNct6771F.CPUTIN : SourceNct6776F.CPUTIN, 0x073, 0x074, 7, 0x100), - new TemperatureSourceData(chip == Chip.NCT6771F ? SourceNct6771F.AUXTIN : SourceNct6776F.AUXTIN, 0x075, 0x076, 7, 0x200), - new TemperatureSourceData(chip == Chip.NCT6771F ? SourceNct6771F.SYSTIN : SourceNct6776F.SYSTIN, 0x077, 0x078, 7, 0x300), - new TemperatureSourceData(null, 0x150, 0x151, 7, 0x622), - new TemperatureSourceData(null, 0x250, 0x251, 7, 0x623), - new TemperatureSourceData(null, 0x62B, 0x62E, 0, 0x624), - new TemperatureSourceData(null, 0x62C, 0x62E, 1, 0x625), - new TemperatureSourceData(null, 0x62D, 0x62E, 2, 0x626) + new(chip == Chip.NCT6771F ? SourceNct6771F.PECI_0 : SourceNct6776F.PECI_0, 0x027, 0, -1, 0x621), + new(chip == Chip.NCT6771F ? SourceNct6771F.CPUTIN : SourceNct6776F.CPUTIN, 0x073, 0x074, 7, 0x100), + new(chip == Chip.NCT6771F ? SourceNct6771F.AUXTIN : SourceNct6776F.AUXTIN, 0x075, 0x076, 7, 0x200), + new(chip == Chip.NCT6771F ? SourceNct6771F.SYSTIN : SourceNct6776F.SYSTIN, 0x077, 0x078, 7, 0x300), + new(null, 0x150, 0x151, 7, 0x622), + new(null, 0x250, 0x251, 7, 0x623), + new(null, 0x62B, 0x62E, 0, 0x624), + new(null, 0x62C, 0x62E, 1, 0x625), + new(null, 0x62D, 0x62E, 2, 0x626) }; Temperatures = new float?[4]; break; - } + case Chip.NCT6779D: case Chip.NCT6791D: case Chip.NCT6792D: @@ -153,29 +150,24 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc case Chip.NCT6796DR: case Chip.NCT6797D: case Chip.NCT6798D: - { switch (chip) { case Chip.NCT6779D: - { Fans = new float?[5]; Controls = new float?[5]; break; - } + case Chip.NCT6796DR: case Chip.NCT6797D: case Chip.NCT6798D: - { Fans = new float?[7]; Controls = new float?[7]; break; - } + default: - { Fans = new float?[6]; Controls = new float?[6]; break; - } } _fanCountRegister = new ushort[] { 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4CC }; @@ -190,63 +182,61 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _voltageRegisters = new ushort[] { 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x48A, 0x48B, 0x48C, 0x48D, 0x48E }; _voltageVBatRegister = 0x488; var temperaturesSources = new List(); + switch (chip) { case Chip.NCT6796D: case Chip.NCT6796DR: case Chip.NCT6797D: case Chip.NCT6798D: - { temperaturesSources.AddRange(new TemperatureSourceData[] - { - new TemperatureSourceData(SourceNct67Xxd.PECI_0, 0x073, 0x074, 7, 0x100), - new TemperatureSourceData(SourceNct67Xxd.CPUTIN, 0x075, 0x076, 7, 0x200, 0x491), - new TemperatureSourceData(SourceNct67Xxd.SYSTIN, 0x077, 0x078, 7, 0x300, 0x490), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN0, 0x079, 0x07A, 7, 0x800, 0x492), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN1, 0x07B, 0x07C, 7, 0x900, 0x493), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN2, 0x07D, 0x07E, 7, 0xA00, 0x494), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN3, 0x4A0, 0x49E, 6, 0xB00, 0x495), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN4, 0x027, 0, -1, 0x621), - new TemperatureSourceData(SourceNct67Xxd.SMBUSMASTER0, 0x150, 0x151, 7, 0x622), - new TemperatureSourceData(SourceNct67Xxd.SMBUSMASTER1, 0x670, 0, -1, 0xC26), - new TemperatureSourceData(SourceNct67Xxd.PECI_1, 0x672, 0, -1, 0xC27), - new TemperatureSourceData(SourceNct67Xxd.PCH_CHIP_CPU_MAX_TEMP, 0x674, 0, -1, 0xC28, 0x400), - new TemperatureSourceData(SourceNct67Xxd.PCH_CHIP_TEMP, 0x676, 0, -1, 0xC29, 0x401), - new TemperatureSourceData(SourceNct67Xxd.PCH_CPU_TEMP, 0x678, 0, -1, 0xC2A, 0x402), - new TemperatureSourceData(SourceNct67Xxd.PCH_MCH_TEMP, 0x67A, 0, -1, 0xC2B, 0x404), - new TemperatureSourceData(SourceNct67Xxd.AGENT0_DIMM0, 0), - new TemperatureSourceData(SourceNct67Xxd.AGENT0_DIMM1, 0), - new TemperatureSourceData(SourceNct67Xxd.AGENT1_DIMM0, 0), - new TemperatureSourceData(SourceNct67Xxd.AGENT1_DIMM1, 0), - new TemperatureSourceData(SourceNct67Xxd.BYTE_TEMP0, 0), - new TemperatureSourceData(SourceNct67Xxd.BYTE_TEMP1, 0), - new TemperatureSourceData(SourceNct67Xxd.PECI_0_CAL, 0), - new TemperatureSourceData(SourceNct67Xxd.PECI_1_CAL, 0), - new TemperatureSourceData(SourceNct67Xxd.VIRTUAL_TEMP, 0) - }); + { + new(SourceNct67Xxd.PECI_0, 0x073, 0x074, 7, 0x100), + new(SourceNct67Xxd.CPUTIN, 0x075, 0x076, 7, 0x200, 0x491), + new(SourceNct67Xxd.SYSTIN, 0x077, 0x078, 7, 0x300, 0x490), + new(SourceNct67Xxd.AUXTIN0, 0x079, 0x07A, 7, 0x800, 0x492), + new(SourceNct67Xxd.AUXTIN1, 0x07B, 0x07C, 7, 0x900, 0x493), + new(SourceNct67Xxd.AUXTIN2, 0x07D, 0x07E, 7, 0xA00, 0x494), + new(SourceNct67Xxd.AUXTIN3, 0x4A0, 0x49E, 6, 0xB00, 0x495), + new(SourceNct67Xxd.AUXTIN4, 0x027, 0, -1, 0x621), + new(SourceNct67Xxd.SMBUSMASTER0, 0x150, 0x151, 7, 0x622), + new(SourceNct67Xxd.SMBUSMASTER1, 0x670, 0, -1, 0xC26), + new(SourceNct67Xxd.PECI_1, 0x672, 0, -1, 0xC27), + new(SourceNct67Xxd.PCH_CHIP_CPU_MAX_TEMP, 0x674, 0, -1, 0xC28, 0x400), + new(SourceNct67Xxd.PCH_CHIP_TEMP, 0x676, 0, -1, 0xC29, 0x401), + new(SourceNct67Xxd.PCH_CPU_TEMP, 0x678, 0, -1, 0xC2A, 0x402), + new(SourceNct67Xxd.PCH_MCH_TEMP, 0x67A, 0, -1, 0xC2B, 0x404), + new(SourceNct67Xxd.AGENT0_DIMM0, 0), + new(SourceNct67Xxd.AGENT0_DIMM1, 0), + new(SourceNct67Xxd.AGENT1_DIMM0, 0), + new(SourceNct67Xxd.AGENT1_DIMM1, 0), + new(SourceNct67Xxd.BYTE_TEMP0, 0), + new(SourceNct67Xxd.BYTE_TEMP1, 0), + new(SourceNct67Xxd.PECI_0_CAL, 0), + new(SourceNct67Xxd.PECI_1_CAL, 0), + new(SourceNct67Xxd.VIRTUAL_TEMP, 0) + }); break; - } + default: - { temperaturesSources.AddRange(new TemperatureSourceData[] - { - new TemperatureSourceData(SourceNct67Xxd.PECI_0, 0x027, 0, -1, 0x621), - new TemperatureSourceData(SourceNct67Xxd.CPUTIN, 0x073, 0x074, 7, 0x100, 0x491), - new TemperatureSourceData(SourceNct67Xxd.SYSTIN, 0x075, 0x076, 7, 0x200, 0x490), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN0, 0x077, 0x078, 7, 0x300, 0x492), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN1, 0x079, 0x07A, 7, 0x800, 0x493), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN2, 0x07B, 0x07C, 7, 0x900, 0x494), - new TemperatureSourceData(SourceNct67Xxd.AUXTIN3, 0x150, 0x151, 7, 0x622, 0x495) - }); + { + new(SourceNct67Xxd.PECI_0, 0x027, 0, -1, 0x621), + new(SourceNct67Xxd.CPUTIN, 0x073, 0x074, 7, 0x100, 0x491), + new(SourceNct67Xxd.SYSTIN, 0x075, 0x076, 7, 0x200, 0x490), + new(SourceNct67Xxd.AUXTIN0, 0x077, 0x078, 7, 0x300, 0x492), + new(SourceNct67Xxd.AUXTIN1, 0x079, 0x07A, 7, 0x800, 0x493), + new(SourceNct67Xxd.AUXTIN2, 0x07B, 0x07C, 7, 0x900, 0x494), + new(SourceNct67Xxd.AUXTIN3, 0x150, 0x151, 7, 0x622, 0x495) + }); break; - } } + _temperaturesSource = temperaturesSources.ToArray(); Temperatures = new float?[_temperaturesSource.Length]; break; - } + case Chip.NCT610XD: - { Fans = new float?[3]; Controls = new float?[3]; @@ -262,16 +252,15 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _voltageVBatRegister = 0x308; Temperatures = new float?[4]; _temperaturesSource = new TemperatureSourceData[] { - new TemperatureSourceData(SourceNct610X.PECI_0, 0x027, 0, -1, 0x621), - new TemperatureSourceData(SourceNct610X.SYSTIN, 0x018, 0x01B, 7, 0x100, 0x018), - new TemperatureSourceData(SourceNct610X.CPUTIN, 0x019, 0x11B, 7, 0x200, 0x019), - new TemperatureSourceData(SourceNct610X.AUXTIN, 0x01A, 0x21B, 7, 0x300, 0x01A) + new(SourceNct610X.PECI_0, 0x027, 0, -1, 0x621), + new(SourceNct610X.SYSTIN, 0x018, 0x01B, 7, 0x100, 0x018), + new(SourceNct610X.CPUTIN, 0x019, 0x11B, 7, 0x200, 0x019), + new(SourceNct610X.AUXTIN, 0x01A, 0x21B, 7, 0x300, 0x01A) }; break; - } + case Chip.NCT6683D: case Chip.NCT6687D: - { Fans = new float?[8]; Controls = new float?[8]; Voltages = new float?[14]; @@ -285,13 +274,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc // PCIE_1 // M2_1 _temperaturesSource = new TemperatureSourceData[] { - new TemperatureSourceData(null, 0x100), - new TemperatureSourceData(null, 0x102), - new TemperatureSourceData(null, 0x104), - new TemperatureSourceData(null, 0x106), - new TemperatureSourceData(null, 0x108), - new TemperatureSourceData(null, 0x10A), - new TemperatureSourceData(null, 0x10C), + new(null, 0x100), + new(null, 0x102), + new(null, 0x104), + new(null, 0x106), + new(null, 0x108), + new(null, 0x10A), + new(null, 0x10C), }; // VIN0 +12V @@ -325,7 +314,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _initialFanPwmCommand = new byte[_fanRpmRegister.Length]; // initialize - ushort initRegister = 0x180; + const ushort initRegister = 0x180; byte data = ReadByte(initRegister); if ((data & 0x80) == 0) { @@ -338,21 +327,19 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc WriteByte(0x1BD, 0x63); WriteByte(0x1BE, 0x64); WriteByte(0x1BF, 0x65); - break; - } } } public Chip Chip { get; } - public float?[] Controls { get; } = new float?[0]; + public float?[] Controls { get; } = Array.Empty(); - public float?[] Fans { get; } = new float?[0]; + public float?[] Fans { get; } = Array.Empty(); - public float?[] Temperatures { get; } = new float?[0]; + public float?[] Temperatures { get; } = Array.Empty(); - public float?[] Voltages { get; } = new float?[0]; + public float?[] Voltages { get; } = Array.Empty(); public byte? ReadGpio(int index) { @@ -367,20 +354,17 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!_isNuvotonVendor) return; - if (index < 0 || index >= Controls.Length) throw new ArgumentOutOfRangeException(nameof(index)); - if (!Ring0.WaitIsaBusMutex(10)) return; - if (value.HasValue) { SaveDefaultFanControl(index); - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { // set manual mode WriteByte(FAN_CONTROL_MODE_REG[index], 0); @@ -429,7 +413,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(10)) return; - DisableIOSpaceLock(); for (int i = 0; i < Voltages.Length; i++) @@ -447,7 +430,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc } else { - float value = 0.001f * (16 * ReadByte(_voltageRegisters[i]) + (ReadByte((ushort)(_voltageRegisters[i] + 1)) >> 4)); + float value = 0.001f * ((16 * ReadByte(_voltageRegisters[i])) + (ReadByte((ushort)(_voltageRegisters[i] + 1)) >> 4)); Voltages[i] = i switch { @@ -464,32 +447,33 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc System.Diagnostics.Debug.WriteLine("Updating temperatures."); long temperatureSourceMask = 0; - for (int i = 0; i < _temperaturesSource.Length ; i++) + for (int i = 0; i < _temperaturesSource.Length; i++) { TemperatureSourceData ts = _temperaturesSource[i]; + int value; + SourceNct67Xxd source; + float? temperature; + switch (Chip) { case Chip.NCT6687D: case Chip.NCT6683D: - { - int value = (sbyte)ReadByte(ts.Register); + value = (sbyte)ReadByte(ts.Register); int half = (ReadByte((ushort)(ts.Register + 1)) >> 7) & 0x1; - float temperature = value + (0.5f * half); - Temperatures[i] = temperature; + Temperatures[i] = value + (0.5f * half); break; - } + case Chip.NCT6796D: case Chip.NCT6796DR: case Chip.NCT6797D: - case Chip.NCT6798D: - { + case Chip.NCT6798D: if (_temperaturesSource[i].Register == 0) { System.Diagnostics.Debug.WriteLine("Temperature register {0} skipped, address 0.", i); continue; } - int value = (sbyte)ReadByte(_temperaturesSource[i].Register) << 1; + value = (sbyte)ReadByte(_temperaturesSource[i].Register) << 1; System.Diagnostics.Debug.WriteLine("Temperature register {0} at 0x{1:X3} value (integer): {2}/2", i, ts.Register, value); if (_temperaturesSource[i].HalfBit > 0) { @@ -497,7 +481,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc System.Diagnostics.Debug.WriteLine("Temperature register {0} value updated from 0x{1:X3} (fractional): {2}/2", i, ts.HalfRegister, value); } - SourceNct67Xxd source; if (ts.SourceRegister > 0) { source = (SourceNct67Xxd)(ReadByte(ts.SourceRegister) & 0x1F); @@ -508,22 +491,23 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc source = (SourceNct67Xxd)ts.Source; System.Diagnostics.Debug.WriteLine("Temperature register {0} source register is 0, source set to: {1:G} ({1:D})", i, source); } - + // Skip reading when already filled, because later values are without fractional if ((temperatureSourceMask & (1L << (byte)source)) > 0) { System.Diagnostics.Debug.WriteLine("Temperature register {0} discarded, because source seen before.", i); continue; } - - float? temperature = 0.5f * value; + + temperature = 0.5f * value; System.Diagnostics.Debug.WriteLine("Temperature register {0} final temperature: {1}.", i, temperature); - if (temperature > 125 || temperature < -55) + if (temperature is > 125 or < (-55)) { temperature = null; System.Diagnostics.Debug.WriteLine("Temperature register {0} discarded: Out of range.", i); } - else{ + else + { temperatureSourceMask |= 1L << (byte)source; System.Diagnostics.Debug.WriteLine("Temperature register {0} accepted.", i); } @@ -537,20 +521,19 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc } } break; - } + default: - { - int value = (sbyte)ReadByte(ts.Register) << 1; + value = (sbyte)ReadByte(ts.Register) << 1; if (ts.HalfBit > 0) { value |= (ReadByte(ts.HalfRegister) >> ts.HalfBit) & 0x1; } - SourceNct67Xxd source = (SourceNct67Xxd)ReadByte(ts.SourceRegister); + source = (SourceNct67Xxd)ReadByte(ts.SourceRegister); temperatureSourceMask |= 1L << (byte)source; - float? temperature = 0.5f * value; - if (temperature > 125 || temperature < -55) + temperature = 0.5f * value; + if (temperature is > 125 or < (-55)) temperature = null; for (int j = 0; j < Temperatures.Length; j++) @@ -559,7 +542,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc Temperatures[j] = temperature; } break; - } } } @@ -578,11 +560,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc continue; } - float? temperature = (sbyte)ReadByte(ts.AlternateRegister.Value); System.Diagnostics.Debug.WriteLine("Alternate temperature register for temperature {0}, {1:G} ({1:D}), at 0x{2:X3} final temperature: {3}.", i, ts.Source, ts.AlternateRegister.Value, temperature); - if (temperature > 125 || temperature <= 0) + if (temperature is > 125 or <= 0) { temperature = null; System.Diagnostics.Debug.WriteLine("Alternate Temperature register for temperature {0}, {1:G} ({1:D}), discarded: Out of range.", i, ts.Source); @@ -593,7 +574,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc for (int i = 0; i < Fans.Length; i++) { - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { if (_fanCountRegister != null) { @@ -628,14 +609,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc } else { - int value = (ReadByte(_fanRpmRegister[i]) << 8) | ReadByte((ushort)(_fanRpmRegister[i] + 1)); - Fans[i] = value; + Fans[i] = (ReadByte(_fanRpmRegister[i]) << 8) | ReadByte((ushort)(_fanRpmRegister[i] + 1)); } } for (int i = 0; i < Controls.Length; i++) { - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { int value = ReadByte(FAN_PWM_OUT_REG[i]); Controls[i] = value / 2.55f; @@ -652,7 +632,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc public string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("LPC " + GetType().Name); r.AppendLine(); @@ -667,7 +647,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(100)) return r.ToString(); - ushort[] addresses = { 0x000, @@ -777,7 +756,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc r.AppendLine(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"); r.AppendLine(); - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { foreach (ushort address in addresses) { @@ -820,7 +799,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private byte ReadByte(ushort address) { - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { byte bank = (byte)(address >> 8); byte register = (byte)(address & 0xFF); @@ -840,7 +819,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private void WriteByte(ushort address, byte value) { - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { byte bank = (byte)(address >> 8); byte register = (byte)(address & 0xFF); @@ -869,7 +848,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { if (!_restoreDefaultFanControlRequired[index]) { - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { _initialFanControlMode[index] = ReadByte(FAN_CONTROL_MODE_REG[index]); } @@ -889,7 +868,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { if (_restoreDefaultFanControlRequired[index]) { - if (Chip != Chip.NCT6687D && Chip != Chip.NCT6683D) + if (Chip is not Chip.NCT6687D and not Chip.NCT6683D) { WriteByte(FAN_CONTROL_MODE_REG[index], _initialFanControlMode[index]); WriteByte(FAN_PWM_COMMAND_REG[index], _initialFanPwmCommand[index]); @@ -914,15 +893,15 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private void DisableIOSpaceLock() { - if (Chip != Chip.NCT6791D && - Chip != Chip.NCT6792D && - Chip != Chip.NCT6792DA && - Chip != Chip.NCT6793D && - Chip != Chip.NCT6795D && - Chip != Chip.NCT6796D && - Chip != Chip.NCT6796DR && - Chip != Chip.NCT6797D && - Chip != Chip.NCT6798D) + if (Chip is not Chip.NCT6791D and + not Chip.NCT6792D and + not Chip.NCT6792DA and + not Chip.NCT6793D and + not Chip.NCT6795D and + not Chip.NCT6796D and + not Chip.NCT6796DR and + not Chip.NCT6797D and + not Chip.NCT6798D) { return; } @@ -931,7 +910,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (IsNuvotonVendor()) return; - _lpcPort.WinbondNuvotonFintekEnter(); _lpcPort.NuvotonDisableIOSpaceLock(); _lpcPort.WinbondNuvotonFintekExit(); diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/W836XX.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/W836XX.cs index 858de88..3898dd3 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/W836XX.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Lpc/W836XX.cs @@ -15,26 +15,26 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc internal class W836XX : ISuperIO { private readonly ushort _address; - private readonly bool[] _peciTemperature = new bool[0]; private readonly byte _revision; - private readonly byte[] _voltageBank = new byte[0]; + private readonly bool[] _peciTemperature = Array.Empty(); + private readonly byte[] _voltageBank = Array.Empty(); private readonly float _voltageGain = 0.008f; - private readonly byte[] _voltageRegister = new byte[0]; + private readonly byte[] _voltageRegister = Array.Empty(); // Added to control fans. - private readonly byte[] _fanPwmRegister = new byte[0]; - private readonly byte[] _fanPrimaryControlModeRegister = new byte[0]; - private readonly byte[] _fanPrimaryControlValue = new byte[0]; - private readonly byte[] _fanSecondaryControlModeRegister = new byte[0]; - private readonly byte[] _fanSecondaryControlValue = new byte[0]; - private readonly byte[] _fanTertiaryControlModeRegister = new byte[0]; - private readonly byte[] _fanTertiaryControlValue = new byte[0]; + private readonly byte[] _fanPwmRegister = Array.Empty(); + private readonly byte[] _fanPrimaryControlModeRegister = Array.Empty(); + private readonly byte[] _fanPrimaryControlValue = Array.Empty(); + private readonly byte[] _fanSecondaryControlModeRegister = Array.Empty(); + private readonly byte[] _fanSecondaryControlValue = Array.Empty(); + private readonly byte[] _fanTertiaryControlModeRegister = Array.Empty(); + private readonly byte[] _fanTertiaryControlValue = Array.Empty(); - private readonly byte[] _initialFanControlValue = new byte[0]; - private readonly byte[] _initialFanSecondaryControlValue = new byte[0]; - private readonly byte[] _initialFanTertiaryControlValue = new byte[0]; + private readonly byte[] _initialFanControlValue = Array.Empty(); + private readonly byte[] _initialFanSecondaryControlValue = Array.Empty(); + private readonly byte[] _initialFanTertiaryControlValue = Array.Empty(); + private readonly bool[] _restoreDefaultFanPwmControlRequired = Array.Empty(); - private bool[] _restoreDefaultFanPwmControlRequired = new bool[0]; public W836XX(Chip chip, byte revision, ushort address) { @@ -45,64 +45,60 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!IsWinbondVendor()) return; - Temperatures = new float?[3]; _peciTemperature = new bool[3]; switch (chip) { case Chip.W83667HG: case Chip.W83667HGB: - { // note temperature sensor registers that read PECI byte flag = ReadByte(0, TEMPERATURE_SOURCE_SELECT_REG); _peciTemperature[0] = (flag & 0x04) != 0; _peciTemperature[1] = (flag & 0x40) != 0; _peciTemperature[2] = false; break; - } + case Chip.W83627DHG: case Chip.W83627DHGP: - { // note temperature sensor registers that read PECI byte sel = ReadByte(0, TEMPERATURE_SOURCE_SELECT_REG); _peciTemperature[0] = (sel & 0x07) != 0; _peciTemperature[1] = (sel & 0x70) != 0; _peciTemperature[2] = false; break; - } + default: - { // no PECI support _peciTemperature[0] = false; _peciTemperature[1] = false; _peciTemperature[2] = false; break; - } } switch (chip) { case Chip.W83627EHF: - { Voltages = new float?[10]; _voltageRegister = new byte[] { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x50, 0x51, 0x52 }; _voltageBank = new byte[] { 0, 0, 0, 0, 0, 0, 0, 5, 5, 5 }; _voltageGain = 0.008f; + Fans = new float?[5]; _fanPwmRegister = new byte[] { 0x01, 0x03, 0x11 }; // Fan PWM values. _fanPrimaryControlModeRegister = new byte[] { 0x04, 0x04, 0x12 }; // Primary control register. _fanPrimaryControlValue = new byte[] { 0b11110011, 0b11001111, 0b11111001 }; // Values to gain control of fans. _initialFanControlValue = new byte[3]; // To store primary default value. _initialFanSecondaryControlValue = new byte[3]; // To store secondary default value. + Controls = new float?[3]; break; - } + case Chip.W83627DHG: case Chip.W83627DHGP: - { Voltages = new float?[9]; _voltageRegister = new byte[] { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x50, 0x51 }; _voltageBank = new byte[] { 0, 0, 0, 0, 0, 0, 0, 5, 5 }; + _voltageGain = 0.008f; Fans = new float?[5]; _fanPwmRegister = new byte[] { 0x01, 0x03, 0x11 }; // Fan PWM values @@ -110,16 +106,17 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _fanPrimaryControlValue = new byte[] { 0b11110011, 0b11001111, 0b11111001 }; // Values to gain control of fans _initialFanControlValue = new byte[3]; // To store primary default value _initialFanSecondaryControlValue = new byte[3]; // To store secondary default value. + Controls = new float?[3]; break; - } + case Chip.W83667HG: case Chip.W83667HGB: - { Voltages = new float?[9]; _voltageRegister = new byte[] { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x50, 0x51 }; _voltageBank = new byte[] { 0, 0, 0, 0, 0, 0, 0, 5, 5 }; _voltageGain = 0.008f; + Fans = new float?[5]; _fanPwmRegister = new byte[] { 0x01, 0x03, 0x11 }; // Fan PWM values. _fanPrimaryControlModeRegister = new byte[] { 0x04, 0x04, 0x12 }; // Primary control register. @@ -128,70 +125,73 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc _fanSecondaryControlValue = new byte[] { 0b11101111, 0b11011111, 0b10111111 }; // Values for secondary register to gain control of fans. _fanTertiaryControlModeRegister = new byte[] { 0x62, 0x7c, 0x62 }; // Tertiary control register. 2nd fan doesn't have Tertiary control, same as secondary to avoid change. _fanTertiaryControlValue = new byte[] { 0b11101111, 0b11011111, 0b11011111 }; // Values for tertiary register to gain control of fans. 2nd fan doesn't have Tertiary control, same as secondary to avoid change. + _initialFanControlValue = new byte[3]; // To store primary default value. _initialFanSecondaryControlValue = new byte[3]; // To store secondary default value. _initialFanTertiaryControlValue = new byte[3]; // To store tertiary default value. Controls = new float?[3]; break; - } + case Chip.W83627HF: - { Voltages = new float?[7]; _voltageRegister = new byte[] { 0x20, 0x21, 0x22, 0x23, 0x24, 0x50, 0x51 }; _voltageBank = new byte[] { 0, 0, 0, 0, 0, 5, 5 }; _voltageGain = 0.016f; + Fans = new float?[3]; _fanPwmRegister = new byte[] { 0x5A, 0x5B }; // Fan PWM values. + Controls = new float?[2]; break; - } + case Chip.W83627THF: - { Voltages = new float?[7]; _voltageRegister = new byte[] { 0x20, 0x21, 0x22, 0x23, 0x24, 0x50, 0x51 }; _voltageBank = new byte[] { 0, 0, 0, 0, 0, 5, 5 }; _voltageGain = 0.016f; + Fans = new float?[3]; _fanPwmRegister = new byte[] { 0x01, 0x03, 0x11 }; // Fan PWM values. _fanPrimaryControlModeRegister = new byte[] { 0x04, 0x04, 0x12 }; // Primary control register. _fanPrimaryControlValue = new byte[] { 0b11110011, 0b11001111, 0b11111001 }; // Values to gain control of fans. _initialFanControlValue = new byte[3]; // To store primary default value. + Controls = new float?[3]; break; - } + case Chip.W83687THF: - { Voltages = new float?[7]; _voltageRegister = new byte[] { 0x20, 0x21, 0x22, 0x23, 0x24, 0x50, 0x51 }; _voltageBank = new byte[] { 0, 0, 0, 0, 0, 5, 5 }; _voltageGain = 0.016f; + Fans = new float?[3]; break; - } } } public Chip Chip { get; } - public float?[] Controls { get; } = new float?[0]; + public float?[] Controls { get; } = Array.Empty(); - public float?[] Fans { get; } = new float?[0]; + public float?[] Fans { get; } = Array.Empty(); - public float?[] Temperatures { get; } = new float?[0]; + public float?[] Temperatures { get; } = Array.Empty(); - public float?[] Voltages { get; } = new float?[0]; + public float?[] Voltages { get; } = Array.Empty(); public byte? ReadGpio(int index) { return null; } - public void WriteGpio(int index, byte value) { } + public void WriteGpio(int index, byte value) + { } public void SetControl(int index, byte? value) { if (index < 0 || index >= Controls.Length) - throw new ArgumentOutOfRangeException("index"); + throw new ArgumentOutOfRangeException(nameof(index)); if (!Ring0.WaitIsaBusMutex(10)) return; @@ -208,17 +208,16 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc { WriteByte(0, _fanSecondaryControlModeRegister[index], (byte)(_fanSecondaryControlValue[index] & ReadByte(0, _fanSecondaryControlModeRegister[index]))); } - if (_fanTertiaryControlModeRegister.Length > 0) + + if (_fanTertiaryControlModeRegister.Length > 0 && _fanTertiaryControlModeRegister[index] != _fanSecondaryControlModeRegister[index]) { - if (_fanTertiaryControlModeRegister[index] != _fanSecondaryControlModeRegister[index]) - { - WriteByte(0, _fanTertiaryControlModeRegister[index], (byte)(_fanTertiaryControlValue[index] & ReadByte(0, _fanTertiaryControlModeRegister[index]))); - } + WriteByte(0, _fanTertiaryControlModeRegister[index], (byte)(_fanTertiaryControlValue[index] & ReadByte(0, _fanTertiaryControlModeRegister[index]))); } } } + // set output value - WriteByte(0, _fanPwmRegister[index], (byte)(value.Value)); + WriteByte(0, _fanPwmRegister[index], value.Value); } else { @@ -230,53 +229,68 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc private void SaveDefaultFanPwmControl(int index) //added to save initial control values { - if (_fanPrimaryControlModeRegister.Length > 0 && _initialFanControlValue.Length > 0 && _fanPrimaryControlValue.Length > 0 && _restoreDefaultFanPwmControlRequired.Length > 0) + if (_fanPrimaryControlModeRegister.Length > 0 && + _initialFanControlValue.Length > 0 && + _fanPrimaryControlValue.Length > 0 && + _restoreDefaultFanPwmControlRequired.Length > 0 && + !_restoreDefaultFanPwmControlRequired[index]) { - if (!_restoreDefaultFanPwmControlRequired[index]) + _initialFanControlValue[index] = ReadByte(0, _fanPrimaryControlModeRegister[index]); + if (_fanSecondaryControlModeRegister.Length > 0 && _initialFanSecondaryControlValue.Length > 0 && _fanSecondaryControlValue.Length > 0) { - _initialFanControlValue[index] = ReadByte(0, _fanPrimaryControlModeRegister[index]); - if (_fanSecondaryControlModeRegister.Length > 0 && _initialFanSecondaryControlValue.Length > 0 && _fanSecondaryControlValue.Length > 0) + if (_fanSecondaryControlModeRegister[index] != _fanPrimaryControlModeRegister[index]) { - if (_fanSecondaryControlModeRegister[index] != _fanPrimaryControlModeRegister[index]) - { - _initialFanSecondaryControlValue[index] = ReadByte(0, _fanSecondaryControlModeRegister[index]); - } - if (_fanTertiaryControlModeRegister.Length > 0 && _initialFanTertiaryControlValue.Length > 0 && _fanTertiaryControlValue.Length > 0) - { - if (_fanTertiaryControlModeRegister[index] != _fanSecondaryControlModeRegister[index]) - { - _initialFanTertiaryControlValue[index] = ReadByte(0, _fanTertiaryControlModeRegister[index]); - } - } + _initialFanSecondaryControlValue[index] = ReadByte(0, _fanSecondaryControlModeRegister[index]); + } + + if (_fanTertiaryControlModeRegister.Length > 0 && + _initialFanTertiaryControlValue.Length > 0 && + _fanTertiaryControlValue.Length > 0 && + _fanTertiaryControlModeRegister[index] != _fanSecondaryControlModeRegister[index]) + { + _initialFanTertiaryControlValue[index] = ReadByte(0, _fanTertiaryControlModeRegister[index]); } - _restoreDefaultFanPwmControlRequired[index] = true; } + + _restoreDefaultFanPwmControlRequired[index] = true; } } private void RestoreDefaultFanPwmControl(int index) //added to restore initial control values { - if (_fanPrimaryControlModeRegister.Length > 0 && _initialFanControlValue.Length > 0 && _fanPrimaryControlValue.Length > 0 && _restoreDefaultFanPwmControlRequired.Length > 0) + if (_fanPrimaryControlModeRegister.Length > 0 && + _initialFanControlValue.Length > 0 && + _fanPrimaryControlValue.Length > 0 && + _restoreDefaultFanPwmControlRequired.Length > 0 && + _restoreDefaultFanPwmControlRequired[index]) { - if (_restoreDefaultFanPwmControlRequired[index]) + WriteByte(0, + _fanPrimaryControlModeRegister[index], + (byte)((_initialFanControlValue[index] & ~_fanPrimaryControlValue[index]) | + ReadByte(0, _fanPrimaryControlModeRegister[index]))); //bitwise operands to change only desired bits + + if (_fanSecondaryControlModeRegister.Length > 0 && _initialFanSecondaryControlValue.Length > 0 && _fanSecondaryControlValue.Length > 0) { - WriteByte(0, _fanPrimaryControlModeRegister[index], (byte)((_initialFanControlValue[index] & ~_fanPrimaryControlValue[index]) | ReadByte(0, _fanPrimaryControlModeRegister[index]))); //bitwise operands to change only desired bits - if (_fanSecondaryControlModeRegister.Length > 0 && _initialFanSecondaryControlValue.Length > 0 && _fanSecondaryControlValue.Length > 0) + if (_fanSecondaryControlModeRegister[index] != _fanPrimaryControlModeRegister[index]) { - if (_fanSecondaryControlModeRegister[index] != _fanPrimaryControlModeRegister[index]) - { - WriteByte(0, _fanSecondaryControlModeRegister[index], (byte)((_initialFanSecondaryControlValue[index] & ~_fanSecondaryControlValue[index]) | ReadByte(0, _fanSecondaryControlModeRegister[index]))); //bitwise operands to change only desired bits - } - if (_fanTertiaryControlModeRegister.Length > 0 && _initialFanTertiaryControlValue.Length > 0 && _fanTertiaryControlValue.Length > 0) - { - if (_fanTertiaryControlModeRegister[index] != _fanSecondaryControlModeRegister[index]) - { - WriteByte(0, _fanTertiaryControlModeRegister[index], (byte)((_initialFanTertiaryControlValue[index] & ~_fanTertiaryControlValue[index]) | ReadByte(0, _fanTertiaryControlModeRegister[index]))); //bitwise operands to change only desired bits - } - } + WriteByte(0, + _fanSecondaryControlModeRegister[index], + (byte)((_initialFanSecondaryControlValue[index] & ~_fanSecondaryControlValue[index]) | + ReadByte(0, _fanSecondaryControlModeRegister[index]))); //bitwise operands to change only desired bits + } + + if (_fanTertiaryControlModeRegister.Length > 0 && + _initialFanTertiaryControlValue.Length > 0 && + _fanTertiaryControlValue.Length > 0 && + _fanTertiaryControlModeRegister[index] != _fanSecondaryControlModeRegister[index]) + { + WriteByte(0, + _fanTertiaryControlModeRegister[index], + (byte)((_initialFanTertiaryControlValue[index] & ~_fanTertiaryControlValue[index]) | ReadByte(0, _fanTertiaryControlModeRegister[index]))); //bitwise operands to change only desired bits } - _restoreDefaultFanPwmControlRequired[index] = false; } + + _restoreDefaultFanPwmControlRequired[index] = false; } } @@ -285,7 +299,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(10)) return; - for (int i = 0; i < Voltages.Length; i++) { if (_voltageRegister[i] != VOLTAGE_VBAT_REG) @@ -299,7 +312,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if ((vrmConfiguration & 0x01) == 0) fValue = 0.016f * value; // VRM8 formula else - fValue = 0.00488f * value + 0.69f; // VRM9 formula + fValue = (0.00488f * value) + 0.69f; // VRM9 formula } else { @@ -334,7 +347,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc value |= ReadByte(TEMPERATURE_BANK[i], (byte)(TEMPERATURE_REG[i] + 1)) >> 7; float temperature = value / 2.0f; - if (temperature <= 125 && temperature >= -55 && !_peciTemperature[i]) + if (temperature is <= 125 and >= -55 && !_peciTemperature[i]) { Temperatures[i] = temperature; } @@ -355,14 +368,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc // assemble fan divisor int divisorBits = (int)( - (((bits >> FAN_DIV_BIT2[i]) & 1) << 2) | - (((bits >> FAN_DIV_BIT1[i]) & 1) << 1) | - ((bits >> FAN_DIV_BIT0[i]) & 1)); + (((bits >> FAN_DIV_BIT2[i]) & 1) << 2) | + (((bits >> FAN_DIV_BIT1[i]) & 1) << 1) | + ((bits >> FAN_DIV_BIT0[i]) & 1)); int divisor = 1 << divisorBits; - float value = count < 0xff ? 1.35e6f / (count * divisor) : 0; - Fans[i] = value; + Fans[i] = count < 0xff ? 1.35e6f / (count * divisor) : 0; // update fan divisor if (count > 192 && divisorBits < 7) @@ -387,7 +399,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc public string GetReport() { - StringBuilder r = new StringBuilder(); + StringBuilder r = new(); r.AppendLine("LPC " + GetType().Name); r.AppendLine(); @@ -402,7 +414,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if (!Ring0.WaitIsaBusMutex(100)) return r.ToString(); - r.AppendLine("Hardware Monitor Registers"); r.AppendLine(); r.AppendLine(" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F"); @@ -471,10 +482,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard.Lpc if ((value & 1) != value) throw new ArgumentException("Value must be one bit only."); - if (bit < 0 || bit > 63) + if (bit is < 0 or > 63) throw new ArgumentException("Bit out of range."); - ulong mask = (ulong)1 << bit; return value > 0 ? target | mask : target & ~mask; } diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs index 99c7817..cdd8421 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs @@ -54,7 +54,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard } else { - _name = Manufacturer.Unknown.ToString(); + _name = nameof(Manufacturer.Unknown); } _customName = settings.GetValue(new Identifier(Identifier, "name").ToString(), _name); @@ -125,7 +125,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard /// public ISensor[] Sensors { - get { return new ISensor[0]; } + get { return Array.Empty(); } } /// @@ -163,7 +163,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard if (visitor == null) throw new ArgumentNullException(nameof(visitor)); - visitor.VisitHardware(this); } diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs index b3ebe14..d55ff44 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs @@ -13,8 +13,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard { internal sealed class SuperIOHardware : Hardware { - private readonly List _controls = new List(); - private readonly List _fans = new List(); + private readonly List _controls = new(); + private readonly List _fans = new(); private readonly Motherboard _motherboard; private readonly UpdateDelegate _postUpdate; @@ -24,8 +24,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard private readonly ReadValueDelegate _readVoltage; private readonly ISuperIO _superIO; - private readonly List _temperatures = new List(); - private readonly List _voltages = new List(); + private readonly List _temperatures = new(); + private readonly List _voltages = new(); public SuperIOHardware(Motherboard motherboard, ISuperIO superIO, Manufacturer manufacturer, Model model, ISettings settings) : base(ChipName.GetName(superIO.Chip), new Identifier("lpc", superIO.Chip.ToString().ToLowerInvariant()), settings) @@ -70,30 +70,22 @@ namespace LibreHardwareMonitor.Hardware.Motherboard int index = ctrl.Index; if (index < superIO.Controls.Length) { - Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control, this, settings); - Control control = new Control(sensor, settings, 0, 100); + Sensor sensor = new(ctrl.Name, index, SensorType.Control, this, settings); + Control control = new(sensor, settings, 0, 100); control.ControlModeChanged += cc => { switch (cc.ControlMode) { case ControlMode.Undefined: - { return; - } case ControlMode.Default: - { superIO.SetControl(index, null); break; - } case ControlMode.Software: - { superIO.SetControl(index, GetSoftwareValueAsByte(cc)); break; - } default: - { return; - } } }; @@ -106,21 +98,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (control.ControlMode) { case ControlMode.Undefined: - { break; - } case ControlMode.Default: - { superIO.SetControl(index, null); - break; - } case ControlMode.Software: - { superIO.SetControl(index, GetSoftwareValueAsByte(control)); - break; - } } sensor.Control = control; @@ -143,7 +127,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard { if (fan.Index < superIO.Fans.Length) { - Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan, this, settings); + Sensor sensor = new(fan.Name, fan.Index, SensorType.Fan, this, settings); _fans.Add(sensor); } } @@ -155,7 +139,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard { if (temperature.Index < superIO.Temperatures.Length) { - Sensor sensor = new Sensor(temperature.Name, + Sensor sensor = new(temperature.Name, temperature.Index, SensorType.Temperature, this, @@ -174,7 +158,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard { if (voltage.Index < superIO.Voltages.Length) { - Sensor sensor = new Sensor(voltage.Name, + Sensor sensor = new(voltage.Name, voltage.Index, voltage.Hidden, SensorType.Voltage, @@ -229,11 +213,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard case Chip.IT8718F: case Chip.IT8720F: case Chip.IT8726F: - { GetIteConfigurationsA(superIO, manufacturer, model, v, t, f, c, ref readFan, ref postUpdate, ref mutex); - break; - } + case Chip.IT8613E: case Chip.IT8620E: case Chip.IT8628E: @@ -247,20 +229,15 @@ namespace LibreHardwareMonitor.Hardware.Motherboard case Chip.IT8728F: case Chip.IT8771E: case Chip.IT8772E: - { GetIteConfigurationsB(superIO, manufacturer, model, v, t, f, c); - break; - } + case Chip.IT8695E: case Chip.IT879XE: - { GetIteConfigurationsC(superIO, manufacturer, model, v, t, f, c); - break; - } + case Chip.F71858: - { v.Add(new Voltage("VCC3V", 0, 150, 150)); v.Add(new Voltage("VSB3V", 1, 150, 150)); v.Add(new Voltage("Battery", 2, 150, 150)); @@ -272,7 +249,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #" + (i + 1), i)); break; - } + case Chip.F71808E: case Chip.F71862: case Chip.F71869: @@ -281,28 +258,21 @@ namespace LibreHardwareMonitor.Hardware.Motherboard case Chip.F71889AD: case Chip.F71889ED: case Chip.F71889F: - { GetFintekConfiguration(superIO, manufacturer, model, v, t, f, c); - break; - } + case Chip.W83627EHF: - { GetWinbondConfigurationEhf(manufacturer, model, v, t, f, c); - break; - } + case Chip.W83627DHG: case Chip.W83627DHGP: case Chip.W83667HG: case Chip.W83667HGB: - { GetWinbondConfigurationHg(manufacturer, model, v, t, f, c); - break; - } + case Chip.W83627HF: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -318,12 +288,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Auxiliary Fan", 2)); c.Add(new Ctrl("Fan 1", 0)); c.Add(new Ctrl("Fan 2", 1)); - break; - } + case Chip.W83627THF: case Chip.W83687THF: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -340,18 +308,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan", 0)); c.Add(new Ctrl("CPU Fan", 1)); c.Add(new Ctrl("Auxiliary Fan", 2)); - break; - } + case Chip.NCT6771F: case Chip.NCT6776F: - { GetNuvotonConfigurationF(superIO, manufacturer, model, v, t, f, c); - break; - } + case Chip.NCT610XD: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #0", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -373,7 +337,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Chip.NCT6779D: case Chip.NCT6791D: case Chip.NCT6792D: @@ -385,13 +349,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard case Chip.NCT6797D: case Chip.NCT6798D: case Chip.NCT6683D: - { GetNuvotonConfigurationD(superIO, manufacturer, model, v, t, f, c); - break; - } + case Chip.NCT6687D: - { v.Add(new Voltage("+12V", 0)); v.Add(new Voltage("+5V", 1)); v.Add(new Voltage("Vcore", 2)); @@ -434,13 +395,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan #6", 7)); break; - } - default: - { - GetDefaultConfiguration(superIO, v, t, f, c); + default: + GetDefaultConfiguration(superIO, v, t, f, c); break; - } } } @@ -475,11 +433,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.ASUS: - { switch (model) { case Model.CROSSHAIR_III_FORMULA: // IT8720F - { v.Add(new Voltage("VBat", 8)); t.Add(new Temperature("CPU", 0)); @@ -487,9 +443,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #" + (i + 1), i)); break; - } + case Model.M2N_SLI_Deluxe: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1)); v.Add(new Voltage("+5V", 3, 6.8f, 10)); @@ -503,9 +458,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Power Fan", 2)); break; - } + case Model.M4A79XTD_EVO: // IT8720F - { v.Add(new Voltage("+5V", 3, 6.8f, 10)); v.Add(new Voltage("VBat", 8)); t.Add(new Temperature("CPU", 0)); @@ -515,10 +469,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Chassis Fan #2", 2)); break; - } + case Model.PRIME_X370_PRO: // IT8665E case Model.TUF_X470_PLUS_GAMING: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("SB 2.5V", 1)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -542,9 +495,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #" + (i + 1), i)); break; - } + case Model.ROG_ZENITH_EXTREME: // IT8665E - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("DIMM AB", 1, 10, 10)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -572,9 +524,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -595,29 +546,24 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.ASRock: - { switch (model) { case Model.P55_Deluxe: // IT8720F - { GetASRockConfiguration(superIO, - v, - t, - f, - ref readFan, - ref postUpdate, - out mutex); + v, + t, + f, + ref readFan, + ref postUpdate, + out mutex); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -635,17 +581,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #" + (i + 1), i)); break; - } } break; - } case Manufacturer.DFI: - { switch (model) { case Model.LP_BI_P45_T2RS_Elite: // IT8718F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("VTT", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -663,9 +605,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #3", 2)); break; - } + case Model.LP_DK_P55_T3EH9: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("VTT", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -683,9 +624,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #3", 2)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("VTT", 1, true)); v.Add(new Voltage("+3.3V", 2, true)); @@ -706,17 +646,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.Gigabyte: - { switch (model) { case Model._965P_S3: // IT8718F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -729,11 +665,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan", 1)); break; - } + case Model.EP45_DS3R: // IT8718F case Model.EP45_UD3R: case Model.X38_DS5: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -748,9 +683,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #1", 3)); break; - } + case Model.EX58_EXTREME: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+5V", 3, 6.8f, 10)); @@ -764,10 +698,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #1", 3)); break; - } + case Model.P35_DS3: // IT8718F case Model.P35_DS3L: // IT8718F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -782,13 +715,12 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Power Fan", 3)); break; - } + case Model.P55_UD4: // IT8720F case Model.P55A_UD3: // IT8720F case Model.P55M_UD4: // IT8720F case Model.H55_USB3: // IT8720F case Model.EX58_UD3R: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -803,9 +735,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #1", 3)); break; - } + case Model.H55N_USB3: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -818,11 +749,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan", 1)); break; - } + case Model.G41M_COMBO: // IT8718F case Model.G41MT_S2: // IT8718F case Model.G41MT_S2P: // IT8718F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -834,9 +764,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan", 1)); break; - } + case Model._970A_UD3: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -854,11 +783,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("PWM #3", 2)); break; - } + case Model.MA770T_UD3: // IT8720F case Model.MA770T_UD3P: // IT8720F case Model.MA790X_UD3P: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -873,9 +801,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Power Fan", 3)); break; - } + case Model.MA78LM_S2H: // IT8718F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -891,10 +818,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Power Fan", 3)); break; - } + case Model.MA785GM_US2H: // IT8718F case Model.MA785GMT_UD2H: // IT8718F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -908,9 +834,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("NB Fan", 2)); break; - } + case Model.X58A_UD3R: // IT8720F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("+3.3V", 2)); @@ -926,9 +851,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #1", 3)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1, true)); v.Add(new Voltage("+3.3V", 2, true)); @@ -949,13 +873,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -976,7 +898,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } } @@ -1032,7 +953,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard if (!gpio.HasValue) return null; - // read the last 3 fans based on GPIO 83-85 int[] masks = { 0x05, 0x03, 0x06 }; return ((gpio.Value >> 3) & 0x07) == masks[index - 2] ? superIO.Fans[2] : null; @@ -1047,7 +967,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard if (!gpio.HasValue) return; - // prepare the GPIO 83-85 for the next update int[] masks = { 0x05, 0x03, 0x06 }; superIO.WriteGpio(7, (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3))); @@ -1061,11 +980,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.ASUS: - { switch (model) { case Model.ROG_STRIX_X470_I: // IT8665E - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("SB 2.5V", 1)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -1090,9 +1007,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i - 1), i)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1113,17 +1029,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.ECS: - { switch (model) { case Model.A890GXM_A: // IT8721F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("NB Voltage", 2)); @@ -1139,9 +1051,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Power Fan", 2)); break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1162,18 +1073,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.Gigabyte: - { switch (model) { case Model.H61M_DS2_REV_1_2: // IT8728F case Model.H61M_USB3_B3_REV_2_0: // IT8728F - { v.Add(new Voltage("VTT", 0)); v.Add(new Voltage("+12V", 2, 30.9f, 10)); v.Add(new Voltage("Vcore", 5)); @@ -1186,10 +1093,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan", 1)); break; - } + case Model.H67A_UD3H_B3: // IT8728F case Model.H67A_USB3_B3: // IT8728F - { v.Add(new Voltage("VTT", 0)); v.Add(new Voltage("+5V", 1, 15, 10)); v.Add(new Voltage("+12V", 2, 30.9f, 10)); @@ -1205,9 +1111,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #2", 3)); break; - } + case Model.H81M_HD3: //IT8620E - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1225,9 +1130,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan", 1)); break; - } + case Model.Z170N_WIFI: // ITE IT8628E - { v.Add(new Voltage("Vcore", 0, 0, 1)); v.Add(new Voltage("+3.3V", 1, 6.5F, 10)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -1254,12 +1158,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan", 1)); break; - } + case Model.AX370_Gaming_K7: // IT8686E case Model.AX370_Gaming_5: case Model.AB350_Gaming_3: // IT8686E - { - // Note: v3.3, v12, v5, and AVCC3 might be slightly off. + // Note: v3.3, v12, v5, and AVCC3 might be slightly off. v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 0.65f, 1)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -1280,9 +1183,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #" + (i + 1), i)); break; - } + case Model.X399_AORUS_Gaming_7: // ITE IT8686E - { v.Add(new Voltage("Vcore", 0, 0, 1)); v.Add(new Voltage("+3.3V", 1, 6.5F, 10)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -1306,9 +1208,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.X470_AORUS_GAMING_7_WIFI: // ITE IT8686E - { v.Add(new Voltage("Vcore", 0, 0, 1)); v.Add(new Voltage("+3.3V", 1, 6.5F, 10)); v.Add(new Voltage("+12V", 2, 5, 1)); @@ -1332,11 +1233,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.B560M_AORUS_ELITE: // IT8689E case Model.B560M_AORUS_PRO: case Model.B560M_AORUS_PRO_AX: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 29.4f, 45.3f)); v.Add(new Voltage("+12V", 2, 10f, 2f)); @@ -1365,9 +1265,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Optional Fan", 4)); break; - } + case Model.B360_AORUS_GAMING_3_WIFI_CF: // IT8688E - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 29.4f, 45.3f)); v.Add(new Voltage("+12V", 2, 10f, 2f)); @@ -1395,10 +1294,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Optional Fan", 4)); break; - } + case Model.X570_AORUS_MASTER: // IT8688E case Model.X570_AORUS_ULTRA: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 29.4f, 45.3f)); v.Add(new Voltage("+12V", 2, 10f, 2f)); @@ -1426,9 +1324,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Optional Fan", 4)); break; - } + case Model.X570_GAMING_X: // IT8688E - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 29.4f, 45.3f)); v.Add(new Voltage("+12V", 2, 10f, 2f)); @@ -1454,11 +1351,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Optional Fan", 4)); break; - } + case Model.Z390_M_GAMING: // IT8688E case Model.Z390_AORUS_ULTRA: case Model.Z390_UD: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 6.49f, 10)); v.Add(new Voltage("+12V", 2, 5f, 1)); @@ -1486,9 +1382,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan #3", 3)); break; - } + case Model.Z390_AORUS_PRO: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 1, 6.49f, 10)); v.Add(new Voltage("+12V", 2, 5f, 1)); @@ -1499,7 +1394,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard v.Add(new Voltage("Voltage #7", 7, true)); v.Add(new Voltage("3VSB", 8, 1f, 1f, -0.312f)); v.Add(new Voltage("VBat", 9, 6f, 1f, 0.01f)); - v.Add(new Voltage("AVCC3", 10, 6f, 1f, 0.048f )); + v.Add(new Voltage("AVCC3", 10, 6f, 1f, 0.048f)); t.Add(new Temperature("System #1", 0)); t.Add(new Temperature("PCH", 1)); t.Add(new Temperature("CPU", 2)); @@ -1518,9 +1413,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Optional Fan", 4)); break; - } + case Model.Z690_AORUS_PRO: - { t.Add(new Temperature("System #1", 0)); t.Add(new Temperature("System #2", 1)); t.Add(new Temperature("CPU", 2)); @@ -1537,9 +1431,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan #3", 3)); c.Add(new Ctrl("CPU Optional Fan", 4)); break; - } + case Model.Z690_GAMING_X_DDR4: - { t.Add(new Temperature("System #1", 0)); t.Add(new Temperature("PCH", 1)); t.Add(new Temperature("CPU", 2)); @@ -1559,9 +1452,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Optional Fan", 4)); c.Add(new Ctrl("System Fan #4 / Pump", 5)); break; - } + case Model.Z68A_D3H_B3: // IT8728F - { v.Add(new Voltage("VTT", 0)); v.Add(new Voltage("+3.3V", 1, 6.49f, 10)); v.Add(new Voltage("+12V", 2, 30.9f, 10)); @@ -1578,14 +1470,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #2", 3)); break; - } + case Model.P67A_UD3_B3: // IT8728F case Model.P67A_UD3R_B3: // IT8728F case Model.P67A_UD4_B3: // IT8728F case Model.Z68AP_D3: // IT8728F case Model.Z68X_UD3H_B3: // IT8728F case Model.Z68XP_UD3R: // IT8728F - { v.Add(new Voltage("VTT", 0)); v.Add(new Voltage("+3.3V", 1, 6.49f, 10)); v.Add(new Voltage("+12V", 2, 30.9f, 10)); @@ -1602,9 +1493,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #1", 3)); break; - } + case Model.Z68X_UD7_B3: // IT8728F - { v.Add(new Voltage("VTT", 0)); v.Add(new Voltage("+3.3V", 1, 6.49f, 10)); v.Add(new Voltage("+12V", 2, 30.9f, 10)); @@ -1623,9 +1513,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #3", 4)); break; - } + case Model.X79_UD3: // IT8728F - { v.Add(new Voltage("VTT", 0)); v.Add(new Voltage("DIMM AB", 1)); v.Add(new Voltage("+12V", 2, 10, 2)); @@ -1644,9 +1533,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #3", 3)); break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1667,30 +1555,26 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.Biostar: - { switch (model) { case Model.B660GTN: //IT8613E - // This board has some problems with their app controlling fans that I was able to replicate here so I guess is a BIOS problem with the pins. - // Biostar is aware so expect changes in the control pins with new bios. - // In the meantime, it's possible to control CPUFAN and CPUOPT1m but not SYSFAN1. - { - // The parameters are extracted from the Biostar app config file. + // This board has some problems with their app controlling fans that I was able to replicate here so I guess is a BIOS problem with the pins. + // Biostar is aware so expect changes in the control pins with new bios. + // In the meantime, it's possible to control CPUFAN and CPUOPT1m but not SYSFAN1. + // The parameters are extracted from the Biostar app config file. v.Add(new Voltage("Vcore", 0, 0, 1)); v.Add(new Voltage("DIMM", 1, 0, 1)); v.Add(new Voltage("+12V", 2, 5, 1)); // Reads higher than it should. v.Add(new Voltage("+5V", 3, 147, 100)); // Reads higher than it should. - // Commented because I don't know if it makes sense. - //v.Add(new Voltage("VCC ST", 4)); // Reads 4.2V. - //v.Add(new Voltage("VCCIN AUX", 5)); // Reads 2.2V. - //v.Add(new Voltage("CPU GT", 6)); // Reads 2.6V. - //v.Add(new Voltage("3VSB", 7, 10, 10)); // Reads 5.8V ? + // Commented because I don't know if it makes sense. + //v.Add(new Voltage("VCC ST", 4)); // Reads 4.2V. + //v.Add(new Voltage("VCCIN AUX", 5)); // Reads 2.2V. + //v.Add(new Voltage("CPU GT", 6)); // Reads 2.6V. + //v.Add(new Voltage("3VSB", 7, 10, 10)); // Reads 5.8V ? v.Add(new Voltage("VBat", 8, 10, 10)); // Reads higher than it should at 3.4V. t.Add(new Temperature("System 1", 0)); t.Add(new Temperature("System 2", 1)); // Not sure what sensor is this. @@ -1703,9 +1587,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan", 4)); break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1726,17 +1609,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.Shuttle: - { switch (model) { case Model.FH67: // IT8772E - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("DIMM", 1)); v.Add(new Voltage("PCH VCCIO", 2)); @@ -1750,9 +1629,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("CPU Fan", 1)); break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1773,13 +1651,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1800,7 +1676,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } } @@ -1809,12 +1684,10 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.Gigabyte: - { switch (model) { case Model.X570_AORUS_MASTER: // IT879XE case Model.X570_AORUS_ULTRA: - { v.Add(new Voltage("CPU VDD18", 0)); v.Add(new Voltage("DDRVTT AB", 1)); v.Add(new Voltage("Chipset Core", 2)); @@ -1832,9 +1705,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("System Fan #4", 2)); break; - } + case Model.X470_AORUS_GAMING_7_WIFI: // ITE IT8792 - { v.Add(new Voltage("VIN0", 0, 0, 1)); v.Add(new Voltage("DDR VTT", 1, 0, 1)); v.Add(new Voltage("Chipset Core", 2, 0, 1)); @@ -1853,9 +1725,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.Z390_AORUS_PRO: // IT879XE - { v.Add(new Voltage("VCore", 0)); v.Add(new Voltage("DDRVTT AB", 1)); v.Add(new Voltage("Chipset Core", 2)); @@ -1876,9 +1747,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #4", 2)); break; - } + case Model.Z690_AORUS_PRO: - { t.Add(new Temperature("System #3", 0)); t.Add(new Temperature("System #4", 2)); f.Add(new Fan("System Fan #5", 0)); @@ -1888,9 +1758,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #6", 1)); c.Add(new Ctrl("Fan Control #4", 2)); break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1911,13 +1780,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } + default: - { v.Add(new Voltage("Voltage #1", 0, true)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1938,7 +1805,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } } @@ -1947,11 +1813,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.EVGA: - { switch (model) { case Model.X58_SLI_Classified: // F71882 - { v.Add(new Voltage("VCC3V", 0, 150, 150)); v.Add(new Voltage("Vcore", 1, 47, 100)); v.Add(new Voltage("DIMM", 2, 47, 100)); @@ -1969,9 +1833,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Chassis Fan", 2)); break; - } + default: - { v.Add(new Voltage("VCC3V", 0, 150, 150)); v.Add(new Voltage("Vcore", 1)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -1989,13 +1852,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Fan #" + (i + 1), i)); break; - } } break; - } + default: - { v.Add(new Voltage("VCC3V", 0, 150, 150)); v.Add(new Voltage("Vcore", 1)); v.Add(new Voltage("Voltage #3", 2, true)); @@ -2018,7 +1879,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } } @@ -2027,13 +1887,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.ASUS: - { switch (model) { case Model.P8P67: // NCT6776F case Model.P8P67_EVO: // NCT6776F case Model.P8P67_PRO: // NCT6776F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+12V", 1, 11, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2053,9 +1911,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Chassis Fan #1", 2)); break; - } + case Model.P8P67_M_PRO: // NCT6776F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+12V", 1, 11, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2074,9 +1931,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard f.Add(new Fan("Auxiliary Fan", 4)); break; - } + case Model.P8Z68_V_PRO: // NCT6776F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+12V", 1, 11, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2095,9 +1951,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan #" + (i + 1), i)); break; - } + case Model.P9X79: // NCT6776F - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+12V", 1, 11, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2115,9 +1970,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2139,40 +1993,36 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.ASRock: - { switch (model) { case Model.B85M_DGS: - { - v.Add(new Voltage("Vcore", 0, 1, 1)); - v.Add(new Voltage("+12V", 1, 56, 10)); - v.Add(new Voltage("AVCC", 2, 34, 34)); - v.Add(new Voltage("+3.3V", 3, 34, 34)); - v.Add(new Voltage("VIN1", 4, true)); - v.Add(new Voltage("+5V", 5, 12, 3)); - v.Add(new Voltage("VIN3", 6, true)); - v.Add(new Voltage("3VSB", 7, 34, 34)); - t.Add(new Temperature("CPU", 0)); - t.Add(new Temperature("Auxiliary", 2)); - t.Add(new Temperature("Motherboard", 3)); - f.Add(new Fan("Chassis Fan #1", 0)); - f.Add(new Fan("CPU Fan", 1)); - f.Add(new Fan("Power Fan", 2)); - f.Add(new Fan("Chassis Fan #2", 3)); - c.Add(new Ctrl("Chassis Fan #2", 0)); - c.Add(new Ctrl("CPU Fan", 1)); - c.Add(new Ctrl("Chassis Fan #1", 2)); - } + { + v.Add(new Voltage("Vcore", 0, 1, 1)); + v.Add(new Voltage("+12V", 1, 56, 10)); + v.Add(new Voltage("AVCC", 2, 34, 34)); + v.Add(new Voltage("+3.3V", 3, 34, 34)); + v.Add(new Voltage("VIN1", 4, true)); + v.Add(new Voltage("+5V", 5, 12, 3)); + v.Add(new Voltage("VIN3", 6, true)); + v.Add(new Voltage("3VSB", 7, 34, 34)); + t.Add(new Temperature("CPU", 0)); + t.Add(new Temperature("Auxiliary", 2)); + t.Add(new Temperature("Motherboard", 3)); + f.Add(new Fan("Chassis Fan #1", 0)); + f.Add(new Fan("CPU Fan", 1)); + f.Add(new Fan("Power Fan", 2)); + f.Add(new Fan("Chassis Fan #2", 3)); + c.Add(new Ctrl("Chassis Fan #2", 0)); + c.Add(new Ctrl("CPU Fan", 1)); + c.Add(new Ctrl("Chassis Fan #1", 2)); + } - break; + break; case Model.Z77Pro4M: //NCT6776F - { v.Add(new Voltage("Vcore", 0, 0, 1)); v.Add(new Voltage("+12V", 1, 56, 10)); v.Add(new Voltage("AVCC", 2, 10, 10)); @@ -2194,9 +2044,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2218,13 +2067,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2246,7 +2093,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } } @@ -2255,11 +2101,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.ASRock: - { switch (model) { case Model.A320M_HDV: //NCT6779D - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("Chipset 1.05V", 1, 0, 1)); v.Add(new Voltage("AVCC", 2, 10, 10)); @@ -2290,7 +2134,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.AB350_Pro4: //NCT6779D case Model.AB350M_Pro4: @@ -2301,7 +2145,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard case Model.B450M_Steel_Legend: case Model.B450_Pro4: case Model.B450M_Pro4: - { v.Add(new Voltage("Vcore", 0, 10, 10)); //v.Add(new Voltage("#Unused", 1, 0, 1, 0, true)); v.Add(new Voltage("AVCC", 2, 10, 10)); @@ -2332,9 +2175,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.X399_Phantom_Gaming_6: //NCT6779D - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("Chipset 1.05V", 1, 0, 1)); v.Add(new Voltage("AVCC", 2, 10, 10)); @@ -2364,9 +2206,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.X570_Taichi: - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2404,9 +2245,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Chassis #4", 6)); break; - } + case Model.X570_Phantom_Gaming_ITX: - { v.Add(new Voltage("+12V", 0)); v.Add(new Voltage("+5V", 1)); v.Add(new Voltage("Vcore", 2)); @@ -2436,10 +2276,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("CPU Fan #2", 2)); c.Add(new Ctrl("Chipset Fan", 3)); break; - } + default: - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2470,17 +2309,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.ASUS: - { + string[] fanControlNames; switch (model) { case Model.P8Z77_V: // NCT6779D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2509,9 +2345,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Chassis Fan #3", 3)); break; - } + case Model.ROG_MAXIMUS_X_APEX: // NCT6793D - { v.Add(new Voltage("Vcore", 0, 2, 2)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVSB", 2, 34, 34)); @@ -2546,9 +2381,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("AIO Pump", 4)); break; - } + case Model.Z170_A: //NCT6793D - { v.Add(new Voltage("Vcore", 0, 2, 2)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVSB", 2, 34, 34)); @@ -2575,7 +2409,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard // CPU Fan Optional uses the same fancontrol as CPU Fan. // Water Pump speed can only be read from the EC. string[] fanNames = { "Chassis Fan 1", "CPU Fan", "Chassis Fan 2", "Chassis Fan 3", "Chassis Fan 4", "CPU Fan Optional" }; - string[] fanControlNames = { "Chassis Fan 1", "CPU Fan", "Chassis Fan 2", "Chassis Fan 3", "Chassis Fan 4", "Water Pump" }; + fanControlNames = new[] { "Chassis Fan 1", "CPU Fan", "Chassis Fan 2", "Chassis Fan 3", "Chassis Fan 4", "Water Pump" }; for (int i = 0; i < fanNames.Length; i++) f.Add(new Fan(fanNames[i], i)); @@ -2584,9 +2418,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl(fanControlNames[i] + " Control", i)); break; - } + case Model.TUF_GAMING_B550M_PLUS_WIFI: //NCT6798D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2634,12 +2467,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + case Model.ROG_CROSSHAIR_VIII_HERO: // NCT6798D case Model.ROG_CROSSHAIR_VIII_HERO_WIFI: // NCT6798D case Model.ROG_CROSSHAIR_VIII_DARK_HERO: // NCT6798D case Model.ROG_CROSSHAIR_VIII_FORMULA: // NCT6798D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2680,7 +2512,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard t.Add(new Temperature("PECI 1 Calibrated", 22)); t.Add(new Temperature("Virtual", 23)); - string[] fanControlNames = {"Chassis Fan 1", "CPU Fan", "Chassis Fan 2", + fanControlNames = new[] {"Chassis Fan 1", "CPU Fan", "Chassis Fan 2", "Chassis Fan 3", "High Amp Fan", "W_PUMP+", "AIO Pump"}; System.Diagnostics.Debug.Assert(fanControlNames.Length == superIO.Fans.Length, string.Format("Expected {0} fan register in the SuperIO chip", fanControlNames.Length)); @@ -2689,15 +2521,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard for (int i = 0; i < fanControlNames.Length; i++) f.Add(new Fan(fanControlNames[i], i)); - + for (int i = 0; i < fanControlNames.Length; i++) c.Add(new Ctrl(fanControlNames[i], i)); - break; - } + case Model.ROG_MAXIMUS_Z690_EXTREME_GLACIAL: //NCT6798D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVSB", 2, 34, 34)); @@ -2737,10 +2567,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard //t.Add(new Temperature("Temperature 20", 20)); t.Add(new Temperature("Temperature #9", 21)); - string[] fanControlNames = {"Chassis Fan 1", "CPU Fan", "Radiator Fan 1", - "Radiator Fan 2", "Chassis Fan 2", "Water Pump 1", "Water Pump 2"}; + fanControlNames = new[] { "Chassis Fan 1", "CPU Fan", "Radiator Fan 1", "Radiator Fan 2", "Chassis Fan 2", "Water Pump 1", "Water Pump 2" }; System.Diagnostics.Debug.Assert(fanControlNames.Length == superIO.Fans.Length, - string.Format("Expected {0} fan register in the SuperIO chip", fanControlNames.Length)); + $"Expected {fanControlNames.Length} fan register in the SuperIO chip"); System.Diagnostics.Debug.Assert(superIO.Fans.Length == superIO.Controls.Length, "Expected counts of fan controls and fan speed registers to be equal"); @@ -2751,16 +2580,15 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl(fanControlNames[i], i)); break; - } + case Model.ROG_STRIX_B550_I_GAMING: //NCT6798D - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("+5V", 1, 4, 1)); //Probably not updating properly v.Add(new Voltage("AVCC", 2, 10, 10)); v.Add(new Voltage("+3.3V", 3, 34, 34)); v.Add(new Voltage("+12V", 4, 11, 1)); //Probably not updating properly - //v.Add(new Voltage("#Unused #5", 5, 0, 1, 0, true)); - //v.Add(new Voltage("#Unused #6", 6, 0, 1, 0, true)); + //v.Add(new Voltage("#Unused #5", 5, 0, 1, 0, true)); + //v.Add(new Voltage("#Unused #6", 6, 0, 1, 0, true)); v.Add(new Voltage("3VSB", 7, 34, 34)); v.Add(new Voltage("VBat", 8, 34, 34)); v.Add(new Voltage("VTT", 9)); @@ -2800,14 +2628,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (i) { case 0: - f.Add(new Fan("Chassis Fan", 0)); - break; + f.Add(new Fan("Chassis Fan", 0)); + break; case 1: - f.Add(new Fan("CPU Fan", 1)); - break; + f.Add(new Fan("CPU Fan", 1)); + break; case 4: - f.Add(new Fan("AIO Pump", 4)); - break; + f.Add(new Fan("AIO Pump", 4)); + break; } } @@ -2816,21 +2644,20 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (i) { case 0: - c.Add(new Ctrl("Chassis Fan Control", 0)); - break; + c.Add(new Ctrl("Chassis Fan Control", 0)); + break; case 1: - c.Add(new Ctrl("CPU Fan Control", 1)); - break; + c.Add(new Ctrl("CPU Fan Control", 1)); + break; case 4: - c.Add(new Ctrl("AIO Pump Control", 4)); - break; + c.Add(new Ctrl("AIO Pump Control", 4)); + break; } } break; - } + case Model.ROG_STRIX_X570_I_GAMING: //NCT6798D - { v.Add(new Voltage("Vcore", 0, 10, 10)); v.Add(new Voltage("+5V", 1, 4, 1)); //Probably not updating properly v.Add(new Voltage("AVCC", 2, 10, 10)); @@ -2853,14 +2680,14 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (i) { case 0: - f.Add(new Fan("Chassis Fan", 0)); - break; + f.Add(new Fan("Chassis Fan", 0)); + break; case 1: - f.Add(new Fan("CPU Fan", 1)); - break; + f.Add(new Fan("CPU Fan", 1)); + break; case 4: - f.Add(new Fan("AIO Pump", 4)); - break; + f.Add(new Fan("AIO Pump", 4)); + break; } } @@ -2869,20 +2696,19 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (i) { case 0: - c.Add(new Ctrl("Chassis Fan Control", 0)); - break; + c.Add(new Ctrl("Chassis Fan Control", 0)); + break; case 1: - c.Add(new Ctrl("CPU Fan Control", 1)); - break; + c.Add(new Ctrl("CPU Fan Control", 1)); + break; case 4: - c.Add(new Ctrl("AIO Pump Control", 4)); - break; + c.Add(new Ctrl("AIO Pump Control", 4)); + break; } } break; - } + case Model.ROG_STRIX_B550_F_GAMING_WIFI: // NCT6798D-R - { v.Add(new Voltage("Vcore", 0, 2, 2)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2899,7 +2725,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard v.Add(new Voltage("Voltage #14", 13, true)); v.Add(new Voltage("Voltage #15", 14, true)); t.Add(new Temperature("CPU Core", 0)); - + for (int i = 0; i < superIO.Fans.Length; i++) f.Add(new Fan("Fan #" + (i + 1), i)); @@ -2907,9 +2733,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2940,17 +2765,13 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } case Manufacturer.MSI: - { switch (model) { case Model.B360M_PRO_VDH: // NCT6797D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -2977,9 +2798,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan #2", 3)); break; - } + case Model.B450A_PRO: // NCT6797D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3014,9 +2834,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan #4", 5)); break; - } + case Model.Z270_PC_MATE: // NCT6795D - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+5V", 1, 4, 1)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3048,9 +2867,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("System Fan #4", 5)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3081,13 +2899,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3118,7 +2934,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Fan Control #" + (i + 1), i)); break; - } } } @@ -3127,11 +2942,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.ASRock: - { switch (model) { case Model.AOD790GX_128M: // W83627EHF - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("AVCC", 2, 34, 34)); v.Add(new Voltage("+3.3V", 4, 10, 10)); @@ -3148,9 +2961,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3174,13 +2986,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } } break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3204,7 +3014,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } } } @@ -3213,11 +3022,9 @@ namespace LibreHardwareMonitor.Hardware.Motherboard switch (manufacturer) { case Manufacturer.ASRock: - { switch (model) { case Model._880GMH_USB3: // W83627DHG-P - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+3.3V", 3, 34, 34)); v.Add(new Voltage("+5V", 5, 15, 7.5f)); @@ -3234,9 +3041,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3259,19 +3065,15 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } } break; - } case Manufacturer.ASUS: - { switch (model) { case Model.P6T: // W83667HG case Model.P6X58D_E: // W83667HG case Model.RAMPAGE_II_GENE: // W83667HG - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+12V", 1, 11.5f, 1.91f)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3291,9 +3093,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } + case Model.RAMPAGE_EXTREME: // W83667HG - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("+12V", 1, 12, 2)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3313,9 +3114,8 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3338,13 +3138,11 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } } break; - } + default: - { v.Add(new Voltage("Vcore", 0)); v.Add(new Voltage("Voltage #2", 1, true)); v.Add(new Voltage("AVCC", 2, 34, 34)); @@ -3367,7 +3165,6 @@ namespace LibreHardwareMonitor.Hardware.Motherboard c.Add(new Ctrl("Auxiliary Fan", 2)); break; - } } } @@ -3385,7 +3182,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard float? value = _readVoltage(sensor.Index); if (value.HasValue) { - sensor.Value = value + (value - sensor.Parameters[2].Value) * sensor.Parameters[0].Value / sensor.Parameters[1].Value; + sensor.Value = value + ((value - sensor.Parameters[2].Value) * sensor.Parameters[0].Value / sensor.Parameters[1].Value); ActivateSensor(sensor); } } @@ -3412,8 +3209,7 @@ namespace LibreHardwareMonitor.Hardware.Motherboard foreach (Sensor sensor in _controls) { - float? value = _readControl(sensor.Index); - sensor.Value = value; + sensor.Value = _readControl(sensor.Index); } _postUpdate(); diff --git a/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs b/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs index 471a079..5b76e3e 100644 --- a/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Network/NetworkGroup.cs @@ -16,10 +16,10 @@ namespace LibreHardwareMonitor.Hardware.Network public event HardwareEventHandler HardwareAdded; public event HardwareEventHandler HardwareRemoved; - private readonly Dictionary _networks = new Dictionary(); - private readonly object _scanLock = new object(); + private readonly Dictionary _networks = new(); + private readonly object _scanLock = new(); private readonly ISettings _settings; - private List _hardware = new List(); + private List _hardware = new(); public NetworkGroup(ISettings settings) { @@ -72,23 +72,21 @@ namespace LibreHardwareMonitor.Hardware.Network if (networkInterfaces == null) return; - var foundNetworkInterfaces = networkInterfaces.ToDictionary(x => x.Id, x => x); // Remove network interfaces that no longer exist. - List removeKeys = new List(); + List removeKeys = new(); foreach (KeyValuePair networkInterfacePair in _networks) { if (foundNetworkInterfaces.ContainsKey(networkInterfacePair.Key)) continue; - removeKeys.Add(networkInterfacePair.Key); } foreach (string key in removeKeys) { - var network = _networks[key]; + Network network = _networks[key]; network.Close(); _networks.Remove(key); diff --git a/LibreHardwareMonitorLib/Hardware/Parameter.cs b/LibreHardwareMonitorLib/Hardware/Parameter.cs index 3388332..89ee623 100644 --- a/LibreHardwareMonitorLib/Hardware/Parameter.cs +++ b/LibreHardwareMonitorLib/Hardware/Parameter.cs @@ -23,10 +23,9 @@ namespace LibreHardwareMonitor.Hardware _settings = settings; _isDefault = !settings.Contains(Identifier.ToString()); _value = description.DefaultValue; - if (!_isDefault) + if (!_isDefault && !float.TryParse(settings.GetValue(Identifier.ToString(), "0"), NumberStyles.Float, CultureInfo.InvariantCulture, out _value)) { - if (!float.TryParse(settings.GetValue(Identifier.ToString(), "0"), NumberStyles.Float, CultureInfo.InvariantCulture, out _value)) - _value = description.DefaultValue; + _value = description.DefaultValue; } } @@ -82,7 +81,6 @@ namespace LibreHardwareMonitor.Hardware if (visitor == null) throw new ArgumentNullException(nameof(visitor)); - visitor.VisitParameter(this); } diff --git a/LibreHardwareMonitorLib/Hardware/Psu/Corsair/CorsairPsu.cs b/LibreHardwareMonitorLib/Hardware/Psu/Corsair/CorsairPsu.cs index 3cb48c1..59ead84 100644 --- a/LibreHardwareMonitorLib/Hardware/Psu/Corsair/CorsairPsu.cs +++ b/LibreHardwareMonitorLib/Hardware/Psu/Corsair/CorsairPsu.cs @@ -343,7 +343,6 @@ namespace LibreHardwareMonitor.Hardware.Psu.Corsair if (!SendCommand(stream, 3, Command.PROD_STR, 0, out byte[] productArr)) throw new CommunicationProtocolError(stream.Device, "Can't read product"); - string ArrayToString(byte[] ar) { int i = 0; @@ -357,7 +356,6 @@ namespace LibreHardwareMonitor.Hardware.Psu.Corsair return Encoding.ASCII.GetString(trimmed); } - return new FirmwareInfo { Vendor = ArrayToString(vendorArr), Product = ArrayToString(productArr) }; } @@ -372,20 +370,17 @@ namespace LibreHardwareMonitor.Hardware.Psu.Corsair case Command.RAIL_VOLTS: case Command.RAIL_AMPS: case Command.RAIL_WATTS: + if (!SendCommand(stream, 2, Command.SELECT_RAIL, rail, out _)) { - if (!SendCommand(stream, 2, Command.SELECT_RAIL, rail, out _)) - { - data = null; - return false; - } - - break; + data = null; + return false; } + + break; } return SendCommand(stream, 3, cmd, 0, out data); - // mutex_unlock(&priv->lock) ; // return ret; } @@ -404,29 +399,13 @@ namespace LibreHardwareMonitor.Hardware.Psu.Corsair * supported (HX1200i) */ int tmp = BitConverter.ToInt32(data, 0); // ((int)data[3] << 24) + (data[2] << 16) + (data[1] << 8) + data[0]; - switch (cmd) + return cmd switch { - case Command.RAIL_VOLTS_HCRIT: - case Command.RAIL_VOLTS_LCRIT: - case Command.RAIL_AMPS_HCRIT: - case Command.TEMP_HCRIT: - case Command.IN_VOLTS: - case Command.IN_AMPS: - case Command.RAIL_VOLTS: - case Command.RAIL_AMPS: - case Command.TEMP0: - case Command.TEMP1: - case Command.FAN_RPM: - case Command.RAIL_WATTS: - case Command.TOTAL_WATTS: - return Linear11ToFloat32((ushort)tmp); // Linear11ToInt((ushort)tmp, 1000000); - case Command.TOTAL_UPTIME: - case Command.UPTIME: - case Command.OCPMODE: - return tmp; - } - - return null; + Command.RAIL_VOLTS_HCRIT or Command.RAIL_VOLTS_LCRIT or Command.RAIL_AMPS_HCRIT or Command.TEMP_HCRIT or Command.IN_VOLTS or Command.IN_AMPS or Command.RAIL_VOLTS or Command.RAIL_AMPS + or Command.TEMP0 or Command.TEMP1 or Command.FAN_RPM or Command.RAIL_WATTS or Command.TOTAL_WATTS => Linear11ToFloat32((ushort)tmp), // Linear11ToInt((ushort)tmp, 1000000); + Command.TOTAL_UPTIME or Command.UPTIME or Command.OCPMODE => tmp, + _ => null, + }; } public struct Criticals diff --git a/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs b/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs index da21569..a14064d 100644 --- a/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs +++ b/LibreHardwareMonitorLib/Hardware/RyzenSMU.cs @@ -130,77 +130,31 @@ namespace LibreHardwareMonitor.Hardware { if (family == 0x17) { - switch (model) + return model switch { - case 0x01: - { - return packageType == 7 ? CpuCodeName.Threadripper : CpuCodeName.SummitRidge; - } - case 0x08: - { - return packageType == 7 ? CpuCodeName.Colfax : CpuCodeName.PinnacleRidge; - } - case 0x11: - { - return CpuCodeName.RavenRidge; - } - case 0x18: - { - return packageType == 2 ? CpuCodeName.RavenRidge2 : CpuCodeName.Picasso; - } - case 0x20: - { - return CpuCodeName.Dali; - } - case 0x31: - { - return CpuCodeName.CastlePeak; - } - case 0x60: - { - return CpuCodeName.Renoir; - } - case 0x71: - { - return CpuCodeName.Matisse; - } - case 0x90: - { - return CpuCodeName.Vangogh; - } - default: - { - return CpuCodeName.Undefined; - } - } + 0x01 => packageType == 7 ? CpuCodeName.Threadripper : CpuCodeName.SummitRidge, + 0x08 => packageType == 7 ? CpuCodeName.Colfax : CpuCodeName.PinnacleRidge, + 0x11 => CpuCodeName.RavenRidge, + 0x18 => packageType == 2 ? CpuCodeName.RavenRidge2 : CpuCodeName.Picasso, + 0x20 => CpuCodeName.Dali, + 0x31 => CpuCodeName.CastlePeak, + 0x60 => CpuCodeName.Renoir, + 0x71 => CpuCodeName.Matisse, + 0x90 => CpuCodeName.Vangogh, + _ => CpuCodeName.Undefined, + }; } if (family == 0x19) { - switch (model) + return model switch { - case 0x00: - { - return CpuCodeName.Milan; - } - case 0x20: - case 0x21: - { - return CpuCodeName.Vermeer; - } - case 0x40: - { - return CpuCodeName.Rembrandt; - } - case 0x50: - { - return CpuCodeName.Cezanne; - } - default: - { - return CpuCodeName.Undefined; - } - } + 0x00 => CpuCodeName.Milan, + 0x20 or 0x21 => CpuCodeName.Vermeer, + 0x40 => CpuCodeName.Rembrandt, + 0x50 => CpuCodeName.Cezanne, + _ => CpuCodeName.Undefined, + }; } return CpuCodeName.Undefined; @@ -242,40 +196,32 @@ namespace LibreHardwareMonitor.Hardware case CpuCodeName.CastlePeak: case CpuCodeName.Matisse: case CpuCodeName.Vermeer: - { _cmdAddr = 0x3B10524; _rspAddr = 0x3B10570; _argsAddr = 0x3B10A40; - return true; - } + case CpuCodeName.Colfax: case CpuCodeName.SummitRidge: case CpuCodeName.Threadripper: case CpuCodeName.PinnacleRidge: - { _cmdAddr = 0x3B1051C; _rspAddr = 0x3B10568; _argsAddr = 0x3B10590; - return true; - } + case CpuCodeName.Renoir: case CpuCodeName.Picasso: case CpuCodeName.RavenRidge: case CpuCodeName.RavenRidge2: case CpuCodeName.Dali: - { _cmdAddr = 0x3B10A20; _rspAddr = 0x3B10A80; _argsAddr = 0x3B10A88; - return true; - } + default: - { return false; - } } } @@ -350,146 +296,96 @@ namespace LibreHardwareMonitor.Hardware switch (_cpuCodeName) { case CpuCodeName.Matisse: - { switch (_pmTableVersion) { case 0x240902: - { _pmTableSize = 0x514; break; - } case 0x240903: - { _pmTableSize = 0x518; break; - } case 0x240802: - { _pmTableSize = 0x7E0; break; - } case 0x240803: - { _pmTableSize = 0x7E4; break; - } default: - { return; - } } - break; - } + case CpuCodeName.Vermeer: - { switch (_pmTableVersion) { case 0x2D0903: - { _pmTableSize = 0x594; break; - } case 0x380904: - { _pmTableSize = 0x5A4; break; - } case 0x380905: - { _pmTableSize = 0x5D0; break; - } case 0x2D0803: - { _pmTableSize = 0x894; break; - } case 0x380804: - { _pmTableSize = 0x8A4; break; - } case 0x380805: - { _pmTableSize = 0x8F0; break; - } default: - { return; - } } - break; - } + case CpuCodeName.Renoir: - { switch (_pmTableVersion) { case 0x370000: - { _pmTableSize = 0x794; break; - } case 0x370001: - { _pmTableSize = 0x884; break; - } case 0x370002: case 0x370003: - { _pmTableSize = 0x88C; break; - } case 0x370004: - { _pmTableSize = 0x8AC; break; - } case 0x370005: - { _pmTableSize = 0x8C8; break; - } default: - { return; - } } - break; - } + case CpuCodeName.Cezanne: - { switch (_pmTableVersion) { case 0x400005: - { _pmTableSize = 0x944; break; - } - default: - { - return; - } - } + default: + return; + } break; - } + case CpuCodeName.Picasso: case CpuCodeName.RavenRidge: case CpuCodeName.RavenRidge2: - { _pmTableSizeAlt = 0xA4; _pmTableSize = 0x608 + _pmTableSizeAlt; break; - } + default: - { return; - } } } @@ -502,25 +398,17 @@ namespace LibreHardwareMonitor.Hardware { case CpuCodeName.RavenRidge: case CpuCodeName.Picasso: - { fn = 0x0c; break; - } case CpuCodeName.Matisse: case CpuCodeName.Vermeer: - { fn = 0x08; break; - } case CpuCodeName.Renoir: - { fn = 0x06; break; - } default: - { return false; - } } bool ret = SendCommand(fn, ref args); @@ -607,44 +495,34 @@ namespace LibreHardwareMonitor.Hardware case CpuCodeName.Vermeer: case CpuCodeName.Matisse: case CpuCodeName.CastlePeak: - { fn[0] = 0x06; SetupAddrClass1(fn); - return; - } + case CpuCodeName.Renoir: - { fn[0] = 0x66; SetupAddrClass1(fn); - return; - } + case CpuCodeName.Colfax: case CpuCodeName.PinnacleRidge: - { fn[0] = 0x0b; fn[1] = 0x0c; SetupAddrClass2(fn); - return; - } + case CpuCodeName.Dali: case CpuCodeName.Picasso: case CpuCodeName.RavenRidge: case CpuCodeName.RavenRidge2: - { fn[0] = 0x0a; fn[1] = 0x3d; fn[2] = 0x0b; SetupAddrClass3(fn); + return; - return; - } default: - { return; - } } } @@ -657,28 +535,23 @@ namespace LibreHardwareMonitor.Hardware { case CpuCodeName.Matisse: case CpuCodeName.Vermeer: - { fn = 0x05; break; - } + case CpuCodeName.Renoir: - { args[0] = 3; fn = 0x65; break; - } + case CpuCodeName.Picasso: case CpuCodeName.RavenRidge: case CpuCodeName.RavenRidge2: - { args[0] = 3; fn = 0x3d; break; - } + default: - { return false; - } } return SendCommand(fn, ref args); diff --git a/LibreHardwareMonitorLib/Hardware/SMBios.cs b/LibreHardwareMonitorLib/Hardware/SMBios.cs index 7be7f00..274e300 100644 --- a/LibreHardwareMonitorLib/Hardware/SMBios.cs +++ b/LibreHardwareMonitorLib/Hardware/SMBios.cs @@ -301,7 +301,7 @@ namespace LibreHardwareMonitor.Hardware Dsp, VideoProcessor } - + /// /// Processor characteristics based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.9. /// @@ -1228,40 +1228,26 @@ namespace LibreHardwareMonitor.Hardware switch (type) { case 0x00: - { Bios = new BiosInformation(data, strings); break; - } case 0x01: - { System = new SystemInformation(data, strings); break; - } case 0x02: - { Board = new BaseBoardInformation(data, strings); break; - } case 0x03: - { SystemEnclosure = new SystemEnclosure(data, strings); break; - } case 0x04: - { processorInformationList.Add(new ProcessorInformation(data, strings)); break; - } case 0x07: - { processorCacheList.Add(new CacheInformation(data, strings)); break; - } case 0x11: - { memoryDeviceList.Add(new MemoryDevice(data, strings)); break; - } } } } @@ -1359,9 +1345,9 @@ namespace LibreHardwareMonitor.Hardware const int megabyte = 1024 * 1024; r.Append("BIOS Size: "); if (Bios.Size > megabyte) - r.AppendLine(Bios.Size.Value / megabyte + " MB"); + r.AppendLine((Bios.Size.Value / megabyte) + " MB"); else - r.AppendLine(Bios.Size.Value / 1024 + " KB"); + r.AppendLine((Bios.Size.Value / 1024) + " KB"); } r.AppendLine(); diff --git a/LibreHardwareMonitorLib/Hardware/Sensor.cs b/LibreHardwareMonitorLib/Hardware/Sensor.cs index 1939492..8b8ebbd 100644 --- a/LibreHardwareMonitorLib/Hardware/Sensor.cs +++ b/LibreHardwareMonitorLib/Hardware/Sensor.cs @@ -174,7 +174,6 @@ namespace LibreHardwareMonitor.Hardware if (visitor == null) throw new ArgumentNullException(nameof(visitor)); - visitor.VisitSensor(this); } @@ -238,7 +237,6 @@ namespace LibreHardwareMonitor.Hardware if (time > now) break; - float value = reader.ReadSingle(); AppendValue(value, time); readLen = reader.BaseStream.Length - reader.BaseStream.Position; diff --git a/LibreHardwareMonitorLib/Hardware/SensorVisitor.cs b/LibreHardwareMonitorLib/Hardware/SensorVisitor.cs index e3098ed..4e4e9ed 100644 --- a/LibreHardwareMonitorLib/Hardware/SensorVisitor.cs +++ b/LibreHardwareMonitorLib/Hardware/SensorVisitor.cs @@ -33,7 +33,6 @@ namespace LibreHardwareMonitor.Hardware if (computer == null) throw new ArgumentNullException(nameof(computer)); - computer.Traverse(this); } @@ -46,7 +45,6 @@ namespace LibreHardwareMonitor.Hardware if (hardware == null) throw new ArgumentNullException(nameof(hardware)); - hardware.Traverse(this); } diff --git a/LibreHardwareMonitorLib/Hardware/Storage/AbstractStorage.cs b/LibreHardwareMonitorLib/Hardware/Storage/AbstractStorage.cs index 9990c88..b2b0219 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/AbstractStorage.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/AbstractStorage.cs @@ -20,7 +20,7 @@ namespace LibreHardwareMonitor.Hardware.Storage private readonly PerformanceValue _perfWrite = new(); private readonly StorageInfo _storageInfo; private readonly TimeSpan _updateInterval = TimeSpan.FromSeconds(60); - + private ulong _lastReadRateCounter; private double _lastTime; private DateTime _lastUpdate = DateTime.MinValue; @@ -91,14 +91,9 @@ namespace LibreHardwareMonitor.Hardware.Storage return x; } - if (info.BusType == Kernel32.STORAGE_BUS_TYPE.BusTypeAta || - info.BusType == Kernel32.STORAGE_BUS_TYPE.BusTypeSata || - info.BusType == Kernel32.STORAGE_BUS_TYPE.BusTypeNvme) - { - return AtaStorage.CreateInstance(info, settings); - } - - return StorageGeneric.CreateInstance(info, settings); + return info.BusType is Kernel32.STORAGE_BUS_TYPE.BusTypeAta or Kernel32.STORAGE_BUS_TYPE.BusTypeSata or Kernel32.STORAGE_BUS_TYPE.BusTypeNvme + ? AtaStorage.CreateInstance(info, settings) + : StorageGeneric.CreateInstance(info, settings); } protected virtual void CreateSensors() @@ -225,7 +220,7 @@ namespace LibreHardwareMonitor.Hardware.Storage } if (totalSize > 0) - _usageSensor.Value = 100.0f - (100.0f * totalFreeSpace) / totalSize; + _usageSensor.Value = 100.0f - ((100.0f * totalFreeSpace) / totalSize); else _usageSensor.Value = null; } diff --git a/LibreHardwareMonitorLib/Hardware/Storage/DebugSmart.cs b/LibreHardwareMonitorLib/Hardware/Storage/DebugSmart.cs index ba10355..10ac261 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/DebugSmart.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/DebugSmart.cs @@ -385,7 +385,7 @@ namespace LibreHardwareMonitor.Hardware.Storage { string[] array = lines[i].Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - if (array.Length != 4 && array.Length != 5) + if (array.Length is not 4 and not 5) throw new Exception(); var v = new Kernel32.SMART_ATTRIBUTE { Id = Convert.ToByte(array[0], idBase), RawValue = new byte[6] }; diff --git a/LibreHardwareMonitorLib/Hardware/Storage/GenericHardDisk.cs b/LibreHardwareMonitorLib/Hardware/Storage/GenericHardDisk.cs index 456b69f..e18e017 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/GenericHardDisk.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/GenericHardDisk.cs @@ -11,7 +11,7 @@ namespace LibreHardwareMonitor.Hardware.Storage [NamePrefix("")] public class GenericHardDisk : AtaStorage { - private static readonly List _smartAttributes = new List + private static readonly List _smartAttributes = new() { new SmartAttribute(0x01, SmartNames.ReadErrorRate), new SmartAttribute(0x02, SmartNames.ThroughputPerformance), diff --git a/LibreHardwareMonitorLib/Hardware/Storage/NVMeGeneric.cs b/LibreHardwareMonitorLib/Hardware/Storage/NVMeGeneric.cs index 45d9234..3cb4134 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/NVMeGeneric.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/NVMeGeneric.cs @@ -14,12 +14,12 @@ namespace LibreHardwareMonitor.Hardware.Storage private const ulong Scale = 1000000; private const ulong Units = 512; private readonly NVMeInfo _info; - private readonly List _sensors = new List(); + private readonly List _sensors = new(); /// /// Gets the SMART data. /// - public NVMeSmart Smart { get; private set; } + public NVMeSmart Smart { get; } private NVMeGeneric(StorageInfo storageInfo, NVMeInfo info, int index, ISettings settings) : base(storageInfo, info.Model, info.Revision, "nvme", index, settings) @@ -90,7 +90,6 @@ namespace LibreHardwareMonitor.Hardware.Storage if (health == null) return; - foreach (NVMeSensor sensor in _sensors) sensor.Update(health); } @@ -100,7 +99,6 @@ namespace LibreHardwareMonitor.Hardware.Storage if (_info == null) return; - r.AppendLine("PCI Vendor ID: 0x" + _info.VID.ToString("x04")); if (_info.VID != _info.SSVID) r.AppendLine("PCI Subsystem Vendor ID: 0x" + _info.VID.ToString("x04")); @@ -115,7 +113,6 @@ namespace LibreHardwareMonitor.Hardware.Storage if (health == null) return; - if (health.CriticalWarning == Kernel32.NVME_CRITICAL_WARNING.None) r.AppendLine("Critical Warning: -"); else @@ -181,11 +178,9 @@ namespace LibreHardwareMonitor.Hardware.Storage public void Update(NVMeHealthInfo health) { float v = _getValue(health); - if (SensorType == SensorType.Temperature) - { - if (v < -1000 || v > 1000) - return; - } + if (SensorType == SensorType.Temperature && v is < -1000 or > 1000) + return; + Value = v; } } diff --git a/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntel.cs b/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntel.cs index 59cce27..d6d258e 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntel.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntel.cs @@ -59,8 +59,7 @@ namespace LibreHardwareMonitor.Hardware.Storage Kernel32.RtlCopyMemory(ptr, newPtr, (uint)len); Marshal.FreeHGlobal(buffer); - Kernel32.NVME_IDENTIFY_CONTROLLER_DATA item = Marshal.PtrToStructure(ptr); - data = item; + data = Marshal.PtrToStructure(ptr); Marshal.FreeHGlobal(ptr); result = true; } @@ -105,8 +104,7 @@ namespace LibreHardwareMonitor.Hardware.Storage { IntPtr offset = Marshal.OffsetOf(nameof(Kernel32.NVME_PASS_THROUGH_IOCTL.DataBuffer)); var newPtr = IntPtr.Add(buffer, offset.ToInt32()); - Kernel32.NVME_HEALTH_INFO_LOG item = Marshal.PtrToStructure(newPtr); - data = item; + data = Marshal.PtrToStructure(newPtr); Marshal.FreeHGlobal(buffer); result = true; } diff --git a/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntelRst.cs b/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntelRst.cs index e02cbf1..ff845e0 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntelRst.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/NVMeIntelRst.cs @@ -59,8 +59,7 @@ namespace LibreHardwareMonitor.Hardware.Storage Kernel32.RtlCopyMemory(ptr, newPtr, (uint)len); Marshal.FreeHGlobal(buffer); - Kernel32.NVME_IDENTIFY_CONTROLLER_DATA item = Marshal.PtrToStructure(ptr); - data = item; + data = Marshal.PtrToStructure(ptr); Marshal.FreeHGlobal(ptr); result = true; } @@ -106,8 +105,7 @@ namespace LibreHardwareMonitor.Hardware.Storage { IntPtr offset = Marshal.OffsetOf(nameof(Kernel32.NVME_PASS_THROUGH_IOCTL.DataBuffer)); IntPtr newPtr = IntPtr.Add(buffer, offset.ToInt32()); - Kernel32.NVME_HEALTH_INFO_LOG item = Marshal.PtrToStructure(newPtr); - data = item; + data = Marshal.PtrToStructure(newPtr); Marshal.FreeHGlobal(buffer); result = true; } diff --git a/LibreHardwareMonitorLib/Hardware/Storage/NVMeSamsung.cs b/LibreHardwareMonitorLib/Hardware/Storage/NVMeSamsung.cs index 43119ee..534908d 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/NVMeSamsung.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/NVMeSamsung.cs @@ -238,7 +238,7 @@ namespace LibreHardwareMonitor.Hardware.Storage validTransfer = Kernel32.DeviceIoControl(handle, Kernel32.IOCTL.IOCTL_SCSI_PASS_THROUGH, buffer, length, buffer, length, out _, IntPtr.Zero); if (validTransfer) { - var result = Marshal.PtrToStructure(buffer); + Kernel32.SCSI_PASS_THROUGH_WITH_BUFFERS result = Marshal.PtrToStructure(buffer); if (result.DataBuf.All(x => x == 0)) { diff --git a/LibreHardwareMonitorLib/Hardware/Storage/NVMeSmart.cs b/LibreHardwareMonitorLib/Hardware/Storage/NVMeSmart.cs index 692881b..4b6812b 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/NVMeSmart.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/NVMeSmart.cs @@ -1,192 +1,191 @@ -// 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 System.Runtime.InteropServices; -using System.Text; -using LibreHardwareMonitor.Interop; - -namespace LibreHardwareMonitor.Hardware.Storage -{ - public class NVMeSmart : IDisposable - { - private readonly int _driveNumber; - private readonly SafeHandle _handle; - - internal NVMeSmart(StorageInfo storageInfo) - { - _driveNumber = storageInfo.Index; - NVMeDrive = null; - string name = storageInfo.Name; - - // Test Samsung protocol. - if (NVMeDrive == null && name.IndexOf("Samsung", StringComparison.OrdinalIgnoreCase) > -1) - { - _handle = NVMeSamsung.IdentifyDevice(storageInfo); - if (_handle != null) - { +// 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 System.Runtime.InteropServices; +using System.Text; +using LibreHardwareMonitor.Interop; + +namespace LibreHardwareMonitor.Hardware.Storage +{ + public class NVMeSmart : IDisposable + { + private readonly int _driveNumber; + private readonly SafeHandle _handle; + + internal NVMeSmart(StorageInfo storageInfo) + { + _driveNumber = storageInfo.Index; + NVMeDrive = null; + string name = storageInfo.Name; + + // Test Samsung protocol. + if (NVMeDrive == null && name.IndexOf("Samsung", StringComparison.OrdinalIgnoreCase) > -1) + { + _handle = NVMeSamsung.IdentifyDevice(storageInfo); + if (_handle != null) + { NVMeDrive = new NVMeSamsung(); if (!NVMeDrive.IdentifyController(_handle, out _)) { NVMeDrive = null; - } - } - } - - // Test Intel protocol. - if (NVMeDrive == null && name.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) > -1) - { - _handle = NVMeIntel.IdentifyDevice(storageInfo); - if (_handle != null) - { - NVMeDrive = new NVMeIntel(); - } - } - - // Test Intel raid protocol. - if (NVMeDrive == null && name.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) > -1) - { - _handle = NVMeIntelRst.IdentifyDevice(storageInfo); - if (_handle != null) - { - NVMeDrive = new NVMeIntelRst(); - } - } - - // Test Windows generic driver protocol. - if (NVMeDrive == null) - { - _handle = NVMeWindows.IdentifyDevice(storageInfo); - if (_handle != null) - { - NVMeDrive = new NVMeWindows(); - } - } - } - - public bool IsValid - { - get - { - return _handle is { IsInvalid: false }; - } - } - - internal INVMeDrive NVMeDrive { get; } - - public void Dispose() - { - Close(); - } - - private static string GetString(byte[] s) - { - return Encoding.ASCII.GetString(s).Trim('\t', '\n', '\r', ' ', '\0'); - } - - private static short KelvinToCelsius(ushort k) - { - return (short)(k > 0 ? k - 273 : short.MinValue); - } - - private static short KelvinToCelsius(byte[] k) - { - return KelvinToCelsius(BitConverter.ToUInt16(k, 0)); - } - - public void Close() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected void Dispose(bool disposing) - { - if (disposing) - { - if (_handle != null && !_handle.IsClosed) - _handle.Close(); - } - } - - public Storage.NVMeInfo GetInfo() - { - if (_handle == null || _handle.IsClosed) - return null; - - bool valid = false; - var data = new Kernel32.NVME_IDENTIFY_CONTROLLER_DATA(); - if (NVMeDrive != null) - valid = NVMeDrive.IdentifyController(_handle, out data); - - if (!valid) - return null; - - return new NVMeInfo(_driveNumber, data); - } - - public Storage.NVMeHealthInfo GetHealthInfo() - { - if (_handle == null || _handle.IsClosed) - return null; - - bool valid = false; - var data = new Kernel32.NVME_HEALTH_INFO_LOG(); - if (NVMeDrive != null) - valid = NVMeDrive.HealthInfoLog(_handle, out data); - - if (!valid) - return null; - - return new NVMeHealthInfo(data); - } - - private class NVMeInfo : Storage.NVMeInfo - { - public NVMeInfo(int index, Kernel32.NVME_IDENTIFY_CONTROLLER_DATA data) - { - Index = index; - VID = data.VID; - SSVID = data.SSVID; - Serial = GetString(data.SN); - Model = GetString(data.MN); - Revision = GetString(data.FR); - IEEE = data.IEEE; - TotalCapacity = BitConverter.ToUInt64(data.TNVMCAP, 0); // 128bit little endian - UnallocatedCapacity = BitConverter.ToUInt64(data.UNVMCAP, 0); - ControllerId = data.CNTLID; - NumberNamespaces = data.NN; - } - } - - private class NVMeHealthInfo : Storage.NVMeHealthInfo - { - public NVMeHealthInfo(Kernel32.NVME_HEALTH_INFO_LOG log) - { - CriticalWarning = (Kernel32.NVME_CRITICAL_WARNING)log.CriticalWarning; - Temperature = KelvinToCelsius(log.CompositeTemp); - AvailableSpare = log.AvailableSpare; - AvailableSpareThreshold = log.AvailableSpareThreshold; - PercentageUsed = log.PercentageUsed; - DataUnitRead = BitConverter.ToUInt64(log.DataUnitRead, 0); - DataUnitWritten = BitConverter.ToUInt64(log.DataUnitWritten, 0); - HostReadCommands = BitConverter.ToUInt64(log.HostReadCommands, 0); - HostWriteCommands = BitConverter.ToUInt64(log.HostWriteCommands, 0); - ControllerBusyTime = BitConverter.ToUInt64(log.ControllerBusyTime, 0); - PowerCycle = BitConverter.ToUInt64(log.PowerCycles, 0); - PowerOnHours = BitConverter.ToUInt64(log.PowerOnHours, 0); - UnsafeShutdowns = BitConverter.ToUInt64(log.UnsafeShutdowns, 0); - MediaErrors = BitConverter.ToUInt64(log.MediaAndDataIntegrityErrors, 0); - ErrorInfoLogEntryCount = BitConverter.ToUInt64(log.NumberErrorInformationLogEntries, 0); - WarningCompositeTemperatureTime = log.WarningCompositeTemperatureTime; - CriticalCompositeTemperatureTime = log.CriticalCompositeTemperatureTime; - - TemperatureSensors = new short[log.TemperatureSensor.Length]; - for (int i = 0; i < TemperatureSensors.Length; i++) - TemperatureSensors[i] = KelvinToCelsius(log.TemperatureSensor[i]); - } - } - } -} + } + } + } + + // Test Intel protocol. + if (NVMeDrive == null && name.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) > -1) + { + _handle = NVMeIntel.IdentifyDevice(storageInfo); + if (_handle != null) + { + NVMeDrive = new NVMeIntel(); + } + } + + // Test Intel raid protocol. + if (NVMeDrive == null && name.IndexOf("Intel", StringComparison.OrdinalIgnoreCase) > -1) + { + _handle = NVMeIntelRst.IdentifyDevice(storageInfo); + if (_handle != null) + { + NVMeDrive = new NVMeIntelRst(); + } + } + + // Test Windows generic driver protocol. + if (NVMeDrive == null) + { + _handle = NVMeWindows.IdentifyDevice(storageInfo); + if (_handle != null) + { + NVMeDrive = new NVMeWindows(); + } + } + } + + public bool IsValid + { + get + { + return _handle is { IsInvalid: false }; + } + } + + internal INVMeDrive NVMeDrive { get; } + + public void Dispose() + { + Close(); + } + + private static string GetString(byte[] s) + { + return Encoding.ASCII.GetString(s).Trim('\t', '\n', '\r', ' ', '\0'); + } + + private static short KelvinToCelsius(ushort k) + { + return (short)(k > 0 ? k - 273 : short.MinValue); + } + + private static short KelvinToCelsius(byte[] k) + { + return KelvinToCelsius(BitConverter.ToUInt16(k, 0)); + } + + public void Close() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected void Dispose(bool disposing) + { + if (disposing && _handle is { IsClosed: false }) + { + _handle.Close(); + } + } + + public Storage.NVMeInfo GetInfo() + { + if (_handle == null || _handle.IsClosed) + return null; + + bool valid = false; + var data = new Kernel32.NVME_IDENTIFY_CONTROLLER_DATA(); + if (NVMeDrive != null) + valid = NVMeDrive.IdentifyController(_handle, out data); + + if (!valid) + return null; + + return new NVMeInfo(_driveNumber, data); + } + + public Storage.NVMeHealthInfo GetHealthInfo() + { + if (_handle == null || _handle.IsClosed) + return null; + + bool valid = false; + var data = new Kernel32.NVME_HEALTH_INFO_LOG(); + if (NVMeDrive != null) + valid = NVMeDrive.HealthInfoLog(_handle, out data); + + if (!valid) + return null; + + return new NVMeHealthInfo(data); + } + + private class NVMeInfo : Storage.NVMeInfo + { + public NVMeInfo(int index, Kernel32.NVME_IDENTIFY_CONTROLLER_DATA data) + { + Index = index; + VID = data.VID; + SSVID = data.SSVID; + Serial = GetString(data.SN); + Model = GetString(data.MN); + Revision = GetString(data.FR); + IEEE = data.IEEE; + TotalCapacity = BitConverter.ToUInt64(data.TNVMCAP, 0); // 128bit little endian + UnallocatedCapacity = BitConverter.ToUInt64(data.UNVMCAP, 0); + ControllerId = data.CNTLID; + NumberNamespaces = data.NN; + } + } + + private class NVMeHealthInfo : Storage.NVMeHealthInfo + { + public NVMeHealthInfo(Kernel32.NVME_HEALTH_INFO_LOG log) + { + CriticalWarning = (Kernel32.NVME_CRITICAL_WARNING)log.CriticalWarning; + Temperature = KelvinToCelsius(log.CompositeTemp); + AvailableSpare = log.AvailableSpare; + AvailableSpareThreshold = log.AvailableSpareThreshold; + PercentageUsed = log.PercentageUsed; + DataUnitRead = BitConverter.ToUInt64(log.DataUnitRead, 0); + DataUnitWritten = BitConverter.ToUInt64(log.DataUnitWritten, 0); + HostReadCommands = BitConverter.ToUInt64(log.HostReadCommands, 0); + HostWriteCommands = BitConverter.ToUInt64(log.HostWriteCommands, 0); + ControllerBusyTime = BitConverter.ToUInt64(log.ControllerBusyTime, 0); + PowerCycle = BitConverter.ToUInt64(log.PowerCycles, 0); + PowerOnHours = BitConverter.ToUInt64(log.PowerOnHours, 0); + UnsafeShutdowns = BitConverter.ToUInt64(log.UnsafeShutdowns, 0); + MediaErrors = BitConverter.ToUInt64(log.MediaAndDataIntegrityErrors, 0); + ErrorInfoLogEntryCount = BitConverter.ToUInt64(log.NumberErrorInformationLogEntries, 0); + WarningCompositeTemperatureTime = log.WarningCompositeTemperatureTime; + CriticalCompositeTemperatureTime = log.CriticalCompositeTemperatureTime; + + TemperatureSensors = new short[log.TemperatureSensor.Length]; + for (int i = 0; i < TemperatureSensors.Length; i++) + TemperatureSensors[i] = KelvinToCelsius(log.TemperatureSensor[i]); + } + } + } +} diff --git a/LibreHardwareMonitorLib/Hardware/Storage/NVMeWindows.cs b/LibreHardwareMonitorLib/Hardware/Storage/NVMeWindows.cs index e1ece44..e787db0 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/NVMeWindows.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/NVMeWindows.cs @@ -43,8 +43,7 @@ namespace LibreHardwareMonitor.Hardware.Storage //map NVME_IDENTIFY_CONTROLLER_DATA to nptwb.Buffer IntPtr offset = Marshal.OffsetOf(nameof(Kernel32.STORAGE_QUERY_BUFFER.Buffer)); var newPtr = IntPtr.Add(buffer, offset.ToInt32()); - Kernel32.NVME_IDENTIFY_CONTROLLER_DATA item = Marshal.PtrToStructure(newPtr); - data = item; + data = Marshal.PtrToStructure(newPtr); Marshal.FreeHGlobal(buffer); result = true; } @@ -81,8 +80,7 @@ namespace LibreHardwareMonitor.Hardware.Storage //map NVME_HEALTH_INFO_LOG to nptwb.Buffer IntPtr offset = Marshal.OffsetOf(nameof(Kernel32.STORAGE_QUERY_BUFFER.Buffer)); var newPtr = IntPtr.Add(buffer, offset.ToInt32()); - Kernel32.NVME_HEALTH_INFO_LOG item = Marshal.PtrToStructure(newPtr); - data = item; + data = Marshal.PtrToStructure(newPtr); Marshal.FreeHGlobal(buffer); result = true; } diff --git a/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs b/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs index c749815..d060cb6 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/StorageGroup.cs @@ -21,9 +21,7 @@ namespace LibreHardwareMonitor.Hardware.Storage //https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive using var diskDriveSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive") { Options = { Timeout = TimeSpan.FromSeconds(10) } }; - using ManagementObjectCollection diskDrives = diskDriveSearcher.Get(); - - foreach (ManagementBaseObject diskDrive in diskDrives) + foreach (ManagementBaseObject diskDrive in diskDriveSearcher.Get()) { string deviceId = (string)diskDrive.Properties["DeviceId"].Value; // is \\.\PhysicalDrive0..n uint idx = Convert.ToUInt32(diskDrive.Properties["Index"].Value); diff --git a/LibreHardwareMonitorLib/Hardware/Storage/WindowsSmart.cs b/LibreHardwareMonitorLib/Hardware/Storage/WindowsSmart.cs index 52125ed..504e588 100644 --- a/LibreHardwareMonitorLib/Hardware/Storage/WindowsSmart.cs +++ b/LibreHardwareMonitorLib/Hardware/Storage/WindowsSmart.cs @@ -69,7 +69,7 @@ namespace LibreHardwareMonitor.Hardware.Storage bool isValid = Kernel32.DeviceIoControl(_handle, Kernel32.DFP.DFP_RECEIVE_DRIVE_DATA, ref parameter, Marshal.SizeOf(parameter), out Kernel32.ATTRIBUTECMDOUTPARAMS result, Marshal.SizeOf(), out _, IntPtr.Zero); - return isValid ? result.Attributes : new Kernel32.SMART_ATTRIBUTE[0]; + return isValid ? result.Attributes : Array.Empty(); } public Kernel32.SMART_THRESHOLD[] ReadSmartThresholds() @@ -90,7 +90,7 @@ namespace LibreHardwareMonitor.Hardware.Storage bool isValid = Kernel32.DeviceIoControl(_handle, Kernel32.DFP.DFP_RECEIVE_DRIVE_DATA, ref parameter, Marshal.SizeOf(parameter), out Kernel32.THRESHOLDCMDOUTPARAMS result, Marshal.SizeOf(), out _, IntPtr.Zero); - return isValid ? result.Thresholds : new Kernel32.SMART_THRESHOLD[0]; + return isValid ? result.Thresholds : Array.Empty(); } public bool ReadNameAndFirmwareRevision(out string name, out string firmwareRevision) @@ -167,10 +167,9 @@ namespace LibreHardwareMonitor.Hardware.Storage protected void Dispose(bool disposing) { - if (disposing) + if (disposing && !_handle.IsClosed) { - if (!_handle.IsClosed) - _handle.Close(); + _handle.Close(); } } diff --git a/LibreHardwareMonitorLib/Hardware/ThreadAffinity.cs b/LibreHardwareMonitorLib/Hardware/ThreadAffinity.cs index c4fadbc..20f1010 100644 --- a/LibreHardwareMonitorLib/Hardware/ThreadAffinity.cs +++ b/LibreHardwareMonitorLib/Hardware/ThreadAffinity.cs @@ -34,10 +34,9 @@ namespace LibreHardwareMonitor.Hardware /// true if the specified affinity is valid; otherwise, false. public static bool IsValid(GroupAffinity affinity) { - if (Software.OperatingSystem.IsUnix) + if (Software.OperatingSystem.IsUnix && affinity.Group > 0) { - if (affinity.Group > 0) - return false; + return false; } try @@ -46,7 +45,6 @@ namespace LibreHardwareMonitor.Hardware if (previousAffinity == GroupAffinity.Undefined) return false; - Set(previousAffinity); return true; } @@ -66,23 +64,19 @@ namespace LibreHardwareMonitor.Hardware if (affinity == GroupAffinity.Undefined) return GroupAffinity.Undefined; - if (Software.OperatingSystem.IsUnix) { if (affinity.Group > 0) throw new ArgumentOutOfRangeException(nameof(affinity)); - ulong result = 0; if (LibC.sched_getaffinity(0, (IntPtr)8, ref result) != 0) return GroupAffinity.Undefined; - ulong mask = affinity.Mask; if (LibC.sched_setaffinity(0, (IntPtr)8, ref mask) != 0) return GroupAffinity.Undefined; - return new GroupAffinity(0, result); } @@ -116,7 +110,6 @@ namespace LibreHardwareMonitor.Hardware if (affinity.Group > 0) throw new ArgumentOutOfRangeException(nameof(affinity)); - ulong previous = (ulong)Kernel32.SetThreadAffinityMask(currentThread, uIntPtrMask); return new GroupAffinity(0, previous); diff --git a/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs b/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs index a735c8c..7dc797b 100644 --- a/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs +++ b/LibreHardwareMonitorLib/Interop/AtiAdlxx.cs @@ -191,7 +191,7 @@ namespace LibreHardwareMonitor.Interop IntPtr ptr = Marshal.AllocHGlobal(size); ADLStatus result = ADL_Adapter_AdapterInfo_Get(ptr, size); for (int i = 0; i < info.Length; i++) - info[i] = (ADLAdapterInfo)Marshal.PtrToStructure((IntPtr)((long)ptr + i * elementSize), typeof(ADLAdapterInfo)); + info[i] = (ADLAdapterInfo)Marshal.PtrToStructure((IntPtr)((long)ptr + (i * elementSize)), typeof(ADLAdapterInfo)); Marshal.FreeHGlobal(ptr); diff --git a/LibreHardwareMonitorLib/Interop/Kernel32.cs b/LibreHardwareMonitorLib/Interop/Kernel32.cs index 30887e3..8bf94a5 100644 --- a/LibreHardwareMonitorLib/Interop/Kernel32.cs +++ b/LibreHardwareMonitorLib/Interop/Kernel32.cs @@ -1284,7 +1284,7 @@ namespace LibreHardwareMonitor.Interop public byte Reserved3; /// - /// byte 532:533 O - Atomic Compare & Write Unit (ACWU) + /// byte 532:533 O - Atomic Compare and Write Unit (ACWU) /// public ushort ACWU; diff --git a/LibreHardwareMonitorLib/Software/OperatingSystem.cs b/LibreHardwareMonitorLib/Software/OperatingSystem.cs index e789117..5b91135 100644 --- a/LibreHardwareMonitorLib/Software/OperatingSystem.cs +++ b/LibreHardwareMonitorLib/Software/OperatingSystem.cs @@ -20,7 +20,7 @@ namespace LibreHardwareMonitor.Software { // The operating system doesn't change during execution so let's query it just one time. PlatformID platform = Environment.OSVersion.Platform; - IsUnix = platform == PlatformID.Unix || platform == PlatformID.MacOSX; + IsUnix = platform is PlatformID.Unix or PlatformID.MacOSX; if (Environment.Is64BitOperatingSystem) Is64Bit = true;