Hardware/Mainboard/SuperIOHardware.cs
author moel.mich
Tue, 07 Sep 2010 17:52:43 +0000
changeset 177 510f27ad65ac
parent 176 c16fd81b520a
child 182 4801e9eaf979
permissions -rw-r--r--
Added a mainboard specific configuration for the ECS A890GXM-A.
moel@135
     1
/*
moel@130
     2
  
moel@130
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@130
     4
moel@130
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@130
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@130
     7
  the License. You may obtain a copy of the License at
moel@130
     8
 
moel@130
     9
  http://www.mozilla.org/MPL/
moel@130
    10
moel@130
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@130
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@130
    13
  for the specific language governing rights and limitations under the License.
moel@130
    14
moel@130
    15
  The Original Code is the Open Hardware Monitor code.
moel@130
    16
moel@130
    17
  The Initial Developer of the Original Code is 
moel@130
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@130
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@130
    20
  the Initial Developer. All Rights Reserved.
moel@130
    21
moel@130
    22
  Contributor(s):
moel@130
    23
moel@130
    24
  Alternatively, the contents of this file may be used under the terms of
moel@130
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@130
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@130
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@130
    28
  of those above. If you wish to allow use of your version of this file only
moel@130
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@130
    30
  use your version of this file under the terms of the MPL, indicate your
moel@130
    31
  decision by deleting the provisions above and replace them with the notice
moel@130
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@130
    33
  the provisions above, a recipient may use your version of this file under
moel@130
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@130
    35
 
moel@130
    36
*/
moel@130
    37
moel@130
    38
using System;
moel@130
    39
using System.Collections.Generic;
moel@166
    40
using System.Globalization;
moel@130
    41
using OpenHardwareMonitor.Hardware.LPC;
moel@130
    42
moel@130
    43
namespace OpenHardwareMonitor.Hardware.Mainboard {
moel@165
    44
  internal class SuperIOHardware : Hardware {
moel@130
    45
moel@176
    46
    private Mainboard mainboard;
moel@130
    47
    private ISuperIO superIO;
moel@167
    48
    private string name;
moel@130
    49
moel@130
    50
    private List<Sensor> voltages = new List<Sensor>();
moel@130
    51
    private List<Sensor> temperatures = new List<Sensor>();
moel@167
    52
    private List<Sensor> fans = new List<Sensor>();
moel@167
    53
moel@130
    54
moel@176
    55
    public SuperIOHardware(Mainboard mainboard, ISuperIO superIO, 
moel@176
    56
      Manufacturer manufacturer, Model model, ISettings settings) 
moel@130
    57
    {
moel@176
    58
      this.mainboard = mainboard;
moel@130
    59
      this.superIO = superIO;
moel@167
    60
      this.name = ChipName.GetName(superIO.Chip);
moel@130
    61
moel@130
    62
      List<Voltage> v = new List<Voltage>();
moel@130
    63
      List<Temperature> t = new List<Temperature>();
moel@130
    64
      List<Fan> f = new List<Fan>();
moel@130
    65
moel@130
    66
      switch (superIO.Chip) {
moel@130
    67
        case Chip.IT8712F:
moel@130
    68
        case Chip.IT8716F:
moel@130
    69
        case Chip.IT8718F:
moel@177
    70
        case Chip.IT8720F: 
moel@130
    71
        case Chip.IT8726F:
moel@130
    72
          switch (manufacturer) {
moel@133
    73
            case Manufacturer.ASUS:
moel@133
    74
              switch (model) {
moel@168
    75
                case Model.Crosshair_III_Formula: // IT8720F
moel@133
    76
                  v.Add(new Voltage("VBat", 8));
moel@133
    77
                  t.Add(new Temperature("CPU", 0));
moel@133
    78
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@133
    79
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@133
    80
                  break;
moel@144
    81
                case Model.M2N_SLI_DELUXE:                
moel@133
    82
                  v.Add(new Voltage("CPU VCore", 0));
moel@133
    83
                  v.Add(new Voltage("+3.3V", 1));
moel@133
    84
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@133
    85
                  v.Add(new Voltage("+12V", 4, 30, 10, 0));
moel@133
    86
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0));
moel@133
    87
                  v.Add(new Voltage("VBat", 8));
moel@133
    88
                  t.Add(new Temperature("CPU", 0));
moel@133
    89
                  t.Add(new Temperature("Motherboard", 1));
moel@133
    90
                  f.Add(new Fan("CPU Fan", 0));
moel@133
    91
                  f.Add(new Fan("Chassis Fan #1", 1));
moel@133
    92
                  f.Add(new Fan("Power Fan", 2));
moel@133
    93
                  break;
moel@168
    94
                case Model.M4A79XTD_EVO: // IT8720F           
moel@144
    95
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@144
    96
                  v.Add(new Voltage("VBat", 8));
moel@144
    97
                  t.Add(new Temperature("CPU", 0));
moel@144
    98
                  t.Add(new Temperature("Motherboard", 1));
moel@144
    99
                  f.Add(new Fan("CPU Fan", 0));
moel@144
   100
                  f.Add(new Fan("Chassis Fan #1", 1));
moel@144
   101
                  f.Add(new Fan("Chassis Fan #2", 2));
moel@144
   102
                  break;
moel@133
   103
                default:
moel@133
   104
                  v.Add(new Voltage("CPU VCore", 0));
moel@133
   105
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@133
   106
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@133
   107
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@133
   108
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@133
   109
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@133
   110
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@133
   111
                  v.Add(new Voltage("Voltage #8", 7, true));
moel@133
   112
                  v.Add(new Voltage("VBat", 8));
moel@133
   113
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@133
   114
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@133
   115
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@133
   116
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@133
   117
                  break;
moel@133
   118
              }
moel@133
   119
              break;
moel@130
   120
            case Manufacturer.DFI:
moel@130
   121
              switch (model) {
moel@168
   122
                case Model.LP_BI_P45_T2RS_Elite: // IT8718F
moel@130
   123
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   124
                  v.Add(new Voltage("FSB VTT", 1));
moel@130
   125
                  v.Add(new Voltage("+3.3V", 2));
moel@130
   126
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@130
   127
                  v.Add(new Voltage("+12V", 4, 30, 10, 0));
moel@130
   128
                  v.Add(new Voltage("NB Core", 5));
moel@130
   129
                  v.Add(new Voltage("VDIMM", 6));
moel@130
   130
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0));
moel@130
   131
                  v.Add(new Voltage("VBat", 8));
moel@130
   132
                  t.Add(new Temperature("CPU", 0));
moel@130
   133
                  t.Add(new Temperature("System", 1));
moel@130
   134
                  t.Add(new Temperature("Chipset", 2));
moel@130
   135
                  f.Add(new Fan("Fan #1", 0));
moel@130
   136
                  f.Add(new Fan("Fan #2", 1));
moel@130
   137
                  f.Add(new Fan("Fan #3", 2));
moel@130
   138
                  break;
moel@168
   139
                case Model.LP_DK_P55_T3eH9: // IT8720F
moel@130
   140
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   141
                  v.Add(new Voltage("VTT", 1));
moel@130
   142
                  v.Add(new Voltage("+3.3V", 2));
moel@130
   143
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@130
   144
                  v.Add(new Voltage("+12V", 4, 30, 10, 0));
moel@130
   145
                  v.Add(new Voltage("CPU PLL", 5));
moel@130
   146
                  v.Add(new Voltage("DRAM", 6));
moel@130
   147
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0));
moel@130
   148
                  v.Add(new Voltage("VBat", 8));
moel@130
   149
                  t.Add(new Temperature("Chipset", 0));
moel@130
   150
                  t.Add(new Temperature("CPU PWM", 1));
moel@130
   151
                  t.Add(new Temperature("CPU", 2));
moel@130
   152
                  f.Add(new Fan("Fan #1", 0));
moel@130
   153
                  f.Add(new Fan("Fan #2", 1));
moel@130
   154
                  f.Add(new Fan("Fan #3", 2));
moel@130
   155
                  break;
moel@130
   156
                default:
moel@130
   157
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   158
                  v.Add(new Voltage("VTT", 1, true));
moel@130
   159
                  v.Add(new Voltage("+3.3V", 2, true));
moel@130
   160
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
moel@130
   161
                  v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
moel@130
   162
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   163
                  v.Add(new Voltage("DRAM", 6, true));
moel@130
   164
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
moel@130
   165
                  v.Add(new Voltage("VBat", 8));
moel@130
   166
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   167
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   168
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   169
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   170
                  break;
moel@130
   171
              }
moel@130
   172
              break;
moel@130
   173
moel@130
   174
            case Manufacturer.Gigabyte:
moel@130
   175
              switch (model) {
moel@168
   176
                case Model._965P_S3: // IT8718F
moel@130
   177
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   178
                  v.Add(new Voltage("DRAM", 1));
moel@130
   179
                  v.Add(new Voltage("+3.3V", 2));
moel@130
   180
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@130
   181
                  v.Add(new Voltage("+12V", 7, 27, 9.1f, 0));
moel@130
   182
                  v.Add(new Voltage("VBat", 8));
moel@130
   183
                  t.Add(new Temperature("System", 0));
moel@130
   184
                  t.Add(new Temperature("CPU", 1));
moel@130
   185
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   186
                  f.Add(new Fan("System Fan", 1));
moel@130
   187
                  break;
moel@168
   188
                case Model.EP45_DS3R: // IT8718F
moel@130
   189
                case Model.EP45_UD3R: 
moel@138
   190
                case Model.X38_DS5:    
moel@130
   191
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   192
                  v.Add(new Voltage("DRAM", 1));
moel@130
   193
                  v.Add(new Voltage("+3.3V", 2));
moel@130
   194
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@130
   195
                  v.Add(new Voltage("+12V", 7, 27, 9.1f, 0));
moel@130
   196
                  v.Add(new Voltage("VBat", 8));
moel@130
   197
                  t.Add(new Temperature("System", 0));
moel@130
   198
                  t.Add(new Temperature("CPU", 1));
moel@130
   199
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   200
                  f.Add(new Fan("System Fan #2", 1));
moel@130
   201
                  f.Add(new Fan("Power Fan", 2));
moel@130
   202
                  f.Add(new Fan("System Fan #1", 3));
moel@130
   203
                  break;
moel@168
   204
                case Model.EX58_EXTREME: // IT8720F 
moel@133
   205
                  v.Add(new Voltage("CPU VCore", 0));
moel@133
   206
                  v.Add(new Voltage("DRAM", 1));
moel@133
   207
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@133
   208
                  v.Add(new Voltage("VBat", 8));
moel@133
   209
                  t.Add(new Temperature("System", 0));
moel@133
   210
                  t.Add(new Temperature("CPU", 1));
moel@138
   211
                  t.Add(new Temperature("Northbridge", 2));
moel@133
   212
                  f.Add(new Fan("CPU Fan", 0));
moel@133
   213
                  f.Add(new Fan("System Fan #2", 1));
moel@133
   214
                  f.Add(new Fan("Power Fan", 2));
moel@133
   215
                  f.Add(new Fan("System Fan #1", 3));
moel@133
   216
                  break;
moel@168
   217
                case Model.P35_DS3: // IT8718F 
moel@168
   218
                case Model.P35_DS3L: // IT8718F
moel@130
   219
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   220
                  v.Add(new Voltage("DRAM", 1));
moel@130
   221
                  v.Add(new Voltage("+3.3V", 2));
moel@130
   222
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@130
   223
                  v.Add(new Voltage("+12V", 7, 27, 9.1f, 0));
moel@130
   224
                  v.Add(new Voltage("VBat", 8));
moel@130
   225
                  t.Add(new Temperature("System", 0));
moel@130
   226
                  t.Add(new Temperature("CPU", 1));
moel@130
   227
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   228
                  f.Add(new Fan("System Fan #1", 1));
moel@130
   229
                  f.Add(new Fan("System Fan #2", 2));
moel@130
   230
                  f.Add(new Fan("Power Fan", 3));
moel@130
   231
                  break;
moel@168
   232
                case Model.P55_UD4: // IT8720F
moel@168
   233
                case Model.P55M_UD4: // IT8720F
moel@148
   234
                  v.Add(new Voltage("CPU VCore", 0));
moel@148
   235
                  v.Add(new Voltage("DRAM", 1));
moel@148
   236
                  v.Add(new Voltage("+3.3V", 2));
moel@148
   237
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@148
   238
                  v.Add(new Voltage("+12V", 5, 27, 9.1f, 0));
moel@148
   239
                  v.Add(new Voltage("VBat", 8));
moel@148
   240
                  t.Add(new Temperature("System", 0));
moel@148
   241
                  t.Add(new Temperature("CPU", 2));
moel@148
   242
                  f.Add(new Fan("CPU Fan", 0));
moel@148
   243
                  f.Add(new Fan("System Fan #2", 1));
moel@148
   244
                  f.Add(new Fan("Power Fan", 2));
moel@148
   245
                  f.Add(new Fan("System Fan #1", 3));
moel@148
   246
                  break;
moel@168
   247
                case Model.GA_MA770T_UD3: // IT8720F
moel@154
   248
                  v.Add(new Voltage("CPU VCore", 0));
moel@154
   249
                  v.Add(new Voltage("DRAM", 1));
moel@154
   250
                  v.Add(new Voltage("+3.3V", 2));
moel@154
   251
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@154
   252
                  v.Add(new Voltage("+12V", 4, 27, 9.1f, 0));
moel@154
   253
                  v.Add(new Voltage("VBat", 8));
moel@154
   254
                  t.Add(new Temperature("System", 0));
moel@154
   255
                  t.Add(new Temperature("CPU", 1));
moel@154
   256
                  f.Add(new Fan("CPU Fan", 0));
moel@154
   257
                  f.Add(new Fan("System Fan #1", 1));
moel@154
   258
                  f.Add(new Fan("System Fan #2", 2));
moel@154
   259
                  f.Add(new Fan("Power Fan", 3));
moel@154
   260
                  break;
moel@168
   261
                case Model.GA_MA785GMT_UD2H: // IT8718F
moel@130
   262
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   263
                  v.Add(new Voltage("DRAM", 1));
moel@130
   264
                  v.Add(new Voltage("+3.3V", 2));
moel@130
   265
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@130
   266
                  v.Add(new Voltage("+12V", 4, 27, 9.1f, 0));
moel@130
   267
                  v.Add(new Voltage("VBat", 8));
moel@130
   268
                  t.Add(new Temperature("System", 0));
moel@130
   269
                  t.Add(new Temperature("CPU", 1));
moel@130
   270
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   271
                  f.Add(new Fan("System Fan", 1));
moel@130
   272
                  f.Add(new Fan("NB Fan", 2));
moel@130
   273
                  break;
moel@168
   274
                case Model.X58A_UD3R: // IT8720F 
moel@138
   275
                  v.Add(new Voltage("CPU VCore", 0));
moel@138
   276
                  v.Add(new Voltage("DRAM", 1));
moel@138
   277
                  v.Add(new Voltage("+3.3V", 2));
moel@138
   278
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0));
moel@138
   279
                  v.Add(new Voltage("+12V", 5, 27, 9.1f, 0));
moel@138
   280
                  v.Add(new Voltage("VBat", 8));
moel@138
   281
                  t.Add(new Temperature("System", 0));
moel@138
   282
                  t.Add(new Temperature("CPU", 1));
moel@138
   283
                  t.Add(new Temperature("Northbridge", 2));
moel@138
   284
                  f.Add(new Fan("CPU Fan", 0));
moel@138
   285
                  f.Add(new Fan("System Fan #2", 1));
moel@138
   286
                  f.Add(new Fan("Power Fan", 2));
moel@138
   287
                  f.Add(new Fan("System Fan #1", 3));
moel@138
   288
                  break;
moel@130
   289
                default:
moel@130
   290
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   291
                  v.Add(new Voltage("DRAM", 1, true));
moel@130
   292
                  v.Add(new Voltage("+3.3V", 2, true));
moel@130
   293
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
moel@130
   294
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@130
   295
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   296
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@130
   297
                  v.Add(new Voltage("+12V", 7, 27, 9.1f, 0, true));
moel@130
   298
                  v.Add(new Voltage("VBat", 8));
moel@130
   299
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   300
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   301
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   302
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   303
                  break;
moel@130
   304
              }
moel@130
   305
              break;
moel@130
   306
moel@130
   307
            default:
moel@130
   308
              v.Add(new Voltage("CPU VCore", 0));
moel@130
   309
              v.Add(new Voltage("Voltage #2", 1, true));
moel@130
   310
              v.Add(new Voltage("Voltage #3", 2, true));
moel@130
   311
              v.Add(new Voltage("Voltage #4", 3, true));
moel@130
   312
              v.Add(new Voltage("Voltage #5", 4, true));
moel@130
   313
              v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   314
              v.Add(new Voltage("Voltage #7", 6, true));
moel@130
   315
              v.Add(new Voltage("Voltage #8", 7, true));
moel@130
   316
              v.Add(new Voltage("VBat", 8));
moel@130
   317
              for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   318
                t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   319
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   320
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   321
              break;
moel@130
   322
          }
moel@130
   323
          break;
moel@170
   324
moel@170
   325
        case Chip.IT8721F:
moel@177
   326
          switch (manufacturer) {
moel@177
   327
            case Manufacturer.ECS:
moel@177
   328
              switch (model) {
moel@177
   329
                case Model.A890GXM_A: // IT8721F
moel@177
   330
                  v.Add(new Voltage("CPU VCore", 0));
moel@177
   331
                  v.Add(new Voltage("VDIMM", 1));
moel@177
   332
                  v.Add(new Voltage("NB Voltage", 2));
moel@177
   333
                  v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0));
moel@177
   334
                  // v.Add(new Voltage("VDIMM", 6, true));
moel@177
   335
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0));
moel@177
   336
                  v.Add(new Voltage("VBat", 8, 10, 10, 0));
moel@177
   337
                  t.Add(new Temperature("CPU", 0));
moel@177
   338
                  t.Add(new Temperature("System", 1));
moel@177
   339
                  t.Add(new Temperature("Northbridge", 2));
moel@177
   340
                  f.Add(new Fan("CPU Fan", 0));
moel@177
   341
                  f.Add(new Fan("System Fan", 1));
moel@177
   342
                  f.Add(new Fan("Power Fan", 2));
moel@177
   343
                  break;
moel@177
   344
                default:
moel@177
   345
                  v.Add(new Voltage("Voltage #1", 0, true));
moel@177
   346
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@177
   347
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@177
   348
                  v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
moel@177
   349
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@177
   350
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@177
   351
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@177
   352
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
moel@177
   353
                  v.Add(new Voltage("VBat", 8, 10, 10, 0));
moel@177
   354
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@177
   355
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@177
   356
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@177
   357
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@177
   358
                  break;
moel@177
   359
              }
moel@177
   360
              break;
moel@177
   361
            default:
moel@177
   362
              v.Add(new Voltage("Voltage #1", 0, true));
moel@177
   363
              v.Add(new Voltage("Voltage #2", 1, true));
moel@177
   364
              v.Add(new Voltage("Voltage #3", 2, true));
moel@177
   365
              v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
moel@177
   366
              v.Add(new Voltage("Voltage #5", 4, true));
moel@177
   367
              v.Add(new Voltage("Voltage #6", 5, true));
moel@177
   368
              v.Add(new Voltage("Voltage #7", 6, true));
moel@177
   369
              v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
moel@177
   370
              v.Add(new Voltage("VBat", 8, 10, 10, 0));
moel@177
   371
              for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@177
   372
                t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@177
   373
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@177
   374
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@177
   375
              break;
moel@177
   376
          }
moel@170
   377
          break;
moel@130
   378
          
moel@130
   379
        case Chip.F71858:
moel@132
   380
          v.Add(new Voltage("VCC3V", 0, 150, 150, 0));
moel@132
   381
          v.Add(new Voltage("VSB3V", 1, 150, 150, 0));
moel@132
   382
          v.Add(new Voltage("Battery", 2, 150, 150, 0));
moel@130
   383
          for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   384
            t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   385
          for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   386
            f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   387
          break;
moel@130
   388
        case Chip.F71862: 
moel@130
   389
        case Chip.F71869: 
moel@130
   390
        case Chip.F71882:
moel@130
   391
        case Chip.F71889ED: 
moel@130
   392
        case Chip.F71889F:
moel@132
   393
          switch (manufacturer) {
moel@132
   394
            case Manufacturer.EVGA:
moel@132
   395
              switch (model) {
moel@168
   396
                case Model.X58_SLI_Classified: // F71882 
moel@132
   397
                  v.Add(new Voltage("VCC3V", 0, 150, 150, 0));
moel@132
   398
                  v.Add(new Voltage("CPU VCore", 1, 47, 100, 0));
moel@132
   399
                  v.Add(new Voltage("DIMM", 2, 47, 100, 0));
moel@132
   400
                  v.Add(new Voltage("CPU VTT", 3, 24, 100, 0));
moel@132
   401
                  v.Add(new Voltage("IOH Vcore", 4, 24, 100, 0));
moel@132
   402
                  v.Add(new Voltage("+5V", 5, 51, 12, 0));
moel@132
   403
                  v.Add(new Voltage("+12V", 6, 56, 6.8f, 0));
moel@132
   404
                  v.Add(new Voltage("3VSB", 7, 150, 150, 0));
moel@132
   405
                  v.Add(new Voltage("VBat", 8, 150, 150, 0));
moel@132
   406
                  t.Add(new Temperature("CPU", 0));
moel@132
   407
                  t.Add(new Temperature("VREG", 1));
moel@132
   408
                  t.Add(new Temperature("System", 2));
moel@132
   409
                  f.Add(new Fan("CPU Fan", 0));
moel@132
   410
                  f.Add(new Fan("Power Fan", 1));
moel@132
   411
                  f.Add(new Fan("Chassis Fan", 2));
moel@132
   412
                  break;
moel@132
   413
                default:
moel@132
   414
                  v.Add(new Voltage("VCC3V", 0, 150, 150, 0));
moel@132
   415
                  v.Add(new Voltage("CPU VCore", 1));
moel@132
   416
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@132
   417
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@132
   418
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@132
   419
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@132
   420
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@132
   421
                  v.Add(new Voltage("VSB3V", 7, 150, 150, 0));
moel@132
   422
                  v.Add(new Voltage("VBat", 8, 150, 150, 0));
moel@132
   423
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@132
   424
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@132
   425
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@132
   426
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@132
   427
                  break;
moel@132
   428
              }
moel@132
   429
              break;
moel@132
   430
            default:
moel@132
   431
              v.Add(new Voltage("VCC3V", 0, 150, 150, 0));
moel@132
   432
              v.Add(new Voltage("CPU VCore", 1));
moel@132
   433
              v.Add(new Voltage("Voltage #3", 2, true));
moel@132
   434
              v.Add(new Voltage("Voltage #4", 3, true));
moel@132
   435
              v.Add(new Voltage("Voltage #5", 4, true));
moel@132
   436
              v.Add(new Voltage("Voltage #6", 5, true));
moel@132
   437
              v.Add(new Voltage("Voltage #7", 6, true));
moel@132
   438
              v.Add(new Voltage("VSB3V", 7, 150, 150, 0));
moel@132
   439
              v.Add(new Voltage("VBat", 8, 150, 150, 0));
moel@132
   440
              for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@132
   441
                t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@132
   442
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@132
   443
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@132
   444
              break;
moel@132
   445
          }
moel@130
   446
          break;
moel@130
   447
moel@130
   448
        case Chip.W83627EHF:          
moel@130
   449
          v.Add(new Voltage("CPU VCore", 0));
moel@130
   450
          v.Add(new Voltage("Voltage #2", 1, true));
moel@130
   451
          v.Add(new Voltage("AVCC", 2, 34, 34, 0));
moel@130
   452
          v.Add(new Voltage("3VCC", 3, 34, 34, 0));
moel@130
   453
          v.Add(new Voltage("Voltage #5", 4, true));
moel@130
   454
          v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   455
          v.Add(new Voltage("Voltage #7", 6, true));
moel@130
   456
          v.Add(new Voltage("3VSB", 7, 34, 34, 0));
moel@130
   457
          v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@130
   458
          v.Add(new Voltage("Voltage #10", 9, true));
moel@130
   459
          t.Add(new Temperature("CPU", 0));
moel@130
   460
          t.Add(new Temperature("Auxiliary", 1));
moel@130
   461
          t.Add(new Temperature("System", 2));
moel@153
   462
          f.Add(new Fan("System Fan", 0));
moel@153
   463
          f.Add(new Fan("CPU Fan", 1));
moel@153
   464
          f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   465
          f.Add(new Fan("CPU Fan #2", 3));
moel@153
   466
          f.Add(new Fan("Auxiliary Fan #2", 4));
moel@130
   467
          break;
moel@130
   468
        case Chip.W83627DHG: 
moel@130
   469
        case Chip.W83627DHGP:                      
moel@130
   470
        case Chip.W83667HG:
moel@130
   471
        case Chip.W83667HGB:
moel@152
   472
          switch (manufacturer) {
moel@153
   473
            case Manufacturer.ASRock:
moel@153
   474
              switch (model) {
moel@168
   475
                case Model._880GMH_USB3: // W83627DHG-P
moel@153
   476
                  v.Add(new Voltage("CPU VCore", 0));
moel@153
   477
                  v.Add(new Voltage("+3.3V", 3, 34, 34, 0));
moel@153
   478
                  v.Add(new Voltage("+5V", 5, 15, 7.5f, 0));
moel@153
   479
                  v.Add(new Voltage("+12V", 6, 56, 10, 0));
moel@153
   480
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34, 0));
moel@153
   481
                  v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@153
   482
                  t.Add(new Temperature("CPU", 0));
moel@153
   483
                  t.Add(new Temperature("Motherboard", 2));
moel@153
   484
                  f.Add(new Fan("Chassis Fan", 0));
moel@153
   485
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   486
                  f.Add(new Fan("Power Fan", 2));
moel@153
   487
                  break;
moel@153
   488
                default:
moel@153
   489
                  v.Add(new Voltage("CPU VCore", 0));
moel@153
   490
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@153
   491
                  v.Add(new Voltage("AVCC", 2, 34, 34, 0));
moel@153
   492
                  v.Add(new Voltage("3VCC", 3, 34, 34, 0));
moel@153
   493
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@153
   494
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@153
   495
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@153
   496
                  v.Add(new Voltage("3VSB", 7, 34, 34, 0));
moel@153
   497
                  v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@153
   498
                  t.Add(new Temperature("CPU", 0));
moel@153
   499
                  t.Add(new Temperature("Auxiliary", 1));
moel@153
   500
                  t.Add(new Temperature("System", 2));
moel@153
   501
                  f.Add(new Fan("System Fan", 0));
moel@153
   502
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   503
                  f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   504
                  f.Add(new Fan("CPU Fan #2", 3));
moel@153
   505
                  f.Add(new Fan("Auxiliary Fan #2", 4));
moel@153
   506
                  break;
moel@153
   507
              }
moel@153
   508
              break;
moel@152
   509
            case Manufacturer.ASUS:
moel@152
   510
              switch (model) {
moel@174
   511
                case Model.P6X58D_E: // W83667HG                 
moel@174
   512
                case Model.Rampage_II_GENE: // W83667HG 
moel@152
   513
                  v.Add(new Voltage("CPU VCore", 0));
moel@152
   514
                  v.Add(new Voltage("+12V", 1, 11.5f, 1.91f, 0));
moel@152
   515
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34, 0));
moel@152
   516
                  v.Add(new Voltage("+3.3V", 3, 34, 34, 0));
moel@153
   517
                  v.Add(new Voltage("+5V", 4, 15, 7.5f, 0));
moel@174
   518
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34, 0));
moel@174
   519
                  v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@174
   520
                  t.Add(new Temperature("CPU", 0));
moel@174
   521
                  t.Add(new Temperature("Motherboard", 2));
moel@174
   522
                  f.Add(new Fan("Chassis Fan #1", 0));
moel@174
   523
                  f.Add(new Fan("CPU Fan", 1));
moel@174
   524
                  f.Add(new Fan("Power Fan", 2));
moel@174
   525
                  f.Add(new Fan("Chassis Fan #2", 3));
moel@174
   526
                  f.Add(new Fan("Chassis Fan #3", 4));
moel@174
   527
                  break;
moel@174
   528
                case Model.Rampage_Extreme: // W83667HG 
moel@174
   529
                  v.Add(new Voltage("CPU VCore", 0));
moel@174
   530
                  v.Add(new Voltage("+12V", 1, 12, 2, 0));
moel@174
   531
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34, 0));
moel@174
   532
                  v.Add(new Voltage("+3.3V", 3, 34, 34, 0));
moel@174
   533
                  v.Add(new Voltage("+5V", 4, 15, 7.5f, 0));
moel@152
   534
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34, 0));
moel@152
   535
                  v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@152
   536
                  t.Add(new Temperature("CPU", 0));
moel@152
   537
                  t.Add(new Temperature("Motherboard", 2));
moel@152
   538
                  f.Add(new Fan("Chassis Fan #1", 0));
moel@153
   539
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   540
                  f.Add(new Fan("Power Fan", 2));
moel@152
   541
                  f.Add(new Fan("Chassis Fan #2", 3));
moel@152
   542
                  f.Add(new Fan("Chassis Fan #3", 4));
moel@152
   543
                  break;
moel@152
   544
                default:
moel@152
   545
                  v.Add(new Voltage("CPU VCore", 0));
moel@152
   546
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@152
   547
                  v.Add(new Voltage("AVCC", 2, 34, 34, 0));
moel@152
   548
                  v.Add(new Voltage("3VCC", 3, 34, 34, 0));
moel@152
   549
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@152
   550
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@152
   551
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@152
   552
                  v.Add(new Voltage("3VSB", 7, 34, 34, 0));
moel@152
   553
                  v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@152
   554
                  t.Add(new Temperature("CPU", 0));
moel@152
   555
                  t.Add(new Temperature("Auxiliary", 1));
moel@152
   556
                  t.Add(new Temperature("System", 2));
moel@153
   557
                  f.Add(new Fan("System Fan", 0));
moel@153
   558
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   559
                  f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   560
                  f.Add(new Fan("CPU Fan #2", 3));
moel@153
   561
                  f.Add(new Fan("Auxiliary Fan #2", 4));
moel@152
   562
                  break;
moel@152
   563
              }
moel@152
   564
              break;
moel@152
   565
            default:
moel@152
   566
              v.Add(new Voltage("CPU VCore", 0));
moel@152
   567
              v.Add(new Voltage("Voltage #2", 1, true));
moel@152
   568
              v.Add(new Voltage("AVCC", 2, 34, 34, 0));
moel@152
   569
              v.Add(new Voltage("3VCC", 3, 34, 34, 0));
moel@152
   570
              v.Add(new Voltage("Voltage #5", 4, true));
moel@152
   571
              v.Add(new Voltage("Voltage #6", 5, true));
moel@152
   572
              v.Add(new Voltage("Voltage #7", 6, true));
moel@152
   573
              v.Add(new Voltage("3VSB", 7, 34, 34, 0));
moel@152
   574
              v.Add(new Voltage("VBAT", 8, 34, 34, 0));
moel@152
   575
              t.Add(new Temperature("CPU", 0));
moel@152
   576
              t.Add(new Temperature("Auxiliary", 1));
moel@152
   577
              t.Add(new Temperature("System", 2));
moel@153
   578
              f.Add(new Fan("System Fan", 0));
moel@153
   579
              f.Add(new Fan("CPU Fan", 1));
moel@153
   580
              f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   581
              f.Add(new Fan("CPU Fan #2", 3));
moel@153
   582
              f.Add(new Fan("Auxiliary Fan #2", 4));
moel@152
   583
              break;
moel@152
   584
          } 
moel@130
   585
          break;
moel@130
   586
        case Chip.W83627HF: 
moel@130
   587
        case Chip.W83627THF: 
moel@130
   588
        case Chip.W83687THF:
moel@130
   589
          v.Add(new Voltage("CPU VCore", 0));
moel@130
   590
          v.Add(new Voltage("Voltage #2", 1, true));
moel@130
   591
          v.Add(new Voltage("Voltage #3", 2, true));
moel@130
   592
          v.Add(new Voltage("AVCC", 3, 34, 51, 0));
moel@130
   593
          v.Add(new Voltage("Voltage #5", 4, true));
moel@130
   594
          v.Add(new Voltage("5VSB", 5, 34, 51, 0));
moel@130
   595
          v.Add(new Voltage("VBAT", 6));
moel@130
   596
          t.Add(new Temperature("CPU", 0));
moel@130
   597
          t.Add(new Temperature("Auxiliary", 1));
moel@130
   598
          t.Add(new Temperature("System", 2));
moel@153
   599
          f.Add(new Fan("System Fan", 0));
moel@153
   600
          f.Add(new Fan("CPU Fan", 1));
moel@153
   601
          f.Add(new Fan("Auxiliary Fan", 2));
moel@130
   602
          break;
moel@130
   603
        default:
moel@130
   604
          for (int i = 0; i < superIO.Voltages.Length; i++)
moel@130
   605
            v.Add(new Voltage("Voltage #" + (i + 1), i, true));
moel@130
   606
          for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   607
            t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   608
          for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   609
            f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   610
          break;
moel@130
   611
      }
moel@130
   612
moel@130
   613
      string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
moel@130
   614
      foreach (Voltage voltage in v) 
moel@130
   615
        if (voltage.Index < superIO.Voltages.Length) {
moel@130
   616
          Sensor sensor = new Sensor(voltage.Name, voltage.Index, 
moel@134
   617
            voltage.Hidden, SensorType.Voltage, this, 
moel@130
   618
            new ParameterDescription[] {
moel@130
   619
            new ParameterDescription("Ri [kΩ]", "Input resistance.\n" + 
moel@130
   620
              formula, voltage.Ri),
moel@130
   621
            new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" + 
moel@130
   622
              formula, voltage.Rf),
moel@130
   623
            new ParameterDescription("Vf [V]", "Reference voltage.\n" + 
moel@130
   624
              formula, voltage.Vf)
moel@165
   625
            }, settings);
moel@130
   626
          voltages.Add(sensor);
moel@130
   627
      }
moel@130
   628
moel@130
   629
      foreach (Temperature temperature in t) 
moel@130
   630
        if (temperature.Index < superIO.Temperatures.Length) {
moel@134
   631
        Sensor sensor = new Sensor(temperature.Name, temperature.Index,
moel@130
   632
          SensorType.Temperature, this, new ParameterDescription[] {
moel@130
   633
          new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
moel@165
   634
        }, settings);
moel@130
   635
        temperatures.Add(sensor);
moel@130
   636
      }
moel@130
   637
moel@130
   638
      foreach (Fan fan in f)
moel@130
   639
        if (fan.Index < superIO.Fans.Length) {
moel@134
   640
          Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
moel@165
   641
            this, settings);
moel@130
   642
          fans.Add(sensor);
moel@130
   643
        }
moel@130
   644
    }
moel@130
   645
moel@130
   646
    public override Identifier Identifier {
moel@166
   647
      get { 
moel@166
   648
        return new Identifier("lpc", 
moel@166
   649
          superIO.Chip.ToString().ToLower(CultureInfo.InvariantCulture)); 
moel@166
   650
      }
moel@130
   651
    }
moel@130
   652
moel@165
   653
    public override HardwareType HardwareType {
moel@165
   654
      get { return HardwareType.SuperIO; }
moel@130
   655
    }
moel@130
   656
moel@176
   657
    public override IHardware Parent {
moel@176
   658
      get { return mainboard; }
moel@176
   659
    }
moel@176
   660
moel@130
   661
    public override string Name {
moel@130
   662
      get { return name; }
moel@130
   663
    }
moel@130
   664
moel@130
   665
    public override string GetReport() {
moel@130
   666
      return superIO.GetReport();
moel@130
   667
    }
moel@130
   668
moel@130
   669
    public override void Update() {
moel@130
   670
      superIO.Update();
moel@130
   671
moel@130
   672
      foreach (Sensor sensor in voltages) {
moel@130
   673
        float? value = superIO.Voltages[sensor.Index];
moel@130
   674
        if (value.HasValue) {
moel@130
   675
          sensor.Value = value + (value - sensor.Parameters[2].Value) *
moel@130
   676
            sensor.Parameters[0].Value / sensor.Parameters[1].Value;
moel@130
   677
          ActivateSensor(sensor);
moel@130
   678
        }
moel@130
   679
      }
moel@130
   680
moel@130
   681
      foreach (Sensor sensor in temperatures) {
moel@130
   682
        float? value = superIO.Temperatures[sensor.Index];
moel@130
   683
        if (value.HasValue) {
moel@130
   684
          sensor.Value = value + sensor.Parameters[0].Value;
moel@130
   685
          ActivateSensor(sensor);
moel@130
   686
        }
moel@130
   687
      }
moel@130
   688
moel@130
   689
      foreach (Sensor sensor in fans) {
moel@130
   690
        float? value = superIO.Fans[sensor.Index];
moel@130
   691
        if (value.HasValue) {
moel@130
   692
          sensor.Value = value;
moel@130
   693
          if (value.Value > 0)
moel@130
   694
            ActivateSensor(sensor);
moel@130
   695
        }
moel@130
   696
      }
moel@130
   697
    }
moel@130
   698
moel@130
   699
    private class Voltage {
moel@130
   700
      public readonly string Name;
moel@130
   701
      public readonly int Index;
moel@130
   702
      public readonly float Ri;
moel@130
   703
      public readonly float Rf;
moel@130
   704
      public readonly float Vf;
moel@130
   705
      public readonly bool Hidden;
moel@130
   706
moel@130
   707
      public Voltage(string name, int index) :
moel@130
   708
        this(name, index, 0, 1, 0, false) { }
moel@130
   709
moel@130
   710
      public Voltage(string name, int index, bool hidden) :
moel@130
   711
        this(name, index, 0, 1, 0, hidden) { }
moel@130
   712
moel@130
   713
      public Voltage(string name, int index, float ri, float rf, float vf) :
moel@130
   714
        this(name, index, ri, rf, vf, false) { }
moel@130
   715
moel@130
   716
      public Voltage(string name, int index, float ri, float rf, float vf,
moel@130
   717
        bool hidden) {
moel@130
   718
        this.Name = name;
moel@130
   719
        this.Index = index;
moel@130
   720
        this.Ri = ri;
moel@130
   721
        this.Rf = rf;
moel@130
   722
        this.Vf = vf;
moel@130
   723
        this.Hidden = hidden;
moel@130
   724
      }
moel@130
   725
    }
moel@130
   726
moel@130
   727
    private class Temperature {
moel@130
   728
      public readonly string Name;
moel@130
   729
      public readonly int Index;
moel@130
   730
moel@167
   731
      public Temperature(string name, int index) {
moel@130
   732
        this.Name = name;
moel@130
   733
        this.Index = index;
moel@130
   734
      }
moel@130
   735
    }
moel@130
   736
moel@130
   737
    private class Fan {
moel@130
   738
      public readonly string Name;
moel@130
   739
      public readonly int Index;
moel@130
   740
moel@130
   741
      public Fan(string name, int index) {
moel@130
   742
        this.Name = name;
moel@130
   743
        this.Index = index;
moel@130
   744
      }
moel@130
   745
    }
moel@130
   746
  }
moel@130
   747
}