From a84e6c6e8d678c9bf0ee03a4a06b6cf5860474b8 Mon Sep 17 00:00:00 2001 From: Rem0o Date: Fri, 17 Nov 2023 04:54:55 -0500 Subject: [PATCH] Add index to superIO identifier if required (#1183) * Add index to superIO identifier if required * Simplify the index logic to 1 dictionary * Unwanted B660M config delete. * Simplify SuperIOHardware indexing --- .../Hardware/Motherboard/Motherboard.cs | 21 +++++++-- .../Hardware/Motherboard/SuperIOHardware.cs | 47 ++++++++++--------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs index 5928813..9cd3156 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/Motherboard.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using LibreHardwareMonitor.Hardware.Motherboard.Lpc; using LibreHardwareMonitor.Hardware.Motherboard.Lpc.EC; @@ -71,14 +72,26 @@ public class Motherboard : IHardware superIO = _lpcIO.SuperIO; } + EmbeddedController embeddedController = EmbeddedController.Create(Model, settings); - SubHardware = new IHardware[superIO.Count + (embeddedController != null ? 1 : 0)]; - for (int i = 0; i < superIO.Count; i++) - SubHardware[i] = new SuperIOHardware(this, superIO[i], Manufacturer, Model, settings); + List subHardwareList = new List(); + + // there may be more than 1 of the same SuperIO chip + // group by chip + foreach (IGrouping group in superIO.GroupBy(x => x.Chip)) + { + // index by group + foreach ((ISuperIO superIo, int i) in group.Select((x, i) => (x, i))) + { + subHardwareList.Add(new SuperIOHardware(this, superIo, Manufacturer, Model, settings, i)); + } + } if (embeddedController != null) - SubHardware[superIO.Count] = embeddedController; + subHardwareList.Add(embeddedController); + + SubHardware = subHardwareList.ToArray(); } /// diff --git a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs index eca77be..a797630 100644 --- a/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs +++ b/LibreHardwareMonitorLib/Hardware/Motherboard/SuperIOHardware.cs @@ -27,8 +27,8 @@ internal sealed class SuperIOHardware : Hardware 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) + public SuperIOHardware(Motherboard motherboard, ISuperIO superIO, Manufacturer manufacturer, Model model, ISettings settings, int index) + : base(ChipName.GetName(superIO.Chip), new Identifier("lpc", superIO.Chip.ToString().ToLowerInvariant(), index.ToString()), settings) { _motherboard = motherboard; _superIO = superIO; @@ -1681,27 +1681,28 @@ internal sealed class SuperIOHardware : Hardware break; case Model.B660M_DS3H_AX_DDR4: - v.Add(new Voltage("Vcore",0)); - v.Add(new Voltage("VAXG",1)); - v.Add(new Voltage("VCCIN AUX",2)); - v.Add(new Voltage("DIMM AB",3)); - v.Add(new Voltage("+12V",4)); - v.Add(new Voltage("+3.3V",5)); - v.Add(new Voltage("+5V",6)); - t.Add(new Temperature("CPU",0)); - t.Add(new Temperature("PCH",1)); - t.Add(new Temperature("PCIEX16",2)); - t.Add(new Temperature("System #1",3)); - t.Add(new Temperature("System #2",4)); - t.Add(new Temperature("VRAM MOS",5)); - f.Add(new Fan("CPU Fan",0)); - f.Add(new Fan("System Fan #1",2)); - f.Add(new Fan("System Fan #2",3)); - f.Add(new Fan("System Fan #3",4)); - c.Add(new Control("CPU Fan",0)); - c.Add(new Control("System Fan #1",2)); - c.Add(new Control("System Fan #2",3)); - c.Add(new Control("System Fan #3",4)); + v.Add(new Voltage("Vcore", 0)); + v.Add(new Voltage("VAXG", 1)); + v.Add(new Voltage("VCCIN AUX", 2)); + v.Add(new Voltage("DIMM AB", 3)); + v.Add(new Voltage("+12V", 4)); + v.Add(new Voltage("+3.3V", 5)); + v.Add(new Voltage("+5V", 6)); + t.Add(new Temperature("CPU", 0)); + t.Add(new Temperature("PCH", 1)); + t.Add(new Temperature("PCIEX16", 2)); + t.Add(new Temperature("System #1", 3)); + t.Add(new Temperature("System #2", 4)); + t.Add(new Temperature("VRAM MOS", 5)); + f.Add(new Fan("CPU Fan", 0)); + f.Add(new Fan("System Fan #1", 2)); + f.Add(new Fan("System Fan #2", 3)); + f.Add(new Fan("System Fan #3", 4)); + c.Add(new Control("CPU Fan", 0)); + c.Add(new Control("System Fan #1", 2)); + c.Add(new Control("System Fan #2", 3)); + c.Add(new Control("System Fan #3", 4)); + break; default: