moel@135: /* moel@64: moel@64: Version: MPL 1.1/GPL 2.0/LGPL 2.1 moel@64: moel@64: The contents of this file are subject to the Mozilla Public License Version moel@64: 1.1 (the "License"); you may not use this file except in compliance with moel@64: the License. You may obtain a copy of the License at moel@64: moel@64: http://www.mozilla.org/MPL/ moel@64: moel@64: Software distributed under the License is distributed on an "AS IS" basis, moel@64: WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License moel@64: for the specific language governing rights and limitations under the License. moel@64: moel@64: The Original Code is the Open Hardware Monitor code. moel@64: moel@64: The Initial Developer of the Original Code is moel@64: Michael Möller . moel@275: Portions created by the Initial Developer are Copyright (C) 2009-2011 moel@64: the Initial Developer. All Rights Reserved. moel@64: moel@64: Contributor(s): moel@64: moel@64: Alternatively, the contents of this file may be used under the terms of moel@64: either the GNU General Public License Version 2 or later (the "GPL"), or moel@64: the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), moel@64: in which case the provisions of the GPL or the LGPL are applicable instead moel@64: of those above. If you wish to allow use of your version of this file only moel@64: under the terms of either the GPL or the LGPL, and not to allow others to moel@64: use your version of this file under the terms of the MPL, indicate your moel@64: decision by deleting the provisions above and replace them with the notice moel@64: and other provisions required by the GPL or the LGPL. If you do not delete moel@64: the provisions above, a recipient may use your version of this file under moel@64: the terms of any one of the MPL, the GPL or the LGPL. moel@64: moel@64: */ moel@64: moel@64: using System; moel@64: using System.Text; moel@64: using OpenHardwareMonitor.Hardware.LPC; moel@64: moel@64: namespace OpenHardwareMonitor.Hardware.Mainboard { moel@165: internal class Mainboard : IHardware { moel@195: private readonly SMBIOS smbios; moel@195: private readonly string name; moel@275: private string customName; moel@275: private readonly ISettings settings; moel@195: private readonly LPCIO lpcio; moel@195: private readonly LMSensors lmSensors; moel@195: private readonly IHardware[] superIOHardware; moel@64: moel@165: public Mainboard(ISettings settings) { moel@275: this.settings = settings; moel@64: this.smbios = new SMBIOS(); moel@76: moel@76: if (smbios.Board != null) { moel@167: if (!string.IsNullOrEmpty(smbios.Board.ProductName)) { moel@126: if (smbios.Board.Manufacturer == Manufacturer.Unknown) moel@76: this.name = smbios.Board.ProductName; moel@76: else moel@76: this.name = smbios.Board.Manufacturer + " " + moel@76: smbios.Board.ProductName; moel@76: } else { moel@76: this.name = smbios.Board.Manufacturer.ToString(); moel@76: } moel@64: } else { moel@126: this.name = Manufacturer.Unknown.ToString(); moel@64: } moel@76: moel@275: this.customName = settings.GetValue( moel@275: new Identifier(Identifier, "name").ToString(), name); moel@275: moel@135: ISuperIO[] superIO; moel@195: int p = (int)Environment.OSVersion.Platform; moel@135: if ((p == 4) || (p == 128)) { moel@135: this.lmSensors = new LMSensors(); moel@135: superIO = lmSensors.SuperIO; moel@135: } else { moel@135: this.lpcio = new LPCIO(); moel@135: superIO = lpcio.SuperIO; moel@135: } moel@135: moel@130: superIOHardware = new IHardware[superIO.Length]; moel@130: for (int i = 0; i < superIO.Length; i++) moel@176: superIOHardware[i] = new SuperIOHardware(this, superIO[i], moel@130: smbios.Board != null ? smbios.Board.Manufacturer : moel@165: Manufacturer.Unknown, smbios.Board != null ? smbios.Board.Model : moel@165: Model.Unknown, settings); moel@64: } moel@64: moel@64: public string Name { moel@275: get { moel@275: return customName; moel@275: } moel@275: set { moel@275: if (!string.IsNullOrEmpty(value)) moel@275: customName = value; moel@275: else moel@275: customName = name; moel@275: settings.SetValue(new Identifier(Identifier, "name").ToString(), moel@275: customName); moel@275: } moel@64: } moel@64: moel@109: public Identifier Identifier { moel@109: get { return new Identifier("mainboard"); } moel@64: } moel@64: moel@165: public HardwareType HardwareType { moel@165: get { return HardwareType.Mainboard; } moel@64: } moel@64: moel@176: public virtual IHardware Parent { moel@176: get { return null; } moel@176: } moel@176: moel@64: public string GetReport() { moel@64: StringBuilder r = new StringBuilder(); moel@64: moel@64: r.AppendLine("Mainboard"); moel@64: r.AppendLine(); moel@64: r.Append(smbios.GetReport()); moel@64: moel@136: if (lpcio != null) moel@136: r.Append(lpcio.GetReport()); moel@67: moel@64: return r.ToString(); moel@64: } moel@64: moel@64: public void Update() { } moel@64: moel@135: public void Close() { moel@135: if (lmSensors != null) moel@135: lmSensors.Close(); moel@135: } moel@64: moel@64: public IHardware[] SubHardware { moel@130: get { return superIOHardware; } moel@64: } moel@64: moel@64: public ISensor[] Sensors { moel@64: get { return new ISensor[0]; } moel@64: } moel@64: moel@64: #pragma warning disable 67 moel@64: public event SensorEventHandler SensorAdded; moel@64: public event SensorEventHandler SensorRemoved; moel@64: #pragma warning restore 67 moel@110: moel@110: public void Accept(IVisitor visitor) { moel@167: if (visitor == null) moel@167: throw new ArgumentNullException("visitor"); moel@167: visitor.VisitHardware(this); moel@110: } moel@110: moel@110: public void Traverse(IVisitor visitor) { moel@130: foreach (IHardware hardware in superIOHardware) moel@110: hardware.Accept(visitor); moel@110: } moel@64: } moel@64: }