Hardware/Mainboard/Mainboard.cs
author moel.mich
Thu, 11 Nov 2010 21:22:24 +0000
changeset 241 52007c404f32
parent 182 4801e9eaf979
child 275 35788ddd1825
permissions -rw-r--r--
Fixed a problem, where the MainForm location and size was lost when the application is started minimized and exited without ever showing the form. This caused MainForm_Load to be never called (location and size was not loaded), but the default size and location were still saved. The new implementation only saves the location and size when one of the two is changed.
moel@135
     1
/*
moel@64
     2
  
moel@64
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@64
     4
moel@64
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@64
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@64
     7
  the License. You may obtain a copy of the License at
moel@64
     8
 
moel@64
     9
  http://www.mozilla.org/MPL/
moel@64
    10
moel@64
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@64
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@64
    13
  for the specific language governing rights and limitations under the License.
moel@64
    14
moel@64
    15
  The Original Code is the Open Hardware Monitor code.
moel@64
    16
moel@64
    17
  The Initial Developer of the Original Code is 
moel@64
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@64
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@64
    20
  the Initial Developer. All Rights Reserved.
moel@64
    21
moel@64
    22
  Contributor(s):
moel@64
    23
moel@64
    24
  Alternatively, the contents of this file may be used under the terms of
moel@64
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@64
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@64
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@64
    28
  of those above. If you wish to allow use of your version of this file only
moel@64
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@64
    30
  use your version of this file under the terms of the MPL, indicate your
moel@64
    31
  decision by deleting the provisions above and replace them with the notice
moel@64
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@64
    33
  the provisions above, a recipient may use your version of this file under
moel@64
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@64
    35
 
moel@64
    36
*/
moel@64
    37
moel@64
    38
using System;
moel@64
    39
using System.Text;
moel@64
    40
using OpenHardwareMonitor.Hardware.LPC;
moel@64
    41
moel@64
    42
namespace OpenHardwareMonitor.Hardware.Mainboard {
moel@165
    43
  internal class Mainboard : IHardware {
moel@195
    44
    private readonly SMBIOS smbios;
moel@195
    45
    private readonly string name;
moel@64
    46
moel@195
    47
    private readonly LPCIO lpcio;
moel@195
    48
    private readonly LMSensors lmSensors;
moel@195
    49
    private readonly IHardware[] superIOHardware;
moel@64
    50
moel@165
    51
    public Mainboard(ISettings settings) {
moel@64
    52
      this.smbios = new SMBIOS();
moel@76
    53
     
moel@76
    54
      if (smbios.Board != null) {
moel@167
    55
        if (!string.IsNullOrEmpty(smbios.Board.ProductName)) {
moel@126
    56
          if (smbios.Board.Manufacturer == Manufacturer.Unknown)
moel@76
    57
            this.name = smbios.Board.ProductName;
moel@76
    58
          else
moel@76
    59
            this.name = smbios.Board.Manufacturer + " " +
moel@76
    60
              smbios.Board.ProductName;
moel@76
    61
        } else {
moel@76
    62
          this.name = smbios.Board.Manufacturer.ToString();
moel@76
    63
        }
moel@64
    64
      } else {
moel@126
    65
        this.name = Manufacturer.Unknown.ToString();
moel@64
    66
      }
moel@76
    67
moel@135
    68
      ISuperIO[] superIO;
moel@195
    69
      int p = (int)Environment.OSVersion.Platform;
moel@135
    70
      if ((p == 4) || (p == 128)) {
moel@135
    71
        this.lmSensors = new LMSensors();
moel@135
    72
        superIO = lmSensors.SuperIO;
moel@135
    73
      } else {
moel@135
    74
        this.lpcio = new LPCIO();       
moel@135
    75
        superIO = lpcio.SuperIO;
moel@135
    76
      }
moel@135
    77
      
moel@130
    78
      superIOHardware = new IHardware[superIO.Length];
moel@130
    79
      for (int i = 0; i < superIO.Length; i++)
moel@176
    80
        superIOHardware[i] = new SuperIOHardware(this, superIO[i], 
moel@130
    81
          smbios.Board != null ? smbios.Board.Manufacturer : 
moel@165
    82
          Manufacturer.Unknown, smbios.Board != null ? smbios.Board.Model :
moel@165
    83
          Model.Unknown, settings);
moel@64
    84
    }
moel@64
    85
moel@64
    86
    public string Name {
moel@64
    87
      get { return name; } 
moel@64
    88
    }
moel@64
    89
moel@109
    90
    public Identifier Identifier {
moel@109
    91
      get { return new Identifier("mainboard"); }
moel@64
    92
    }
moel@64
    93
moel@165
    94
    public HardwareType HardwareType {
moel@165
    95
      get { return HardwareType.Mainboard; }
moel@64
    96
    }
moel@64
    97
moel@176
    98
    public virtual IHardware Parent {
moel@176
    99
      get { return null; }
moel@176
   100
    }
moel@176
   101
moel@64
   102
    public string GetReport() {
moel@64
   103
      StringBuilder r = new StringBuilder(); 
moel@64
   104
moel@64
   105
      r.AppendLine("Mainboard");
moel@64
   106
      r.AppendLine();           
moel@64
   107
      r.Append(smbios.GetReport());
moel@64
   108
moel@136
   109
      if (lpcio != null)
moel@136
   110
        r.Append(lpcio.GetReport());
moel@67
   111
moel@64
   112
      return r.ToString();
moel@64
   113
    }
moel@64
   114
moel@64
   115
    public void Update() { }
moel@64
   116
moel@135
   117
    public void Close() {
moel@135
   118
      if (lmSensors != null)
moel@135
   119
        lmSensors.Close();
moel@135
   120
    }
moel@64
   121
moel@64
   122
    public IHardware[] SubHardware {
moel@130
   123
      get { return superIOHardware; }
moel@64
   124
    }
moel@64
   125
moel@64
   126
    public ISensor[] Sensors {
moel@64
   127
      get { return new ISensor[0]; }
moel@64
   128
    }
moel@64
   129
moel@64
   130
    #pragma warning disable 67
moel@64
   131
    public event SensorEventHandler SensorAdded;
moel@64
   132
    public event SensorEventHandler SensorRemoved;
moel@64
   133
    #pragma warning restore 67
moel@110
   134
moel@110
   135
    public void Accept(IVisitor visitor) {
moel@167
   136
      if (visitor == null)
moel@167
   137
        throw new ArgumentNullException("visitor");
moel@167
   138
      visitor.VisitHardware(this);
moel@110
   139
    }
moel@110
   140
moel@110
   141
    public void Traverse(IVisitor visitor) {
moel@130
   142
      foreach (IHardware hardware in superIOHardware)
moel@110
   143
        hardware.Accept(visitor);     
moel@110
   144
    }
moel@64
   145
  }
moel@64
   146
}