Hardware/Mainboard/SuperIOHardware.cs
author moel.mich
Thu, 16 Feb 2012 22:10:30 +0000
changeset 341 5172a92c5c20
parent 337 10283dd68bbb
child 344 3145aadca3d2
permissions -rw-r--r--
Added experimental support for ITE IT8771E super I/O chips.
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@332
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2012
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@228
    38
using System;
moel@130
    39
using System.Collections.Generic;
moel@166
    40
using System.Globalization;
moel@228
    41
using System.Threading;
moel@130
    42
using OpenHardwareMonitor.Hardware.LPC;
moel@130
    43
moel@130
    44
namespace OpenHardwareMonitor.Hardware.Mainboard {
moel@165
    45
  internal class SuperIOHardware : Hardware {
moel@130
    46
moel@195
    47
    private readonly Mainboard mainboard;
moel@195
    48
    private readonly ISuperIO superIO;
moel@130
    49
moel@195
    50
    private readonly List<Sensor> voltages = new List<Sensor>();
moel@195
    51
    private readonly List<Sensor> temperatures = new List<Sensor>();
moel@195
    52
    private readonly List<Sensor> fans = new List<Sensor>();
moel@323
    53
    private readonly List<Sensor> controls = new List<Sensor>();
moel@167
    54
moel@228
    55
    private delegate float? ReadValueDelegate(int index);
moel@228
    56
    private delegate void UpdateDelegate();
moel@228
    57
moel@228
    58
    // delegates for mainboard specific sensor reading code
moel@228
    59
    private readonly ReadValueDelegate readVoltage;
moel@228
    60
    private readonly ReadValueDelegate readTemperature;
moel@228
    61
    private readonly ReadValueDelegate readFan;
moel@323
    62
    private readonly ReadValueDelegate readControl;
moel@228
    63
moel@228
    64
    // delegate for post update mainboard specific code
moel@228
    65
    private readonly UpdateDelegate postUpdate;
moel@228
    66
moel@228
    67
    // mainboard specific mutex
moel@228
    68
    private readonly Mutex mutex;
moel@228
    69
moel@176
    70
    public SuperIOHardware(Mainboard mainboard, ISuperIO superIO, 
moel@176
    71
      Manufacturer manufacturer, Model model, ISettings settings) 
moel@275
    72
      : base(ChipName.GetName(superIO.Chip), new Identifier("lpc", 
moel@275
    73
        superIO.Chip.ToString().ToLower(CultureInfo.InvariantCulture)), 
moel@275
    74
        settings)
moel@130
    75
    {
moel@176
    76
      this.mainboard = mainboard;
moel@130
    77
      this.superIO = superIO;
moel@130
    78
moel@228
    79
      this.readVoltage = (index) => superIO.Voltages[index];
moel@228
    80
      this.readTemperature = (index) => superIO.Temperatures[index];
moel@228
    81
      this.readFan = (index) => superIO.Fans[index];
moel@323
    82
      this.readControl = (index) => superIO.Controls[index];
moel@228
    83
moel@228
    84
      this.postUpdate = () => { };
moel@228
    85
moel@130
    86
      List<Voltage> v = new List<Voltage>();
moel@130
    87
      List<Temperature> t = new List<Temperature>();
moel@130
    88
      List<Fan> f = new List<Fan>();
moel@323
    89
      List<Ctrl> c = new List<Ctrl>();
moel@130
    90
moel@130
    91
      switch (superIO.Chip) {
moel@130
    92
        case Chip.IT8712F:
moel@130
    93
        case Chip.IT8716F:
moel@130
    94
        case Chip.IT8718F:
moel@177
    95
        case Chip.IT8720F: 
moel@319
    96
        case Chip.IT8726F:        
moel@130
    97
          switch (manufacturer) {
moel@133
    98
            case Manufacturer.ASUS:
moel@133
    99
              switch (model) {
moel@168
   100
                case Model.Crosshair_III_Formula: // IT8720F
moel@133
   101
                  v.Add(new Voltage("VBat", 8));
moel@133
   102
                  t.Add(new Temperature("CPU", 0));
moel@133
   103
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@133
   104
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@133
   105
                  break;
moel@144
   106
                case Model.M2N_SLI_DELUXE:                
moel@133
   107
                  v.Add(new Voltage("CPU VCore", 0));
moel@133
   108
                  v.Add(new Voltage("+3.3V", 1));
moel@195
   109
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   110
                  v.Add(new Voltage("+12V", 4, 30, 10));
moel@195
   111
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
moel@133
   112
                  v.Add(new Voltage("VBat", 8));
moel@133
   113
                  t.Add(new Temperature("CPU", 0));
moel@133
   114
                  t.Add(new Temperature("Motherboard", 1));
moel@133
   115
                  f.Add(new Fan("CPU Fan", 0));
moel@133
   116
                  f.Add(new Fan("Chassis Fan #1", 1));
moel@133
   117
                  f.Add(new Fan("Power Fan", 2));
moel@133
   118
                  break;
moel@168
   119
                case Model.M4A79XTD_EVO: // IT8720F           
moel@195
   120
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@144
   121
                  v.Add(new Voltage("VBat", 8));
moel@144
   122
                  t.Add(new Temperature("CPU", 0));
moel@144
   123
                  t.Add(new Temperature("Motherboard", 1));
moel@144
   124
                  f.Add(new Fan("CPU Fan", 0));
moel@144
   125
                  f.Add(new Fan("Chassis Fan #1", 1));
moel@144
   126
                  f.Add(new Fan("Chassis Fan #2", 2));
moel@144
   127
                  break;
moel@133
   128
                default:
moel@133
   129
                  v.Add(new Voltage("CPU VCore", 0));
moel@133
   130
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@133
   131
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@133
   132
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@133
   133
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@133
   134
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@133
   135
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@133
   136
                  v.Add(new Voltage("Voltage #8", 7, true));
moel@133
   137
                  v.Add(new Voltage("VBat", 8));
moel@133
   138
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@133
   139
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@133
   140
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@133
   141
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@133
   142
                  break;
moel@133
   143
              }
moel@133
   144
              break;
moel@221
   145
moel@221
   146
            case Manufacturer.ASRock:
moel@221
   147
              switch (model) {
moel@221
   148
                case Model.P55_Deluxe: // IT8720F
moel@228
   149
                  
moel@221
   150
                  v.Add(new Voltage("CPU VCore", 0));
moel@221
   151
                  v.Add(new Voltage("+3.3V", 2));
moel@221
   152
                  v.Add(new Voltage("+12V", 4, 30, 10));
moel@221
   153
                  v.Add(new Voltage("+5V", 5, 6.8f, 10));
moel@221
   154
                  v.Add(new Voltage("VBat", 8));                  
moel@221
   155
                  t.Add(new Temperature("CPU", 0));
moel@221
   156
                  t.Add(new Temperature("Motherboard", 1));
moel@221
   157
                  f.Add(new Fan("CPU Fan", 0));
moel@221
   158
                  f.Add(new Fan("Chassis Fan #1", 1));
moel@228
   159
moel@228
   160
                  // this mutex is also used by the official ASRock tool
moel@228
   161
                  mutex = new Mutex(false, "ASRockOCMark");
moel@228
   162
                  
moel@228
   163
                  bool exclusiveAccess = false;
moel@228
   164
                  try {
moel@228
   165
                    exclusiveAccess = mutex.WaitOne(10, false);
moel@228
   166
                  } catch (AbandonedMutexException) { } 
moel@228
   167
                    catch (InvalidOperationException) { }  
moel@228
   168
moel@228
   169
                  // only read additional fans if we get exclusive access
moel@228
   170
                  if (exclusiveAccess) {
moel@228
   171
moel@228
   172
                    f.Add(new Fan("Chassis Fan #2", 2));
moel@228
   173
                    f.Add(new Fan("Chassis Fan #3", 3));
moel@228
   174
                    f.Add(new Fan("Power Fan", 4));
moel@228
   175
moel@228
   176
                    readFan = (index) => {
moel@228
   177
                      if (index < 2) {
moel@228
   178
                        return superIO.Fans[index];
moel@228
   179
                      } else {
moel@228
   180
                        // get GPIO 80-87
moel@228
   181
                        byte? gpio = superIO.ReadGPIO(7);
moel@228
   182
                        if (!gpio.HasValue)
moel@228
   183
                          return null;
moel@228
   184
moel@228
   185
                        // read the last 3 fans based on GPIO 83-85
moel@228
   186
                        int[] masks = { 0x05, 0x03, 0x06 };
moel@228
   187
                        return (((gpio.Value >> 3) & 0x07) ==
moel@228
   188
                          masks[index - 2]) ? superIO.Fans[2] : null;
moel@228
   189
                      }
moel@228
   190
                    };
moel@228
   191
moel@228
   192
                    int fanIndex = 0;
moel@228
   193
                    postUpdate = () => {
moel@228
   194
                      // get GPIO 80-87
moel@228
   195
                      byte? gpio = superIO.ReadGPIO(7);
moel@228
   196
                      if (!gpio.HasValue)
moel@228
   197
                        return;
moel@228
   198
moel@228
   199
                      // prepare the GPIO 83-85 for the next update
moel@228
   200
                      int[] masks = { 0x05, 0x03, 0x06 };
moel@228
   201
                      superIO.WriteGPIO(7,
moel@228
   202
                        (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3)));
moel@228
   203
                      fanIndex = (fanIndex + 1) % 3;
moel@228
   204
                    };
moel@228
   205
                  }
moel@228
   206
moel@221
   207
                  break;
moel@221
   208
                default:
moel@221
   209
                  v.Add(new Voltage("CPU VCore", 0));
moel@221
   210
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@221
   211
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@221
   212
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@221
   213
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@221
   214
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@221
   215
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@221
   216
                  v.Add(new Voltage("Voltage #8", 7, true));
moel@221
   217
                  v.Add(new Voltage("VBat", 8));
moel@221
   218
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@221
   219
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@221
   220
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@221
   221
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@221
   222
                  break;
moel@221
   223
              };
moel@221
   224
              break;
moel@221
   225
moel@130
   226
            case Manufacturer.DFI:
moel@130
   227
              switch (model) {
moel@168
   228
                case Model.LP_BI_P45_T2RS_Elite: // IT8718F
moel@130
   229
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   230
                  v.Add(new Voltage("FSB VTT", 1));
moel@130
   231
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   232
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   233
                  v.Add(new Voltage("+12V", 4, 30, 10));
moel@130
   234
                  v.Add(new Voltage("NB Core", 5));
moel@130
   235
                  v.Add(new Voltage("VDIMM", 6));
moel@195
   236
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
moel@130
   237
                  v.Add(new Voltage("VBat", 8));
moel@130
   238
                  t.Add(new Temperature("CPU", 0));
moel@130
   239
                  t.Add(new Temperature("System", 1));
moel@130
   240
                  t.Add(new Temperature("Chipset", 2));
moel@130
   241
                  f.Add(new Fan("Fan #1", 0));
moel@130
   242
                  f.Add(new Fan("Fan #2", 1));
moel@130
   243
                  f.Add(new Fan("Fan #3", 2));
moel@130
   244
                  break;
moel@168
   245
                case Model.LP_DK_P55_T3eH9: // IT8720F
moel@130
   246
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   247
                  v.Add(new Voltage("VTT", 1));
moel@130
   248
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   249
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   250
                  v.Add(new Voltage("+12V", 4, 30, 10));
moel@130
   251
                  v.Add(new Voltage("CPU PLL", 5));
moel@130
   252
                  v.Add(new Voltage("DRAM", 6));
moel@195
   253
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
moel@130
   254
                  v.Add(new Voltage("VBat", 8));
moel@130
   255
                  t.Add(new Temperature("Chipset", 0));
moel@130
   256
                  t.Add(new Temperature("CPU PWM", 1));
moel@130
   257
                  t.Add(new Temperature("CPU", 2));
moel@130
   258
                  f.Add(new Fan("Fan #1", 0));
moel@130
   259
                  f.Add(new Fan("Fan #2", 1));
moel@130
   260
                  f.Add(new Fan("Fan #3", 2));
moel@130
   261
                  break;
moel@130
   262
                default:
moel@130
   263
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   264
                  v.Add(new Voltage("VTT", 1, true));
moel@130
   265
                  v.Add(new Voltage("+3.3V", 2, true));
moel@130
   266
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
moel@130
   267
                  v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
moel@130
   268
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   269
                  v.Add(new Voltage("DRAM", 6, true));
moel@130
   270
                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
moel@130
   271
                  v.Add(new Voltage("VBat", 8));
moel@130
   272
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   273
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   274
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   275
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   276
                  break;
moel@130
   277
              }
moel@130
   278
              break;
moel@130
   279
moel@130
   280
            case Manufacturer.Gigabyte:
moel@130
   281
              switch (model) {
moel@168
   282
                case Model._965P_S3: // IT8718F
moel@130
   283
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   284
                  v.Add(new Voltage("DRAM", 1));
moel@130
   285
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   286
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   287
                  v.Add(new Voltage("+12V", 7, 27, 9.1f));
moel@130
   288
                  v.Add(new Voltage("VBat", 8));
moel@130
   289
                  t.Add(new Temperature("System", 0));
moel@130
   290
                  t.Add(new Temperature("CPU", 1));
moel@130
   291
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   292
                  f.Add(new Fan("System Fan", 1));
moel@130
   293
                  break;
moel@168
   294
                case Model.EP45_DS3R: // IT8718F
moel@130
   295
                case Model.EP45_UD3R: 
moel@138
   296
                case Model.X38_DS5:    
moel@130
   297
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   298
                  v.Add(new Voltage("DRAM", 1));
moel@130
   299
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   300
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   301
                  v.Add(new Voltage("+12V", 7, 27, 9.1f));
moel@130
   302
                  v.Add(new Voltage("VBat", 8));
moel@130
   303
                  t.Add(new Temperature("System", 0));
moel@130
   304
                  t.Add(new Temperature("CPU", 1));
moel@130
   305
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   306
                  f.Add(new Fan("System Fan #2", 1));
moel@130
   307
                  f.Add(new Fan("Power Fan", 2));
moel@130
   308
                  f.Add(new Fan("System Fan #1", 3));
moel@130
   309
                  break;
moel@168
   310
                case Model.EX58_EXTREME: // IT8720F 
moel@133
   311
                  v.Add(new Voltage("CPU VCore", 0));
moel@133
   312
                  v.Add(new Voltage("DRAM", 1));
moel@195
   313
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@133
   314
                  v.Add(new Voltage("VBat", 8));
moel@133
   315
                  t.Add(new Temperature("System", 0));
moel@133
   316
                  t.Add(new Temperature("CPU", 1));
moel@138
   317
                  t.Add(new Temperature("Northbridge", 2));
moel@133
   318
                  f.Add(new Fan("CPU Fan", 0));
moel@133
   319
                  f.Add(new Fan("System Fan #2", 1));
moel@133
   320
                  f.Add(new Fan("Power Fan", 2));
moel@133
   321
                  f.Add(new Fan("System Fan #1", 3));
moel@133
   322
                  break;
moel@168
   323
                case Model.P35_DS3: // IT8718F 
moel@168
   324
                case Model.P35_DS3L: // IT8718F
moel@130
   325
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   326
                  v.Add(new Voltage("DRAM", 1));
moel@130
   327
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   328
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   329
                  v.Add(new Voltage("+12V", 7, 27, 9.1f));
moel@130
   330
                  v.Add(new Voltage("VBat", 8));
moel@130
   331
                  t.Add(new Temperature("System", 0));
moel@130
   332
                  t.Add(new Temperature("CPU", 1));
moel@130
   333
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   334
                  f.Add(new Fan("System Fan #1", 1));
moel@130
   335
                  f.Add(new Fan("System Fan #2", 2));
moel@130
   336
                  f.Add(new Fan("Power Fan", 3));
moel@130
   337
                  break;
moel@168
   338
                case Model.P55_UD4: // IT8720F
moel@168
   339
                case Model.P55M_UD4: // IT8720F
moel@148
   340
                  v.Add(new Voltage("CPU VCore", 0));
moel@148
   341
                  v.Add(new Voltage("DRAM", 1));
moel@148
   342
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   343
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   344
                  v.Add(new Voltage("+12V", 5, 27, 9.1f));
moel@148
   345
                  v.Add(new Voltage("VBat", 8));
moel@148
   346
                  t.Add(new Temperature("System", 0));
moel@148
   347
                  t.Add(new Temperature("CPU", 2));
moel@148
   348
                  f.Add(new Fan("CPU Fan", 0));
moel@148
   349
                  f.Add(new Fan("System Fan #2", 1));
moel@148
   350
                  f.Add(new Fan("Power Fan", 2));
moel@148
   351
                  f.Add(new Fan("System Fan #1", 3));
moel@148
   352
                  break;
moel@168
   353
                case Model.GA_MA770T_UD3: // IT8720F
moel@154
   354
                  v.Add(new Voltage("CPU VCore", 0));
moel@154
   355
                  v.Add(new Voltage("DRAM", 1));
moel@154
   356
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   357
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   358
                  v.Add(new Voltage("+12V", 4, 27, 9.1f));
moel@154
   359
                  v.Add(new Voltage("VBat", 8));
moel@154
   360
                  t.Add(new Temperature("System", 0));
moel@154
   361
                  t.Add(new Temperature("CPU", 1));
moel@154
   362
                  f.Add(new Fan("CPU Fan", 0));
moel@154
   363
                  f.Add(new Fan("System Fan #1", 1));
moel@154
   364
                  f.Add(new Fan("System Fan #2", 2));
moel@154
   365
                  f.Add(new Fan("Power Fan", 3));
moel@154
   366
                  break;
moel@168
   367
                case Model.GA_MA785GMT_UD2H: // IT8718F
moel@130
   368
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   369
                  v.Add(new Voltage("DRAM", 1));
moel@130
   370
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   371
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   372
                  v.Add(new Voltage("+12V", 4, 27, 9.1f));
moel@130
   373
                  v.Add(new Voltage("VBat", 8));
moel@130
   374
                  t.Add(new Temperature("System", 0));
moel@130
   375
                  t.Add(new Temperature("CPU", 1));
moel@130
   376
                  f.Add(new Fan("CPU Fan", 0));
moel@130
   377
                  f.Add(new Fan("System Fan", 1));
moel@130
   378
                  f.Add(new Fan("NB Fan", 2));
moel@130
   379
                  break;
moel@168
   380
                case Model.X58A_UD3R: // IT8720F 
moel@138
   381
                  v.Add(new Voltage("CPU VCore", 0));
moel@138
   382
                  v.Add(new Voltage("DRAM", 1));
moel@138
   383
                  v.Add(new Voltage("+3.3V", 2));
moel@195
   384
                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
moel@195
   385
                  v.Add(new Voltage("+12V", 5, 27, 9.1f));
moel@138
   386
                  v.Add(new Voltage("VBat", 8));
moel@138
   387
                  t.Add(new Temperature("System", 0));
moel@138
   388
                  t.Add(new Temperature("CPU", 1));
moel@138
   389
                  t.Add(new Temperature("Northbridge", 2));
moel@138
   390
                  f.Add(new Fan("CPU Fan", 0));
moel@138
   391
                  f.Add(new Fan("System Fan #2", 1));
moel@138
   392
                  f.Add(new Fan("Power Fan", 2));
moel@138
   393
                  f.Add(new Fan("System Fan #1", 3));
moel@138
   394
                  break;
moel@130
   395
                default:
moel@130
   396
                  v.Add(new Voltage("CPU VCore", 0));
moel@130
   397
                  v.Add(new Voltage("DRAM", 1, true));
moel@130
   398
                  v.Add(new Voltage("+3.3V", 2, true));
moel@130
   399
                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
moel@130
   400
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@130
   401
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   402
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@257
   403
                  v.Add(new Voltage("Voltage #8", 7, true));
moel@130
   404
                  v.Add(new Voltage("VBat", 8));
moel@130
   405
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   406
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   407
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   408
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   409
                  break;
moel@130
   410
              }
moel@130
   411
              break;
moel@130
   412
moel@130
   413
            default:
moel@130
   414
              v.Add(new Voltage("CPU VCore", 0));
moel@130
   415
              v.Add(new Voltage("Voltage #2", 1, true));
moel@130
   416
              v.Add(new Voltage("Voltage #3", 2, true));
moel@130
   417
              v.Add(new Voltage("Voltage #4", 3, true));
moel@130
   418
              v.Add(new Voltage("Voltage #5", 4, true));
moel@130
   419
              v.Add(new Voltage("Voltage #6", 5, true));
moel@130
   420
              v.Add(new Voltage("Voltage #7", 6, true));
moel@130
   421
              v.Add(new Voltage("Voltage #8", 7, true));
moel@130
   422
              v.Add(new Voltage("VBat", 8));
moel@130
   423
              for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   424
                t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   425
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   426
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   427
              break;
moel@130
   428
          }
moel@130
   429
          break;
moel@170
   430
moel@170
   431
        case Chip.IT8721F:
moel@277
   432
        case Chip.IT8728F:
moel@341
   433
        case Chip.IT8771E:
moel@319
   434
        case Chip.IT8772E:
moel@177
   435
          switch (manufacturer) {
moel@177
   436
            case Manufacturer.ECS:
moel@177
   437
              switch (model) {
moel@177
   438
                case Model.A890GXM_A: // IT8721F
moel@177
   439
                  v.Add(new Voltage("CPU VCore", 0));
moel@177
   440
                  v.Add(new Voltage("VDIMM", 1));
moel@177
   441
                  v.Add(new Voltage("NB Voltage", 2));
moel@195
   442
                  v.Add(new Voltage("Analog +3.3V", 3, 10, 10));
moel@177
   443
                  // v.Add(new Voltage("VDIMM", 6, true));
moel@195
   444
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
moel@195
   445
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@177
   446
                  t.Add(new Temperature("CPU", 0));
moel@177
   447
                  t.Add(new Temperature("System", 1));
moel@177
   448
                  t.Add(new Temperature("Northbridge", 2));
moel@177
   449
                  f.Add(new Fan("CPU Fan", 0));
moel@177
   450
                  f.Add(new Fan("System Fan", 1));
moel@177
   451
                  f.Add(new Fan("Power Fan", 2));
moel@177
   452
                  break;
moel@177
   453
                default:
moel@177
   454
                  v.Add(new Voltage("Voltage #1", 0, true));
moel@177
   455
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@177
   456
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@177
   457
                  v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
moel@177
   458
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@177
   459
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@177
   460
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@177
   461
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
moel@195
   462
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@177
   463
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@177
   464
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@177
   465
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@177
   466
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@177
   467
                  break;
moel@177
   468
              }
moel@177
   469
              break;
moel@278
   470
            case Manufacturer.Gigabyte:
moel@278
   471
              switch (model) {
moel@290
   472
                case Model.P67A_UD4_B3: // IT8728F
moel@278
   473
                  v.Add(new Voltage("+12V", 0, 100, 10));
moel@278
   474
                  v.Add(new Voltage("+5V", 1, 15, 10));
moel@278
   475
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@278
   476
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@278
   477
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@278
   478
                  v.Add(new Voltage("CPU VCore", 5));
moel@278
   479
                  v.Add(new Voltage("DRAM", 6));
moel@278
   480
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
moel@278
   481
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@278
   482
                  t.Add(new Temperature("System", 0));
moel@278
   483
                  t.Add(new Temperature("CPU", 2));
moel@278
   484
                  f.Add(new Fan("CPU Fan", 0));
moel@278
   485
                  f.Add(new Fan("System Fan #2", 1));
moel@278
   486
                  f.Add(new Fan("Power Fan", 2));
moel@278
   487
                  f.Add(new Fan("System Fan #1", 3));
moel@278
   488
                  break;
moel@290
   489
                case Model.H67A_UD3H_B3: // IT8728F
moel@290
   490
                  v.Add(new Voltage("VTT", 0));
moel@290
   491
                  v.Add(new Voltage("+5V", 1, 15, 10));
moel@290
   492
                  v.Add(new Voltage("+12V", 2, 68, 22));
moel@290
   493
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@290
   494
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@290
   495
                  v.Add(new Voltage("CPU VCore", 5));
moel@290
   496
                  v.Add(new Voltage("DRAM", 6));
moel@290
   497
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
moel@290
   498
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@290
   499
                  t.Add(new Temperature("System", 0));
moel@290
   500
                  t.Add(new Temperature("CPU", 2));
moel@290
   501
                  f.Add(new Fan("CPU Fan", 0));
moel@290
   502
                  f.Add(new Fan("System Fan #1", 1));
moel@290
   503
                  f.Add(new Fan("Power Fan", 2));
moel@290
   504
                  f.Add(new Fan("System Fan #2", 3));
moel@290
   505
                  break;
moel@305
   506
                case Model.Z68X_UD7_B3: // IT8728F
moel@305
   507
                  v.Add(new Voltage("VTT", 0));
moel@307
   508
                  v.Add(new Voltage("+3.3V", 1, 13.3f, 20.5f));
moel@305
   509
                  v.Add(new Voltage("+12V", 2, 68, 22));
moel@307
   510
                  v.Add(new Voltage("+5V", 3, 14.3f, 20));
moel@305
   511
                  v.Add(new Voltage("CPU VCore", 5));
moel@305
   512
                  v.Add(new Voltage("DRAM", 6));
moel@305
   513
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
moel@305
   514
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@305
   515
                  t.Add(new Temperature("System", 0));
moel@305
   516
                  t.Add(new Temperature("CPU", 1));
moel@305
   517
                  t.Add(new Temperature("System 3", 2));
moel@305
   518
                  f.Add(new Fan("CPU Fan", 0));
moel@305
   519
                  f.Add(new Fan("Power Fan", 1));
moel@305
   520
                  f.Add(new Fan("System Fan #1", 2));
moel@305
   521
                  f.Add(new Fan("System Fan #2", 3));
moel@305
   522
                  f.Add(new Fan("System Fan #3", 4));
moel@305
   523
                  break;
moel@278
   524
                default:
moel@278
   525
                  v.Add(new Voltage("Voltage #1", 0, true));
moel@278
   526
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@278
   527
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@278
   528
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@278
   529
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@278
   530
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@278
   531
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@278
   532
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
moel@278
   533
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@278
   534
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@278
   535
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@278
   536
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@278
   537
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@278
   538
                  break;
moel@278
   539
              }
moel@278
   540
              break;
moel@320
   541
            case Manufacturer.Shuttle:
moel@320
   542
              switch (model) {
moel@320
   543
                case Model.FH67: // IT8772E 
moel@320
   544
                  v.Add(new Voltage("CPU VCore", 0));
moel@320
   545
                  v.Add(new Voltage("DRAM", 1));
moel@320
   546
                  v.Add(new Voltage("PCH VCCIO", 2));
moel@320
   547
                  v.Add(new Voltage("CPU VCCIO", 3));
moel@320
   548
                  v.Add(new Voltage("Graphic Voltage", 4));
moel@320
   549
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
moel@320
   550
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@320
   551
                  t.Add(new Temperature("System", 0));
moel@320
   552
                  t.Add(new Temperature("CPU", 1));                  
moel@320
   553
                  f.Add(new Fan("Fan #1", 0));
moel@320
   554
                  f.Add(new Fan("CPU Fan", 1));
moel@320
   555
                  break;
moel@320
   556
                default:
moel@320
   557
                  v.Add(new Voltage("Voltage #1", 0, true));
moel@320
   558
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@320
   559
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@320
   560
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@320
   561
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@320
   562
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@320
   563
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@320
   564
                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
moel@320
   565
                  v.Add(new Voltage("VBat", 8, 10, 10));
moel@320
   566
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@320
   567
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@320
   568
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@320
   569
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@320
   570
                  break;
moel@320
   571
              }
moel@320
   572
              break;
moel@177
   573
            default:
moel@177
   574
              v.Add(new Voltage("Voltage #1", 0, true));
moel@177
   575
              v.Add(new Voltage("Voltage #2", 1, true));
moel@177
   576
              v.Add(new Voltage("Voltage #3", 2, true));
moel@277
   577
              v.Add(new Voltage("Voltage #4", 3, true));
moel@177
   578
              v.Add(new Voltage("Voltage #5", 4, true));
moel@177
   579
              v.Add(new Voltage("Voltage #6", 5, true));
moel@177
   580
              v.Add(new Voltage("Voltage #7", 6, true));
moel@177
   581
              v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
moel@195
   582
              v.Add(new Voltage("VBat", 8, 10, 10));
moel@177
   583
              for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@177
   584
                t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@177
   585
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@177
   586
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@177
   587
              break;
moel@177
   588
          }
moel@170
   589
          break;
moel@130
   590
          
moel@130
   591
        case Chip.F71858:
moel@195
   592
          v.Add(new Voltage("VCC3V", 0, 150, 150));
moel@195
   593
          v.Add(new Voltage("VSB3V", 1, 150, 150));
moel@195
   594
          v.Add(new Voltage("Battery", 2, 150, 150));
moel@130
   595
          for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   596
            t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   597
          for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   598
            f.Add(new Fan("Fan #" + (i + 1), i));
moel@130
   599
          break;
moel@130
   600
        case Chip.F71862: 
moel@130
   601
        case Chip.F71869: 
moel@130
   602
        case Chip.F71882:
moel@296
   603
        case Chip.F71889AD: 
moel@130
   604
        case Chip.F71889ED: 
moel@130
   605
        case Chip.F71889F:
moel@132
   606
          switch (manufacturer) {
moel@132
   607
            case Manufacturer.EVGA:
moel@132
   608
              switch (model) {
moel@168
   609
                case Model.X58_SLI_Classified: // F71882 
moel@195
   610
                  v.Add(new Voltage("VCC3V", 0, 150, 150));
moel@195
   611
                  v.Add(new Voltage("CPU VCore", 1, 47, 100));
moel@195
   612
                  v.Add(new Voltage("DIMM", 2, 47, 100));
moel@195
   613
                  v.Add(new Voltage("CPU VTT", 3, 24, 100));
moel@195
   614
                  v.Add(new Voltage("IOH Vcore", 4, 24, 100));
moel@195
   615
                  v.Add(new Voltage("+5V", 5, 51, 12));
moel@195
   616
                  v.Add(new Voltage("+12V", 6, 56, 6.8f));
moel@195
   617
                  v.Add(new Voltage("3VSB", 7, 150, 150));
moel@195
   618
                  v.Add(new Voltage("VBat", 8, 150, 150));
moel@132
   619
                  t.Add(new Temperature("CPU", 0));
moel@132
   620
                  t.Add(new Temperature("VREG", 1));
moel@132
   621
                  t.Add(new Temperature("System", 2));
moel@132
   622
                  f.Add(new Fan("CPU Fan", 0));
moel@132
   623
                  f.Add(new Fan("Power Fan", 1));
moel@132
   624
                  f.Add(new Fan("Chassis Fan", 2));
moel@132
   625
                  break;
moel@132
   626
                default:
moel@195
   627
                  v.Add(new Voltage("VCC3V", 0, 150, 150));
moel@132
   628
                  v.Add(new Voltage("CPU VCore", 1));
moel@132
   629
                  v.Add(new Voltage("Voltage #3", 2, true));
moel@132
   630
                  v.Add(new Voltage("Voltage #4", 3, true));
moel@132
   631
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@132
   632
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@132
   633
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@195
   634
                  v.Add(new Voltage("VSB3V", 7, 150, 150));
moel@195
   635
                  v.Add(new Voltage("VBat", 8, 150, 150));
moel@132
   636
                  for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@132
   637
                    t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@132
   638
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@132
   639
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@132
   640
                  break;
moel@132
   641
              }
moel@132
   642
              break;
moel@132
   643
            default:
moel@195
   644
              v.Add(new Voltage("VCC3V", 0, 150, 150));
moel@132
   645
              v.Add(new Voltage("CPU VCore", 1));
moel@132
   646
              v.Add(new Voltage("Voltage #3", 2, true));
moel@132
   647
              v.Add(new Voltage("Voltage #4", 3, true));
moel@132
   648
              v.Add(new Voltage("Voltage #5", 4, true));
moel@132
   649
              v.Add(new Voltage("Voltage #6", 5, true));
moel@132
   650
              v.Add(new Voltage("Voltage #7", 6, true));
moel@195
   651
              v.Add(new Voltage("VSB3V", 7, 150, 150));
moel@195
   652
              v.Add(new Voltage("VBat", 8, 150, 150));
moel@132
   653
              for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@132
   654
                t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@132
   655
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@132
   656
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@132
   657
              break;
moel@132
   658
          }
moel@130
   659
          break;
moel@130
   660
moel@220
   661
        case Chip.W83627EHF:
moel@220
   662
          switch (manufacturer) {
moel@220
   663
            case Manufacturer.ASRock:
moel@220
   664
              switch (model) {
moel@220
   665
                case Model.AOD790GX_128M: // W83627EHF
moel@220
   666
                  v.Add(new Voltage("CPU VCore", 0));
moel@220
   667
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@220
   668
                  v.Add(new Voltage("+3.3V", 4, 10, 10));
moel@220
   669
                  v.Add(new Voltage("+5V", 5, 20, 10));
moel@220
   670
                  v.Add(new Voltage("+12V", 6, 28, 5));
moel@220
   671
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@220
   672
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@220
   673
                  t.Add(new Temperature("CPU", 0));
moel@220
   674
                  t.Add(new Temperature("Motherboard", 2));
moel@221
   675
                  f.Add(new Fan("CPU Fan", 0));
moel@221
   676
                  f.Add(new Fan("Chassis Fan", 1));                 
moel@220
   677
                  break;
moel@220
   678
                default:
moel@220
   679
                  v.Add(new Voltage("CPU VCore", 0));
moel@220
   680
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@220
   681
                  v.Add(new Voltage("AVCC", 2, 34, 34));
moel@220
   682
                  v.Add(new Voltage("3VCC", 3, 34, 34));
moel@220
   683
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@220
   684
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@220
   685
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@220
   686
                  v.Add(new Voltage("3VSB", 7, 34, 34));
moel@220
   687
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@220
   688
                  v.Add(new Voltage("Voltage #10", 9, true));
moel@220
   689
                  t.Add(new Temperature("CPU", 0));
moel@220
   690
                  t.Add(new Temperature("Auxiliary", 1));
moel@220
   691
                  t.Add(new Temperature("System", 2));
moel@220
   692
                  f.Add(new Fan("System Fan", 0));
moel@220
   693
                  f.Add(new Fan("CPU Fan", 1));
moel@220
   694
                  f.Add(new Fan("Auxiliary Fan", 2));
moel@220
   695
                  f.Add(new Fan("CPU Fan #2", 3));
moel@220
   696
                  f.Add(new Fan("Auxiliary Fan #2", 4));
moel@220
   697
                  break;
moel@220
   698
              } break;
moel@220
   699
            default:
moel@220
   700
              v.Add(new Voltage("CPU VCore", 0));
moel@220
   701
              v.Add(new Voltage("Voltage #2", 1, true));
moel@220
   702
              v.Add(new Voltage("AVCC", 2, 34, 34));
moel@220
   703
              v.Add(new Voltage("3VCC", 3, 34, 34));
moel@220
   704
              v.Add(new Voltage("Voltage #5", 4, true));
moel@220
   705
              v.Add(new Voltage("Voltage #6", 5, true));
moel@220
   706
              v.Add(new Voltage("Voltage #7", 6, true));
moel@220
   707
              v.Add(new Voltage("3VSB", 7, 34, 34));
moel@220
   708
              v.Add(new Voltage("VBAT", 8, 34, 34));
moel@220
   709
              v.Add(new Voltage("Voltage #10", 9, true));
moel@220
   710
              t.Add(new Temperature("CPU", 0));
moel@220
   711
              t.Add(new Temperature("Auxiliary", 1));
moel@220
   712
              t.Add(new Temperature("System", 2));
moel@220
   713
              f.Add(new Fan("System Fan", 0));
moel@220
   714
              f.Add(new Fan("CPU Fan", 1));
moel@220
   715
              f.Add(new Fan("Auxiliary Fan", 2));
moel@220
   716
              f.Add(new Fan("CPU Fan #2", 3));
moel@220
   717
              f.Add(new Fan("Auxiliary Fan #2", 4));
moel@220
   718
              break;
moel@220
   719
          }
moel@130
   720
          break;
moel@130
   721
        case Chip.W83627DHG: 
moel@130
   722
        case Chip.W83627DHGP:                      
moel@130
   723
        case Chip.W83667HG:
moel@130
   724
        case Chip.W83667HGB:
moel@152
   725
          switch (manufacturer) {
moel@153
   726
            case Manufacturer.ASRock:
moel@153
   727
              switch (model) {
moel@168
   728
                case Model._880GMH_USB3: // W83627DHG-P
moel@153
   729
                  v.Add(new Voltage("CPU VCore", 0));
moel@195
   730
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@195
   731
                  v.Add(new Voltage("+5V", 5, 15, 7.5f));
moel@195
   732
                  v.Add(new Voltage("+12V", 6, 56, 10));
moel@195
   733
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@195
   734
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@153
   735
                  t.Add(new Temperature("CPU", 0));
moel@153
   736
                  t.Add(new Temperature("Motherboard", 2));
moel@153
   737
                  f.Add(new Fan("Chassis Fan", 0));
moel@153
   738
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   739
                  f.Add(new Fan("Power Fan", 2));
moel@153
   740
                  break;
moel@153
   741
                default:
moel@153
   742
                  v.Add(new Voltage("CPU VCore", 0));
moel@153
   743
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@195
   744
                  v.Add(new Voltage("AVCC", 2, 34, 34));
moel@195
   745
                  v.Add(new Voltage("3VCC", 3, 34, 34));
moel@153
   746
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@153
   747
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@153
   748
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@195
   749
                  v.Add(new Voltage("3VSB", 7, 34, 34));
moel@195
   750
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@153
   751
                  t.Add(new Temperature("CPU", 0));
moel@153
   752
                  t.Add(new Temperature("Auxiliary", 1));
moel@153
   753
                  t.Add(new Temperature("System", 2));
moel@153
   754
                  f.Add(new Fan("System Fan", 0));
moel@153
   755
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   756
                  f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   757
                  f.Add(new Fan("CPU Fan #2", 3));
moel@153
   758
                  f.Add(new Fan("Auxiliary Fan #2", 4));
moel@153
   759
                  break;
moel@153
   760
              }
moel@153
   761
              break;
moel@152
   762
            case Manufacturer.ASUS:
moel@152
   763
              switch (model) {
moel@336
   764
                case Model.P6T: // W83667HG
moel@174
   765
                case Model.P6X58D_E: // W83667HG                 
moel@174
   766
                case Model.Rampage_II_GENE: // W83667HG 
moel@152
   767
                  v.Add(new Voltage("CPU VCore", 0));
moel@195
   768
                  v.Add(new Voltage("+12V", 1, 11.5f, 1.91f));
moel@195
   769
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@195
   770
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@195
   771
                  v.Add(new Voltage("+5V", 4, 15, 7.5f));
moel@195
   772
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@195
   773
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@174
   774
                  t.Add(new Temperature("CPU", 0));
moel@174
   775
                  t.Add(new Temperature("Motherboard", 2));
moel@174
   776
                  f.Add(new Fan("Chassis Fan #1", 0));
moel@174
   777
                  f.Add(new Fan("CPU Fan", 1));
moel@174
   778
                  f.Add(new Fan("Power Fan", 2));
moel@174
   779
                  f.Add(new Fan("Chassis Fan #2", 3));
moel@174
   780
                  f.Add(new Fan("Chassis Fan #3", 4));
moel@174
   781
                  break;
moel@174
   782
                case Model.Rampage_Extreme: // W83667HG 
moel@174
   783
                  v.Add(new Voltage("CPU VCore", 0));
moel@195
   784
                  v.Add(new Voltage("+12V", 1, 12, 2));
moel@195
   785
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@195
   786
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@195
   787
                  v.Add(new Voltage("+5V", 4, 15, 7.5f));
moel@195
   788
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@195
   789
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@152
   790
                  t.Add(new Temperature("CPU", 0));
moel@152
   791
                  t.Add(new Temperature("Motherboard", 2));
moel@152
   792
                  f.Add(new Fan("Chassis Fan #1", 0));
moel@153
   793
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   794
                  f.Add(new Fan("Power Fan", 2));
moel@152
   795
                  f.Add(new Fan("Chassis Fan #2", 3));
moel@152
   796
                  f.Add(new Fan("Chassis Fan #3", 4));
moel@152
   797
                  break;
moel@152
   798
                default:
moel@152
   799
                  v.Add(new Voltage("CPU VCore", 0));
moel@152
   800
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@195
   801
                  v.Add(new Voltage("AVCC", 2, 34, 34));
moel@195
   802
                  v.Add(new Voltage("3VCC", 3, 34, 34));
moel@152
   803
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@152
   804
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@152
   805
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@195
   806
                  v.Add(new Voltage("3VSB", 7, 34, 34));
moel@195
   807
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@152
   808
                  t.Add(new Temperature("CPU", 0));
moel@152
   809
                  t.Add(new Temperature("Auxiliary", 1));
moel@152
   810
                  t.Add(new Temperature("System", 2));
moel@153
   811
                  f.Add(new Fan("System Fan", 0));
moel@153
   812
                  f.Add(new Fan("CPU Fan", 1));
moel@153
   813
                  f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   814
                  f.Add(new Fan("CPU Fan #2", 3));
moel@153
   815
                  f.Add(new Fan("Auxiliary Fan #2", 4));
moel@152
   816
                  break;
moel@152
   817
              }
moel@152
   818
              break;
moel@152
   819
            default:
moel@152
   820
              v.Add(new Voltage("CPU VCore", 0));
moel@152
   821
              v.Add(new Voltage("Voltage #2", 1, true));
moel@195
   822
              v.Add(new Voltage("AVCC", 2, 34, 34));
moel@195
   823
              v.Add(new Voltage("3VCC", 3, 34, 34));
moel@152
   824
              v.Add(new Voltage("Voltage #5", 4, true));
moel@152
   825
              v.Add(new Voltage("Voltage #6", 5, true));
moel@152
   826
              v.Add(new Voltage("Voltage #7", 6, true));
moel@195
   827
              v.Add(new Voltage("3VSB", 7, 34, 34));
moel@195
   828
              v.Add(new Voltage("VBAT", 8, 34, 34));
moel@152
   829
              t.Add(new Temperature("CPU", 0));
moel@152
   830
              t.Add(new Temperature("Auxiliary", 1));
moel@152
   831
              t.Add(new Temperature("System", 2));
moel@153
   832
              f.Add(new Fan("System Fan", 0));
moel@153
   833
              f.Add(new Fan("CPU Fan", 1));
moel@153
   834
              f.Add(new Fan("Auxiliary Fan", 2));
moel@153
   835
              f.Add(new Fan("CPU Fan #2", 3));
moel@153
   836
              f.Add(new Fan("Auxiliary Fan #2", 4));
moel@152
   837
              break;
moel@152
   838
          } 
moel@130
   839
          break;
moel@130
   840
        case Chip.W83627HF: 
moel@130
   841
        case Chip.W83627THF: 
moel@130
   842
        case Chip.W83687THF:
moel@130
   843
          v.Add(new Voltage("CPU VCore", 0));
moel@130
   844
          v.Add(new Voltage("Voltage #2", 1, true));
moel@130
   845
          v.Add(new Voltage("Voltage #3", 2, true));
moel@195
   846
          v.Add(new Voltage("AVCC", 3, 34, 51));
moel@130
   847
          v.Add(new Voltage("Voltage #5", 4, true));
moel@195
   848
          v.Add(new Voltage("5VSB", 5, 34, 51));
moel@130
   849
          v.Add(new Voltage("VBAT", 6));
moel@130
   850
          t.Add(new Temperature("CPU", 0));
moel@130
   851
          t.Add(new Temperature("Auxiliary", 1));
moel@130
   852
          t.Add(new Temperature("System", 2));
moel@153
   853
          f.Add(new Fan("System Fan", 0));
moel@153
   854
          f.Add(new Fan("CPU Fan", 1));
moel@153
   855
          f.Add(new Fan("Auxiliary Fan", 2));
moel@130
   856
          break;
moel@245
   857
        case Chip.NCT6771F:
moel@265
   858
        case Chip.NCT6776F:
moel@265
   859
          switch (manufacturer) {
moel@265
   860
            case Manufacturer.ASUS:
moel@265
   861
              switch (model) {
moel@312
   862
                case Model.P8P67: // NCT6776F
moel@311
   863
                case Model.P8P67_EVO: // NCT6776F
moel@265
   864
                case Model.P8P67_PRO: // NCT6776F
moel@265
   865
                  v.Add(new Voltage("CPU VCore", 0));
moel@310
   866
                  v.Add(new Voltage("+12V", 1, 11, 1));
moel@310
   867
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@310
   868
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@310
   869
                  v.Add(new Voltage("+5V", 4, 12, 3));
moel@310
   870
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@265
   871
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@310
   872
                  t.Add(new Temperature("CPU", 0));
moel@276
   873
                  t.Add(new Temperature("Auxiliary", 2));
moel@310
   874
                  t.Add(new Temperature("Motherboard", 3));
moel@310
   875
                  f.Add(new Fan("Chassis Fan #1", 0));
moel@265
   876
                  f.Add(new Fan("CPU Fan", 1));
moel@310
   877
                  f.Add(new Fan("Power Fan", 2));
moel@310
   878
                  f.Add(new Fan("Chassis Fan #2", 3));
moel@323
   879
                  c.Add(new Ctrl("Chassis Fan #2", 0));
moel@323
   880
                  c.Add(new Ctrl("CPU Fan", 1));
moel@323
   881
                  c.Add(new Ctrl("Chassis Fan #1", 2));
moel@265
   882
                  break;
moel@276
   883
                case Model.P8P67_M_PRO: // NCT6776F
moel@276
   884
                  v.Add(new Voltage("CPU VCore", 0));
moel@276
   885
                  v.Add(new Voltage("+12V", 1, 11, 1));
moel@276
   886
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@310
   887
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@276
   888
                  v.Add(new Voltage("+5V", 4, 12, 3));
moel@276
   889
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@276
   890
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@276
   891
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@276
   892
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@276
   893
                  t.Add(new Temperature("CPU", 0));
moel@276
   894
                  t.Add(new Temperature("Motherboard", 3));
moel@276
   895
                  f.Add(new Fan("Chassis Fan #1", 0));
moel@276
   896
                  f.Add(new Fan("CPU Fan", 1));
moel@276
   897
                  f.Add(new Fan("Chassis Fan #2", 2));
moel@276
   898
                  f.Add(new Fan("Power Fan", 3));
moel@276
   899
                  f.Add(new Fan("Auxiliary Fan", 4));
moel@276
   900
                  break;
moel@337
   901
                case Model.P8Z68_V_PRO: // NCT6776F
moel@337
   902
                  v.Add(new Voltage("CPU VCore", 0));
moel@337
   903
                  v.Add(new Voltage("+12V", 1, 11, 1));
moel@337
   904
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@337
   905
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@337
   906
                  v.Add(new Voltage("+5V", 4, 12, 3));
moel@337
   907
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@337
   908
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@337
   909
                  t.Add(new Temperature("CPU", 0));
moel@337
   910
                  t.Add(new Temperature("Auxiliary", 2));
moel@337
   911
                  t.Add(new Temperature("Motherboard", 3));
moel@337
   912
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@337
   913
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@337
   914
                  for (int i = 0; i < superIO.Controls.Length; i++)
moel@337
   915
                    c.Add(new Ctrl("Fan #" + (i + 1), i));
moel@337
   916
                  break;
moel@332
   917
                case Model.P9X79: // NCT6776F
moel@332
   918
                  v.Add(new Voltage("CPU VCore", 0));
moel@332
   919
                  v.Add(new Voltage("+12V", 1, 11, 1));
moel@332
   920
                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
moel@332
   921
                  v.Add(new Voltage("+3.3V", 3, 34, 34));
moel@332
   922
                  v.Add(new Voltage("+5V", 4, 12, 3));
moel@332
   923
                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
moel@332
   924
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@332
   925
                  t.Add(new Temperature("CPU", 0));
moel@332
   926
                  t.Add(new Temperature("Motherboard", 3));
moel@332
   927
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@332
   928
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@332
   929
                  break;
moel@265
   930
                default:
moel@265
   931
                  v.Add(new Voltage("CPU VCore", 0));
moel@265
   932
                  v.Add(new Voltage("Voltage #2", 1, true));
moel@265
   933
                  v.Add(new Voltage("AVCC", 2, 34, 34));
moel@265
   934
                  v.Add(new Voltage("3VCC", 3, 34, 34));
moel@265
   935
                  v.Add(new Voltage("Voltage #5", 4, true));
moel@265
   936
                  v.Add(new Voltage("Voltage #6", 5, true));
moel@265
   937
                  v.Add(new Voltage("Voltage #7", 6, true));
moel@265
   938
                  v.Add(new Voltage("3VSB", 7, 34, 34));
moel@265
   939
                  v.Add(new Voltage("VBAT", 8, 34, 34));
moel@265
   940
                  t.Add(new Temperature("CPU", 0));
moel@276
   941
                  t.Add(new Temperature("CPU", 1));
moel@276
   942
                  t.Add(new Temperature("Auxiliary", 2));
moel@276
   943
                  t.Add(new Temperature("System", 3));
moel@265
   944
                  for (int i = 0; i < superIO.Fans.Length; i++)
moel@265
   945
                    f.Add(new Fan("Fan #" + (i + 1), i));
moel@265
   946
                  break;
moel@265
   947
              }
moel@265
   948
              break;
moel@265
   949
            default:
moel@265
   950
              v.Add(new Voltage("CPU VCore", 0));
moel@265
   951
              v.Add(new Voltage("Voltage #2", 1, true));
moel@265
   952
              v.Add(new Voltage("AVCC", 2, 34, 34));
moel@265
   953
              v.Add(new Voltage("3VCC", 3, 34, 34));
moel@265
   954
              v.Add(new Voltage("Voltage #5", 4, true));
moel@265
   955
              v.Add(new Voltage("Voltage #6", 5, true));
moel@265
   956
              v.Add(new Voltage("Voltage #7", 6, true));
moel@265
   957
              v.Add(new Voltage("3VSB", 7, 34, 34));
moel@265
   958
              v.Add(new Voltage("VBAT", 8, 34, 34));
moel@265
   959
              t.Add(new Temperature("CPU", 0));
moel@276
   960
              t.Add(new Temperature("CPU", 1));
moel@276
   961
              t.Add(new Temperature("Auxiliary", 2));
moel@276
   962
              t.Add(new Temperature("System", 3));
moel@265
   963
              for (int i = 0; i < superIO.Fans.Length; i++)
moel@265
   964
                f.Add(new Fan("Fan #" + (i + 1), i));
moel@265
   965
              break;
moel@265
   966
          }
moel@245
   967
          break;
moel@130
   968
        default:
moel@130
   969
          for (int i = 0; i < superIO.Voltages.Length; i++)
moel@130
   970
            v.Add(new Voltage("Voltage #" + (i + 1), i, true));
moel@130
   971
          for (int i = 0; i < superIO.Temperatures.Length; i++)
moel@130
   972
            t.Add(new Temperature("Temperature #" + (i + 1), i));
moel@130
   973
          for (int i = 0; i < superIO.Fans.Length; i++)
moel@130
   974
            f.Add(new Fan("Fan #" + (i + 1), i));
moel@323
   975
          for (int i = 0; i < superIO.Controls.Length; i++)
moel@323
   976
            c.Add(new Ctrl("Fan Control #" + (i + 1), i));
moel@130
   977
          break;
moel@130
   978
      }
moel@130
   979
moel@195
   980
      const string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
moel@130
   981
      foreach (Voltage voltage in v) 
moel@130
   982
        if (voltage.Index < superIO.Voltages.Length) {
moel@130
   983
          Sensor sensor = new Sensor(voltage.Name, voltage.Index, 
moel@195
   984
            voltage.Hidden, SensorType.Voltage, this, new [] {
moel@130
   985
            new ParameterDescription("Ri [kΩ]", "Input resistance.\n" + 
moel@130
   986
              formula, voltage.Ri),
moel@130
   987
            new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" + 
moel@130
   988
              formula, voltage.Rf),
moel@130
   989
            new ParameterDescription("Vf [V]", "Reference voltage.\n" + 
moel@130
   990
              formula, voltage.Vf)
moel@165
   991
            }, settings);
moel@130
   992
          voltages.Add(sensor);
moel@130
   993
      }
moel@130
   994
moel@130
   995
      foreach (Temperature temperature in t) 
moel@130
   996
        if (temperature.Index < superIO.Temperatures.Length) {
moel@134
   997
        Sensor sensor = new Sensor(temperature.Name, temperature.Index,
moel@195
   998
          SensorType.Temperature, this, new [] {
moel@130
   999
          new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
moel@165
  1000
        }, settings);
moel@130
  1001
        temperatures.Add(sensor);
moel@130
  1002
      }
moel@130
  1003
moel@130
  1004
      foreach (Fan fan in f)
moel@130
  1005
        if (fan.Index < superIO.Fans.Length) {
moel@134
  1006
          Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
moel@165
  1007
            this, settings);
moel@130
  1008
          fans.Add(sensor);
moel@130
  1009
        }
moel@323
  1010
moel@323
  1011
      foreach (Ctrl ctrl in c) {
moel@323
  1012
        int index = ctrl.Index;
moel@323
  1013
        if (index < superIO.Controls.Length) {
moel@323
  1014
          Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control,
moel@323
  1015
            this, settings);
moel@323
  1016
          Control control = new Control(sensor, settings, 0, 100);
moel@323
  1017
          control.ControlModeChanged += (cc) => {
moel@323
  1018
            if (cc.ControlMode == ControlMode.Default) {
moel@323
  1019
              superIO.SetControl(index, null);
moel@323
  1020
            } else {
moel@323
  1021
              superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
moel@323
  1022
            }
moel@323
  1023
          };
moel@323
  1024
          control.SoftwareControlValueChanged += (cc) => {
moel@323
  1025
            if (cc.ControlMode == ControlMode.Software) 
moel@323
  1026
              superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
moel@323
  1027
          };
moel@323
  1028
          if (control.ControlMode == ControlMode.Software) 
moel@323
  1029
            superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55));
moel@323
  1030
          sensor.Control = control;
moel@323
  1031
          controls.Add(sensor);
moel@323
  1032
        }
moel@323
  1033
      }
moel@130
  1034
    }
moel@130
  1035
moel@165
  1036
    public override HardwareType HardwareType {
moel@165
  1037
      get { return HardwareType.SuperIO; }
moel@130
  1038
    }
moel@130
  1039
moel@176
  1040
    public override IHardware Parent {
moel@176
  1041
      get { return mainboard; }
moel@176
  1042
    }
moel@176
  1043
moel@130
  1044
moel@130
  1045
    public override string GetReport() {
moel@130
  1046
      return superIO.GetReport();
moel@130
  1047
    }
moel@130
  1048
moel@130
  1049
    public override void Update() {
moel@130
  1050
      superIO.Update();
moel@130
  1051
moel@130
  1052
      foreach (Sensor sensor in voltages) {
moel@228
  1053
        float? value = readVoltage(sensor.Index);
moel@130
  1054
        if (value.HasValue) {
moel@130
  1055
          sensor.Value = value + (value - sensor.Parameters[2].Value) *
moel@130
  1056
            sensor.Parameters[0].Value / sensor.Parameters[1].Value;
moel@130
  1057
          ActivateSensor(sensor);
moel@130
  1058
        }
moel@130
  1059
      }
moel@130
  1060
moel@130
  1061
      foreach (Sensor sensor in temperatures) {
moel@228
  1062
        float? value = readTemperature(sensor.Index);
moel@130
  1063
        if (value.HasValue) {
moel@130
  1064
          sensor.Value = value + sensor.Parameters[0].Value;
moel@130
  1065
          ActivateSensor(sensor);
moel@130
  1066
        }
moel@130
  1067
      }
moel@130
  1068
moel@130
  1069
      foreach (Sensor sensor in fans) {
moel@228
  1070
        float? value = readFan(sensor.Index);
moel@130
  1071
        if (value.HasValue) {
moel@130
  1072
          sensor.Value = value;
moel@130
  1073
          if (value.Value > 0)
moel@130
  1074
            ActivateSensor(sensor);
moel@130
  1075
        }
moel@130
  1076
      }
moel@228
  1077
moel@323
  1078
      foreach (Sensor sensor in controls) {
moel@323
  1079
        float? value = readControl(sensor.Index);
moel@323
  1080
        if (value.HasValue) {
moel@323
  1081
          sensor.Value = value;
moel@323
  1082
          ActivateSensor(sensor);
moel@323
  1083
        }
moel@323
  1084
      }
moel@323
  1085
moel@228
  1086
      postUpdate();
moel@130
  1087
    }
moel@130
  1088
moel@323
  1089
    public override void Close() {
moel@323
  1090
      foreach (Sensor sensor in controls) {
moel@323
  1091
        // restore all controls back to default
moel@323
  1092
        superIO.SetControl(sensor.Index, null);
moel@323
  1093
      }
moel@323
  1094
      base.Close();
moel@323
  1095
    }
moel@323
  1096
moel@130
  1097
    private class Voltage {
moel@130
  1098
      public readonly string Name;
moel@130
  1099
      public readonly int Index;
moel@130
  1100
      public readonly float Ri;
moel@130
  1101
      public readonly float Rf;
moel@130
  1102
      public readonly float Vf;
moel@130
  1103
      public readonly bool Hidden;
moel@130
  1104
moel@202
  1105
      public Voltage(string name, int index) :
moel@202
  1106
        this(name, index, false) { }
moel@202
  1107
      
moel@130
  1108
      public Voltage(string name, int index, bool hidden) :
moel@130
  1109
        this(name, index, 0, 1, 0, hidden) { }
moel@202
  1110
      
moel@202
  1111
      public Voltage(string name, int index, float ri, float rf) :
moel@202
  1112
        this(name, index, ri, rf, 0, false) { }
moel@202
  1113
      
moel@202
  1114
      // float ri = 0, float rf = 1, float vf = 0, bool hidden = false) 
moel@202
  1115
      
moel@195
  1116
      public Voltage(string name, int index, 
moel@202
  1117
        float ri, float rf, float vf, bool hidden) 
moel@195
  1118
      {
moel@130
  1119
        this.Name = name;
moel@130
  1120
        this.Index = index;
moel@130
  1121
        this.Ri = ri;
moel@130
  1122
        this.Rf = rf;
moel@130
  1123
        this.Vf = vf;
moel@130
  1124
        this.Hidden = hidden;
moel@130
  1125
      }
moel@130
  1126
    }
moel@130
  1127
moel@130
  1128
    private class Temperature {
moel@130
  1129
      public readonly string Name;
moel@130
  1130
      public readonly int Index;
moel@130
  1131
moel@167
  1132
      public Temperature(string name, int index) {
moel@130
  1133
        this.Name = name;
moel@130
  1134
        this.Index = index;
moel@130
  1135
      }
moel@130
  1136
    }
moel@130
  1137
moel@130
  1138
    private class Fan {
moel@130
  1139
      public readonly string Name;
moel@130
  1140
      public readonly int Index;
moel@130
  1141
moel@130
  1142
      public Fan(string name, int index) {
moel@130
  1143
        this.Name = name;
moel@130
  1144
        this.Index = index;
moel@130
  1145
      }
moel@130
  1146
    }
moel@323
  1147
moel@323
  1148
    private class Ctrl {
moel@323
  1149
      public readonly string Name;
moel@323
  1150
      public readonly int Index;
moel@323
  1151
moel@323
  1152
      public Ctrl(string name, int index) {
moel@323
  1153
        this.Name = name;
moel@323
  1154
        this.Index = index;
moel@323
  1155
      }
moel@323
  1156
    }
moel@130
  1157
  }
moel@130
  1158
}