mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-08-22 09:57:20 +00:00
147 lines
4.1 KiB
C#
147 lines
4.1 KiB
C#
/*
|
|
|
|
This Source Code Form is subject to the terms of the Mozilla Public
|
|
License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
Copyright (C) 2009-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
|
|
|
|
*/
|
|
|
|
using System;
|
|
using System.Text;
|
|
using OpenHardwareMonitor.Hardware.LPC;
|
|
|
|
namespace OpenHardwareMonitor.Hardware.Mainboard {
|
|
internal class Mainboard : IHardware {
|
|
private readonly SMBIOS smbios;
|
|
private readonly string name;
|
|
private string customName;
|
|
private readonly ISettings settings;
|
|
private readonly LPCIO lpcio;
|
|
private readonly LMSensors lmSensors;
|
|
private readonly Hardware[] superIOHardware;
|
|
|
|
public Mainboard(SMBIOS smbios, ISettings settings) {
|
|
this.settings = settings;
|
|
this.smbios = smbios;
|
|
|
|
Manufacturer manufacturer = smbios.Board == null ? Manufacturer.Unknown :
|
|
Identification.GetManufacturer(smbios.Board.ManufacturerName);
|
|
|
|
Model model = smbios.Board == null ? Model.Unknown :
|
|
Identification.GetModel(smbios.Board.ProductName);
|
|
|
|
if (smbios.Board != null) {
|
|
if (!string.IsNullOrEmpty(smbios.Board.ProductName)) {
|
|
if (manufacturer == Manufacturer.Unknown)
|
|
this.name = smbios.Board.ProductName;
|
|
else
|
|
this.name = manufacturer + " " +
|
|
smbios.Board.ProductName;
|
|
} else {
|
|
this.name = manufacturer.ToString();
|
|
}
|
|
} else {
|
|
this.name = Manufacturer.Unknown.ToString();
|
|
}
|
|
|
|
this.customName = settings.GetValue(
|
|
new Identifier(Identifier, "name").ToString(), name);
|
|
|
|
ISuperIO[] superIO;
|
|
if (OperatingSystem.IsUnix) {
|
|
this.lmSensors = new LMSensors();
|
|
superIO = lmSensors.SuperIO;
|
|
} else {
|
|
this.lpcio = new LPCIO();
|
|
superIO = lpcio.SuperIO;
|
|
}
|
|
|
|
superIOHardware = new Hardware[superIO.Length];
|
|
for (int i = 0; i < superIO.Length; i++)
|
|
superIOHardware[i] = new SuperIOHardware(this, superIO[i],
|
|
manufacturer, model, settings);
|
|
}
|
|
|
|
public string Name {
|
|
get {
|
|
return customName;
|
|
}
|
|
set {
|
|
if (!string.IsNullOrEmpty(value))
|
|
customName = value;
|
|
else
|
|
customName = name;
|
|
settings.SetValue(new Identifier(Identifier, "name").ToString(),
|
|
customName);
|
|
}
|
|
}
|
|
|
|
public Identifier Identifier {
|
|
get { return new Identifier("mainboard"); }
|
|
}
|
|
|
|
public HardwareType HardwareType {
|
|
get { return HardwareType.Mainboard; }
|
|
}
|
|
|
|
public virtual IHardware Parent {
|
|
get { return null; }
|
|
}
|
|
|
|
public string GetReport() {
|
|
StringBuilder r = new StringBuilder();
|
|
|
|
r.AppendLine("Mainboard");
|
|
r.AppendLine();
|
|
r.Append(smbios.GetReport());
|
|
|
|
if (lpcio != null)
|
|
r.Append(lpcio.GetReport());
|
|
|
|
byte[] table =
|
|
FirmwareTable.GetTable(FirmwareTable.Provider.ACPI, "TAMG");
|
|
if (table != null) {
|
|
GigabyteTAMG tamg = new GigabyteTAMG(table);
|
|
r.Append(tamg.GetReport());
|
|
}
|
|
|
|
return r.ToString();
|
|
}
|
|
|
|
public void Update() { }
|
|
|
|
public void Close() {
|
|
if (lmSensors != null)
|
|
lmSensors.Close();
|
|
foreach (Hardware hardware in superIOHardware)
|
|
hardware.Close();
|
|
}
|
|
|
|
public IHardware[] SubHardware {
|
|
get { return superIOHardware; }
|
|
}
|
|
|
|
public ISensor[] Sensors {
|
|
get { return new ISensor[0]; }
|
|
}
|
|
|
|
#pragma warning disable 67
|
|
public event SensorEventHandler SensorAdded;
|
|
public event SensorEventHandler SensorRemoved;
|
|
#pragma warning restore 67
|
|
|
|
public void Accept(IVisitor visitor) {
|
|
if (visitor == null)
|
|
throw new ArgumentNullException("visitor");
|
|
visitor.VisitHardware(this);
|
|
}
|
|
|
|
public void Traverse(IVisitor visitor) {
|
|
foreach (IHardware hardware in superIOHardware)
|
|
hardware.Accept(visitor);
|
|
}
|
|
}
|
|
}
|