Refactored the SuperIOHardware class.
authormoel.mich
Sun, 21 Jul 2013 21:03:31 +0000
changeset 416f117373bd190
parent 415 a67db9051d19
child 417 4865cf06a7fa
Refactored the SuperIOHardware class.
Hardware/Mainboard/SuperIOHardware.cs
Properties/AssemblyVersion.cs
     1.1 --- a/Hardware/Mainboard/SuperIOHardware.cs	Sun Jul 21 21:02:55 2013 +0000
     1.2 +++ b/Hardware/Mainboard/SuperIOHardware.cs	Sun Jul 21 21:03:31 2013 +0000
     1.3 @@ -10,12 +10,11 @@
     1.4  
     1.5  using System;
     1.6  using System.Collections.Generic;
     1.7 -using System.Globalization;
     1.8  using System.Threading;
     1.9  using OpenHardwareMonitor.Hardware.LPC;
    1.10  
    1.11  namespace OpenHardwareMonitor.Hardware.Mainboard {
    1.12 -  internal class SuperIOHardware : Hardware {
    1.13 +  internal sealed class SuperIOHardware : Hardware {
    1.14  
    1.15      private readonly Mainboard mainboard;
    1.16      private readonly ISuperIO superIO;
    1.17 @@ -43,416 +42,248 @@
    1.18      public SuperIOHardware(Mainboard mainboard, ISuperIO superIO, 
    1.19        Manufacturer manufacturer, Model model, ISettings settings) 
    1.20        : base(ChipName.GetName(superIO.Chip), new Identifier("lpc", 
    1.21 -        superIO.Chip.ToString().ToLower(CultureInfo.InvariantCulture)), 
    1.22 -        settings)
    1.23 +        superIO.Chip.ToString().ToLowerInvariant()), settings)
    1.24      {
    1.25        this.mainboard = mainboard;
    1.26        this.superIO = superIO;
    1.27  
    1.28 -      this.readVoltage = (index) => superIO.Voltages[index];
    1.29 -      this.readTemperature = (index) => superIO.Temperatures[index];
    1.30 -      this.readFan = (index) => superIO.Fans[index];
    1.31 -      this.readControl = (index) => superIO.Controls[index];
    1.32 +      IList<Voltage> v;
    1.33 +      IList<Temperature> t;
    1.34 +      IList<Fan> f;
    1.35 +      IList<Ctrl> c;
    1.36 +      GetBoardSpecificConfiguration(superIO, manufacturer, model,
    1.37 +        out v, out t, out f, out c,
    1.38 +        out readVoltage, out readTemperature, out readFan, out readControl,
    1.39 +        out postUpdate, out mutex);
    1.40  
    1.41 -      this.postUpdate = () => { };
    1.42 +      CreateVoltageSensors(superIO, settings, v);
    1.43 +      CreateTemperatureSensors(superIO, settings, t);
    1.44 +      CreateFanSensors(superIO, settings, f);
    1.45 +      CreateControlSensors(superIO, settings, c);
    1.46 +    }
    1.47  
    1.48 -      List<Voltage> v = new List<Voltage>();
    1.49 -      List<Temperature> t = new List<Temperature>();
    1.50 -      List<Fan> f = new List<Fan>();
    1.51 -      List<Ctrl> c = new List<Ctrl>();
    1.52 +    private void CreateControlSensors(ISuperIO superIO, ISettings settings, 
    1.53 +      IList<Ctrl> c) 
    1.54 +    {
    1.55 +      foreach (Ctrl ctrl in c) {
    1.56 +        int index = ctrl.Index;
    1.57 +        if (index < superIO.Controls.Length) {
    1.58 +          Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control,
    1.59 +            this, settings);
    1.60 +          Control control = new Control(sensor, settings, 0, 100);
    1.61 +          control.ControlModeChanged += (cc) => {
    1.62 +            if (cc.ControlMode == ControlMode.Default) {
    1.63 +              superIO.SetControl(index, null);
    1.64 +            } else {
    1.65 +              superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
    1.66 +            }
    1.67 +          };
    1.68 +          control.SoftwareControlValueChanged += (cc) => {
    1.69 +            if (cc.ControlMode == ControlMode.Software)
    1.70 +              superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
    1.71 +          };
    1.72 +          if (control.ControlMode == ControlMode.Software)
    1.73 +            superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55));
    1.74 +          sensor.Control = control;
    1.75 +          controls.Add(sensor);
    1.76 +          ActivateSensor(sensor);
    1.77 +        }
    1.78 +      }
    1.79 +    }
    1.80 +
    1.81 +    private void CreateFanSensors(ISuperIO superIO, ISettings settings, 
    1.82 +      IList<Fan> f) 
    1.83 +    {
    1.84 +      foreach (Fan fan in f) {
    1.85 +        if (fan.Index < superIO.Fans.Length) {
    1.86 +          Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
    1.87 +            this, settings);
    1.88 +          fans.Add(sensor);
    1.89 +        }
    1.90 +      }
    1.91 +    }
    1.92 +
    1.93 +    private void CreateTemperatureSensors(ISuperIO superIO, ISettings settings, 
    1.94 +      IList<Temperature> t) 
    1.95 +    {
    1.96 +      foreach (Temperature temperature in t)
    1.97 +        if (temperature.Index < superIO.Temperatures.Length) {
    1.98 +          Sensor sensor = new Sensor(temperature.Name, temperature.Index,
    1.99 +            SensorType.Temperature, this, new[] {
   1.100 +          new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
   1.101 +        }, settings);
   1.102 +          temperatures.Add(sensor);
   1.103 +        }
   1.104 +    }
   1.105 +
   1.106 +    private void CreateVoltageSensors(ISuperIO superIO, ISettings settings, 
   1.107 +      IList<Voltage> v) 
   1.108 +    {
   1.109 +      const string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
   1.110 +      foreach (Voltage voltage in v)
   1.111 +        if (voltage.Index < superIO.Voltages.Length) {
   1.112 +          Sensor sensor = new Sensor(voltage.Name, voltage.Index,
   1.113 +            voltage.Hidden, SensorType.Voltage, this, new[] {
   1.114 +            new ParameterDescription("Ri [kΩ]", "Input resistance.\n" + 
   1.115 +              formula, voltage.Ri),
   1.116 +            new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" + 
   1.117 +              formula, voltage.Rf),
   1.118 +            new ParameterDescription("Vf [V]", "Reference voltage.\n" + 
   1.119 +              formula, voltage.Vf)
   1.120 +            }, settings);
   1.121 +          voltages.Add(sensor);
   1.122 +        }
   1.123 +    }
   1.124 +
   1.125 +    private static void GetBoardSpecificConfiguration(ISuperIO superIO,
   1.126 +      Manufacturer manufacturer, Model model, out IList<Voltage> v,
   1.127 +      out IList<Temperature> t, out IList<Fan> f, out IList<Ctrl> c,
   1.128 +      out ReadValueDelegate readVoltage,
   1.129 +      out ReadValueDelegate readTemperature,
   1.130 +      out ReadValueDelegate readFan,
   1.131 +      out ReadValueDelegate readControl,
   1.132 +      out UpdateDelegate postUpdate, out Mutex mutex) {
   1.133 +      readVoltage = (index) => superIO.Voltages[index];
   1.134 +      readTemperature = (index) => superIO.Temperatures[index];
   1.135 +      readFan = (index) => superIO.Fans[index];
   1.136 +      readControl = (index) => superIO.Controls[index];
   1.137 +
   1.138 +      postUpdate = () => { };
   1.139 +      mutex = null;
   1.140 +
   1.141 +      v = new List<Voltage>();
   1.142 +      t = new List<Temperature>();
   1.143 +      f = new List<Fan>();
   1.144 +      c = new List<Ctrl>();
   1.145  
   1.146        switch (superIO.Chip) {
   1.147          case Chip.IT8705F:
   1.148          case Chip.IT8712F:
   1.149          case Chip.IT8716F:
   1.150          case Chip.IT8718F:
   1.151 -        case Chip.IT8720F: 
   1.152 -        case Chip.IT8726F:        
   1.153 -          switch (manufacturer) {
   1.154 -            case Manufacturer.ASUS:
   1.155 -              switch (model) {
   1.156 -                case Model.Crosshair_III_Formula: // IT8720F
   1.157 -                  v.Add(new Voltage("VBat", 8));
   1.158 -                  t.Add(new Temperature("CPU", 0));
   1.159 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.160 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.161 -                  break;
   1.162 -                case Model.M2N_SLI_DELUXE:                
   1.163 -                  v.Add(new Voltage("CPU VCore", 0));
   1.164 -                  v.Add(new Voltage("+3.3V", 1));
   1.165 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.166 -                  v.Add(new Voltage("+12V", 4, 30, 10));
   1.167 -                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
   1.168 -                  v.Add(new Voltage("VBat", 8));
   1.169 -                  t.Add(new Temperature("CPU", 0));
   1.170 -                  t.Add(new Temperature("Motherboard", 1));
   1.171 -                  f.Add(new Fan("CPU Fan", 0));
   1.172 -                  f.Add(new Fan("Chassis Fan #1", 1));
   1.173 -                  f.Add(new Fan("Power Fan", 2));
   1.174 -                  break;
   1.175 -                case Model.M4A79XTD_EVO: // IT8720F           
   1.176 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.177 -                  v.Add(new Voltage("VBat", 8));
   1.178 -                  t.Add(new Temperature("CPU", 0));
   1.179 -                  t.Add(new Temperature("Motherboard", 1));
   1.180 -                  f.Add(new Fan("CPU Fan", 0));
   1.181 -                  f.Add(new Fan("Chassis Fan #1", 1));
   1.182 -                  f.Add(new Fan("Chassis Fan #2", 2));
   1.183 -                  break;
   1.184 -                default:
   1.185 -                  v.Add(new Voltage("CPU VCore", 0));
   1.186 -                  v.Add(new Voltage("Voltage #2", 1, true));
   1.187 -                  v.Add(new Voltage("Voltage #3", 2, true));
   1.188 -                  v.Add(new Voltage("Voltage #4", 3, true));
   1.189 -                  v.Add(new Voltage("Voltage #5", 4, true));
   1.190 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.191 -                  v.Add(new Voltage("Voltage #7", 6, true));
   1.192 -                  v.Add(new Voltage("Voltage #8", 7, true));
   1.193 -                  v.Add(new Voltage("VBat", 8));
   1.194 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.195 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.196 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.197 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.198 -                  for (int i = 0; i < superIO.Controls.Length; i++)
   1.199 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.200 -                  break;
   1.201 -              }
   1.202 +        case Chip.IT8720F:
   1.203 +        case Chip.IT8726F:
   1.204 +          GetITEConfigurationsA(superIO, manufacturer, model, v, t, f, c,
   1.205 +            ref readFan, ref postUpdate, ref mutex);
   1.206 +          break;
   1.207 +
   1.208 +        case Chip.IT8721F:
   1.209 +        case Chip.IT8728F:
   1.210 +        case Chip.IT8771E:
   1.211 +        case Chip.IT8772E:
   1.212 +          GetITEConfigurationsB(superIO, manufacturer, model, v, t, f, c);
   1.213 +          break;
   1.214 +
   1.215 +        case Chip.F71858:
   1.216 +          v.Add(new Voltage("VCC3V", 0, 150, 150));
   1.217 +          v.Add(new Voltage("VSB3V", 1, 150, 150));
   1.218 +          v.Add(new Voltage("Battery", 2, 150, 150));
   1.219 +          for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.220 +            t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.221 +          for (int i = 0; i < superIO.Fans.Length; i++)
   1.222 +            f.Add(new Fan("Fan #" + (i + 1), i));
   1.223 +          break;
   1.224 +        case Chip.F71862:
   1.225 +        case Chip.F71869:
   1.226 +        case Chip.F71869A:
   1.227 +        case Chip.F71882:
   1.228 +        case Chip.F71889AD:
   1.229 +        case Chip.F71889ED:
   1.230 +        case Chip.F71889F:
   1.231 +        case Chip.F71808E:
   1.232 +          GetFintekConfiguration(superIO, manufacturer, model, v, t, f);
   1.233 +          break;
   1.234 +
   1.235 +        case Chip.W83627EHF:
   1.236 +          GetWinbondConfigurationEHF(manufacturer, model, v, t, f);
   1.237 +          break;
   1.238 +        case Chip.W83627DHG:
   1.239 +        case Chip.W83627DHGP:
   1.240 +        case Chip.W83667HG:
   1.241 +        case Chip.W83667HGB:
   1.242 +          GetWinbondConfigurationHG(manufacturer, model, v, t, f);
   1.243 +          break;
   1.244 +        case Chip.W83627HF:
   1.245 +        case Chip.W83627THF:
   1.246 +        case Chip.W83687THF:
   1.247 +          v.Add(new Voltage("CPU VCore", 0));
   1.248 +          v.Add(new Voltage("Voltage #2", 1, true));
   1.249 +          v.Add(new Voltage("Voltage #3", 2, true));
   1.250 +          v.Add(new Voltage("AVCC", 3, 34, 51));
   1.251 +          v.Add(new Voltage("Voltage #5", 4, true));
   1.252 +          v.Add(new Voltage("5VSB", 5, 34, 51));
   1.253 +          v.Add(new Voltage("VBAT", 6));
   1.254 +          t.Add(new Temperature("CPU", 0));
   1.255 +          t.Add(new Temperature("Auxiliary", 1));
   1.256 +          t.Add(new Temperature("System", 2));
   1.257 +          f.Add(new Fan("System Fan", 0));
   1.258 +          f.Add(new Fan("CPU Fan", 1));
   1.259 +          f.Add(new Fan("Auxiliary Fan", 2));
   1.260 +          break;
   1.261 +        case Chip.NCT6771F:
   1.262 +        case Chip.NCT6776F:
   1.263 +          GetNuvotonConfigurationF(superIO, manufacturer, model, v, t, f, c);
   1.264 +          break;
   1.265 +        case Chip.NCT6779D:
   1.266 +        case Chip.NCT6791D:
   1.267 +          GetNuvotonConfigurationD(superIO, manufacturer, model, v, t, f, c);
   1.268 +          break;
   1.269 +        default:
   1.270 +          GetDefaultConfiguration(superIO, v, t, f, c);
   1.271 +          break;
   1.272 +      }
   1.273 +    }
   1.274 +
   1.275 +    private static void GetDefaultConfiguration(ISuperIO superIO, 
   1.276 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c) 
   1.277 +    {
   1.278 +      for (int i = 0; i < superIO.Voltages.Length; i++)
   1.279 +        v.Add(new Voltage("Voltage #" + (i + 1), i, true));
   1.280 +      for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.281 +        t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.282 +      for (int i = 0; i < superIO.Fans.Length; i++)
   1.283 +        f.Add(new Fan("Fan #" + (i + 1), i));
   1.284 +      for (int i = 0; i < superIO.Controls.Length; i++)
   1.285 +        c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.286 +    }
   1.287 +
   1.288 +    private static void GetITEConfigurationsA(ISuperIO superIO, 
   1.289 +      Manufacturer manufacturer, Model model, 
   1.290 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c, 
   1.291 +      ref ReadValueDelegate readFan, ref UpdateDelegate postUpdate, 
   1.292 +      ref Mutex mutex) 
   1.293 +    {
   1.294 +      switch (manufacturer) {
   1.295 +        case Manufacturer.ASUS:
   1.296 +          switch (model) {
   1.297 +            case Model.Crosshair_III_Formula: // IT8720F
   1.298 +              v.Add(new Voltage("VBat", 8));
   1.299 +              t.Add(new Temperature("CPU", 0));
   1.300 +              for (int i = 0; i < superIO.Fans.Length; i++)
   1.301 +                f.Add(new Fan("Fan #" + (i + 1), i));
   1.302                break;
   1.303 -
   1.304 -            case Manufacturer.ASRock:
   1.305 -              switch (model) {
   1.306 -                case Model.P55_Deluxe: // IT8720F
   1.307 -                  
   1.308 -                  v.Add(new Voltage("CPU VCore", 0));
   1.309 -                  v.Add(new Voltage("+3.3V", 2));
   1.310 -                  v.Add(new Voltage("+12V", 4, 30, 10));
   1.311 -                  v.Add(new Voltage("+5V", 5, 6.8f, 10));
   1.312 -                  v.Add(new Voltage("VBat", 8));                  
   1.313 -                  t.Add(new Temperature("CPU", 0));
   1.314 -                  t.Add(new Temperature("Motherboard", 1));
   1.315 -                  f.Add(new Fan("CPU Fan", 0));
   1.316 -                  f.Add(new Fan("Chassis Fan #1", 1));
   1.317 -
   1.318 -                  // this mutex is also used by the official ASRock tool
   1.319 -                  mutex = new Mutex(false, "ASRockOCMark");
   1.320 -                  
   1.321 -                  bool exclusiveAccess = false;
   1.322 -                  try {
   1.323 -                    exclusiveAccess = mutex.WaitOne(10, false);
   1.324 -                  } catch (AbandonedMutexException) { } 
   1.325 -                    catch (InvalidOperationException) { }  
   1.326 -
   1.327 -                  // only read additional fans if we get exclusive access
   1.328 -                  if (exclusiveAccess) {
   1.329 -
   1.330 -                    f.Add(new Fan("Chassis Fan #2", 2));
   1.331 -                    f.Add(new Fan("Chassis Fan #3", 3));
   1.332 -                    f.Add(new Fan("Power Fan", 4));
   1.333 -
   1.334 -                    readFan = (index) => {
   1.335 -                      if (index < 2) {
   1.336 -                        return superIO.Fans[index];
   1.337 -                      } else {
   1.338 -                        // get GPIO 80-87
   1.339 -                        byte? gpio = superIO.ReadGPIO(7);
   1.340 -                        if (!gpio.HasValue)
   1.341 -                          return null;
   1.342 -
   1.343 -                        // read the last 3 fans based on GPIO 83-85
   1.344 -                        int[] masks = { 0x05, 0x03, 0x06 };
   1.345 -                        return (((gpio.Value >> 3) & 0x07) ==
   1.346 -                          masks[index - 2]) ? superIO.Fans[2] : null;
   1.347 -                      }
   1.348 -                    };
   1.349 -
   1.350 -                    int fanIndex = 0;
   1.351 -                    postUpdate = () => {
   1.352 -                      // get GPIO 80-87
   1.353 -                      byte? gpio = superIO.ReadGPIO(7);
   1.354 -                      if (!gpio.HasValue)
   1.355 -                        return;
   1.356 -
   1.357 -                      // prepare the GPIO 83-85 for the next update
   1.358 -                      int[] masks = { 0x05, 0x03, 0x06 };
   1.359 -                      superIO.WriteGPIO(7,
   1.360 -                        (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3)));
   1.361 -                      fanIndex = (fanIndex + 1) % 3;
   1.362 -                    };
   1.363 -                  }
   1.364 -
   1.365 -                  break;
   1.366 -                default:
   1.367 -                  v.Add(new Voltage("CPU VCore", 0));
   1.368 -                  v.Add(new Voltage("Voltage #2", 1, true));
   1.369 -                  v.Add(new Voltage("Voltage #3", 2, true));
   1.370 -                  v.Add(new Voltage("Voltage #4", 3, true));
   1.371 -                  v.Add(new Voltage("Voltage #5", 4, true));
   1.372 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.373 -                  v.Add(new Voltage("Voltage #7", 6, true));
   1.374 -                  v.Add(new Voltage("Voltage #8", 7, true));
   1.375 -                  v.Add(new Voltage("VBat", 8));
   1.376 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.377 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.378 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.379 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.380 -                  break;
   1.381 -              };
   1.382 +            case Model.M2N_SLI_DELUXE:
   1.383 +              v.Add(new Voltage("CPU VCore", 0));
   1.384 +              v.Add(new Voltage("+3.3V", 1));
   1.385 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.386 +              v.Add(new Voltage("+12V", 4, 30, 10));
   1.387 +              v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
   1.388 +              v.Add(new Voltage("VBat", 8));
   1.389 +              t.Add(new Temperature("CPU", 0));
   1.390 +              t.Add(new Temperature("Motherboard", 1));
   1.391 +              f.Add(new Fan("CPU Fan", 0));
   1.392 +              f.Add(new Fan("Chassis Fan #1", 1));
   1.393 +              f.Add(new Fan("Power Fan", 2));
   1.394                break;
   1.395 -
   1.396 -            case Manufacturer.DFI:
   1.397 -              switch (model) {
   1.398 -                case Model.LP_BI_P45_T2RS_Elite: // IT8718F
   1.399 -                  v.Add(new Voltage("CPU VCore", 0));
   1.400 -                  v.Add(new Voltage("FSB VTT", 1));
   1.401 -                  v.Add(new Voltage("+3.3V", 2));
   1.402 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.403 -                  v.Add(new Voltage("+12V", 4, 30, 10));
   1.404 -                  v.Add(new Voltage("NB Core", 5));
   1.405 -                  v.Add(new Voltage("VDIMM", 6));
   1.406 -                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
   1.407 -                  v.Add(new Voltage("VBat", 8));
   1.408 -                  t.Add(new Temperature("CPU", 0));
   1.409 -                  t.Add(new Temperature("System", 1));
   1.410 -                  t.Add(new Temperature("Chipset", 2));
   1.411 -                  f.Add(new Fan("Fan #1", 0));
   1.412 -                  f.Add(new Fan("Fan #2", 1));
   1.413 -                  f.Add(new Fan("Fan #3", 2));
   1.414 -                  break;
   1.415 -                case Model.LP_DK_P55_T3eH9: // IT8720F
   1.416 -                  v.Add(new Voltage("CPU VCore", 0));
   1.417 -                  v.Add(new Voltage("VTT", 1));
   1.418 -                  v.Add(new Voltage("+3.3V", 2));
   1.419 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.420 -                  v.Add(new Voltage("+12V", 4, 30, 10));
   1.421 -                  v.Add(new Voltage("CPU PLL", 5));
   1.422 -                  v.Add(new Voltage("DRAM", 6));
   1.423 -                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
   1.424 -                  v.Add(new Voltage("VBat", 8));
   1.425 -                  t.Add(new Temperature("Chipset", 0));
   1.426 -                  t.Add(new Temperature("CPU PWM", 1));
   1.427 -                  t.Add(new Temperature("CPU", 2));
   1.428 -                  f.Add(new Fan("Fan #1", 0));
   1.429 -                  f.Add(new Fan("Fan #2", 1));
   1.430 -                  f.Add(new Fan("Fan #3", 2));
   1.431 -                  break;
   1.432 -                default:
   1.433 -                  v.Add(new Voltage("CPU VCore", 0));
   1.434 -                  v.Add(new Voltage("VTT", 1, true));
   1.435 -                  v.Add(new Voltage("+3.3V", 2, true));
   1.436 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
   1.437 -                  v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
   1.438 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.439 -                  v.Add(new Voltage("DRAM", 6, true));
   1.440 -                  v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
   1.441 -                  v.Add(new Voltage("VBat", 8));
   1.442 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.443 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.444 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.445 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.446 -                  for (int i = 0; i < superIO.Controls.Length; i++)
   1.447 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.448 -                  break;
   1.449 -              }
   1.450 +            case Model.M4A79XTD_EVO: // IT8720F           
   1.451 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.452 +              v.Add(new Voltage("VBat", 8));
   1.453 +              t.Add(new Temperature("CPU", 0));
   1.454 +              t.Add(new Temperature("Motherboard", 1));
   1.455 +              f.Add(new Fan("CPU Fan", 0));
   1.456 +              f.Add(new Fan("Chassis Fan #1", 1));
   1.457 +              f.Add(new Fan("Chassis Fan #2", 2));
   1.458                break;
   1.459 -
   1.460 -            case Manufacturer.Gigabyte:
   1.461 -              switch (model) {
   1.462 -                case Model._965P_S3: // IT8718F
   1.463 -                  v.Add(new Voltage("CPU VCore", 0));
   1.464 -                  v.Add(new Voltage("DRAM", 1));
   1.465 -                  v.Add(new Voltage("+3.3V", 2));
   1.466 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.467 -                  v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.468 -                  v.Add(new Voltage("VBat", 8));
   1.469 -                  t.Add(new Temperature("System", 0));
   1.470 -                  t.Add(new Temperature("CPU", 1));
   1.471 -                  f.Add(new Fan("CPU Fan", 0));
   1.472 -                  f.Add(new Fan("System Fan", 1));
   1.473 -                  break;
   1.474 -                case Model.EP45_DS3R: // IT8718F
   1.475 -                case Model.EP45_UD3R: 
   1.476 -                case Model.X38_DS5:    
   1.477 -                  v.Add(new Voltage("CPU VCore", 0));
   1.478 -                  v.Add(new Voltage("DRAM", 1));
   1.479 -                  v.Add(new Voltage("+3.3V", 2));
   1.480 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.481 -                  v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.482 -                  v.Add(new Voltage("VBat", 8));
   1.483 -                  t.Add(new Temperature("System", 0));
   1.484 -                  t.Add(new Temperature("CPU", 1));
   1.485 -                  f.Add(new Fan("CPU Fan", 0));
   1.486 -                  f.Add(new Fan("System Fan #2", 1));
   1.487 -                  f.Add(new Fan("Power Fan", 2));
   1.488 -                  f.Add(new Fan("System Fan #1", 3));
   1.489 -                  break;
   1.490 -                case Model.EX58_EXTREME: // IT8720F                 
   1.491 -                  v.Add(new Voltage("CPU VCore", 0));
   1.492 -                  v.Add(new Voltage("DRAM", 1));
   1.493 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.494 -                  v.Add(new Voltage("VBat", 8));
   1.495 -                  t.Add(new Temperature("System", 0));
   1.496 -                  t.Add(new Temperature("CPU", 1));
   1.497 -                  t.Add(new Temperature("Northbridge", 2));
   1.498 -                  f.Add(new Fan("CPU Fan", 0));
   1.499 -                  f.Add(new Fan("System Fan #2", 1));
   1.500 -                  f.Add(new Fan("Power Fan", 2));
   1.501 -                  f.Add(new Fan("System Fan #1", 3));
   1.502 -                  break;
   1.503 -                case Model.P35_DS3: // IT8718F 
   1.504 -                case Model.P35_DS3L: // IT8718F
   1.505 -                  v.Add(new Voltage("CPU VCore", 0));
   1.506 -                  v.Add(new Voltage("DRAM", 1));
   1.507 -                  v.Add(new Voltage("+3.3V", 2));
   1.508 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.509 -                  v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.510 -                  v.Add(new Voltage("VBat", 8));
   1.511 -                  t.Add(new Temperature("System", 0));
   1.512 -                  t.Add(new Temperature("CPU", 1));
   1.513 -                  f.Add(new Fan("CPU Fan", 0));
   1.514 -                  f.Add(new Fan("System Fan #1", 1));
   1.515 -                  f.Add(new Fan("System Fan #2", 2));
   1.516 -                  f.Add(new Fan("Power Fan", 3));
   1.517 -                  break;
   1.518 -                case Model.P55_UD4: // IT8720F
   1.519 -                case Model.P55A_UD3: // IT8720F
   1.520 -                case Model.P55M_UD4: // IT8720F                
   1.521 -                case Model.H55_USB3: // IT8720F
   1.522 -                case Model.EX58_UD3R: // IT8720F 
   1.523 -                  v.Add(new Voltage("CPU VCore", 0));
   1.524 -                  v.Add(new Voltage("DRAM", 1));
   1.525 -                  v.Add(new Voltage("+3.3V", 2));
   1.526 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.527 -                  v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
   1.528 -                  v.Add(new Voltage("VBat", 8));
   1.529 -                  t.Add(new Temperature("System", 0));
   1.530 -                  t.Add(new Temperature("CPU", 2));
   1.531 -                  f.Add(new Fan("CPU Fan", 0));
   1.532 -                  f.Add(new Fan("System Fan #2", 1));
   1.533 -                  f.Add(new Fan("Power Fan", 2));
   1.534 -                  f.Add(new Fan("System Fan #1", 3));
   1.535 -                  break;
   1.536 -                case Model.H55N_USB3: // IT8720F
   1.537 -                  v.Add(new Voltage("CPU VCore", 0));
   1.538 -                  v.Add(new Voltage("DRAM", 1));
   1.539 -                  v.Add(new Voltage("+3.3V", 2));
   1.540 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.541 -                  v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
   1.542 -                  v.Add(new Voltage("VBat", 8));
   1.543 -                  t.Add(new Temperature("System", 0));
   1.544 -                  t.Add(new Temperature("CPU", 2));
   1.545 -                  f.Add(new Fan("CPU Fan", 0));
   1.546 -                  f.Add(new Fan("System Fan", 1));
   1.547 -                  break;
   1.548 -                case Model.G41M_Combo: // IT8718F
   1.549 -                case Model.G41MT_S2: // IT8718F
   1.550 -                case Model.G41MT_S2P: // IT8718F
   1.551 -                  v.Add(new Voltage("CPU VCore", 0));
   1.552 -                  v.Add(new Voltage("DRAM", 1));
   1.553 -                  v.Add(new Voltage("+3.3V", 2));
   1.554 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.555 -                  v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.556 -                  v.Add(new Voltage("VBat", 8));
   1.557 -                  t.Add(new Temperature("CPU", 2));
   1.558 -                  f.Add(new Fan("CPU Fan", 0));
   1.559 -                  f.Add(new Fan("System Fan", 1));
   1.560 -                  break;
   1.561 -                case Model.GA_970A_UD3: // IT8720F
   1.562 -                  v.Add(new Voltage("CPU VCore", 0));
   1.563 -                  v.Add(new Voltage("DRAM", 1));
   1.564 -                  v.Add(new Voltage("+3.3V", 2));
   1.565 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.566 -                  v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
   1.567 -                  v.Add(new Voltage("VBat", 8));
   1.568 -                  t.Add(new Temperature("System", 0));
   1.569 -                  t.Add(new Temperature("CPU", 1));
   1.570 -                  f.Add(new Fan("CPU Fan", 0));
   1.571 -                  f.Add(new Fan("System Fan #1", 1));
   1.572 -                  f.Add(new Fan("System Fan #2", 2));
   1.573 -                  f.Add(new Fan("Power Fan", 4));
   1.574 -                  c.Add(new Ctrl("PWM 1", 0));
   1.575 -                  c.Add(new Ctrl("PWM 2", 1));
   1.576 -                  c.Add(new Ctrl("PWM 3", 2));
   1.577 -                  break;
   1.578 -                case Model.GA_MA770T_UD3: // IT8720F
   1.579 -                case Model.GA_MA770T_UD3P: // IT8720F                
   1.580 -                case Model.GA_MA790X_UD3P: // IT8720F
   1.581 -                  v.Add(new Voltage("CPU VCore", 0));
   1.582 -                  v.Add(new Voltage("DRAM", 1));
   1.583 -                  v.Add(new Voltage("+3.3V", 2));
   1.584 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.585 -                  v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
   1.586 -                  v.Add(new Voltage("VBat", 8));
   1.587 -                  t.Add(new Temperature("System", 0));
   1.588 -                  t.Add(new Temperature("CPU", 1));
   1.589 -                  f.Add(new Fan("CPU Fan", 0));
   1.590 -                  f.Add(new Fan("System Fan #1", 1));
   1.591 -                  f.Add(new Fan("System Fan #2", 2));
   1.592 -                  f.Add(new Fan("Power Fan", 3));
   1.593 -                  break;
   1.594 -                case Model.GA_MA78LM_S2H: // IT8718F
   1.595 -                  v.Add(new Voltage("CPU VCore", 0));
   1.596 -                  v.Add(new Voltage("DRAM", 1));
   1.597 -                  v.Add(new Voltage("+3.3V", 2));
   1.598 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.599 -                  v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
   1.600 -                  v.Add(new Voltage("VBat", 8));
   1.601 -                  t.Add(new Temperature("System", 0));
   1.602 -                  t.Add(new Temperature("CPU", 1));
   1.603 -                  t.Add(new Temperature("VRM", 2));
   1.604 -                  f.Add(new Fan("CPU Fan", 0));
   1.605 -                  f.Add(new Fan("System Fan #1", 1));
   1.606 -                  f.Add(new Fan("System Fan #2", 2));
   1.607 -                  f.Add(new Fan("Power Fan", 3));
   1.608 -                  break;
   1.609 -                case Model.GA_MA785GM_US2H: // IT8718F
   1.610 -                case Model.GA_MA785GMT_UD2H: // IT8718F
   1.611 -                  v.Add(new Voltage("CPU VCore", 0));
   1.612 -                  v.Add(new Voltage("DRAM", 1));
   1.613 -                  v.Add(new Voltage("+3.3V", 2));
   1.614 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.615 -                  v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
   1.616 -                  v.Add(new Voltage("VBat", 8));
   1.617 -                  t.Add(new Temperature("System", 0));
   1.618 -                  t.Add(new Temperature("CPU", 1));
   1.619 -                  f.Add(new Fan("CPU Fan", 0));
   1.620 -                  f.Add(new Fan("System Fan", 1));
   1.621 -                  f.Add(new Fan("NB Fan", 2));
   1.622 -                  break;
   1.623 -                case Model.X58A_UD3R: // IT8720F 
   1.624 -                  v.Add(new Voltage("CPU VCore", 0));
   1.625 -                  v.Add(new Voltage("DRAM", 1));
   1.626 -                  v.Add(new Voltage("+3.3V", 2));
   1.627 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.628 -                  v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
   1.629 -                  v.Add(new Voltage("VBat", 8));
   1.630 -                  t.Add(new Temperature("System", 0));
   1.631 -                  t.Add(new Temperature("CPU", 1));
   1.632 -                  t.Add(new Temperature("Northbridge", 2));
   1.633 -                  f.Add(new Fan("CPU Fan", 0));
   1.634 -                  f.Add(new Fan("System Fan #2", 1));
   1.635 -                  f.Add(new Fan("Power Fan", 2));
   1.636 -                  f.Add(new Fan("System Fan #1", 3));
   1.637 -                  break;
   1.638 -                default:
   1.639 -                  v.Add(new Voltage("CPU VCore", 0));
   1.640 -                  v.Add(new Voltage("DRAM", 1, true));
   1.641 -                  v.Add(new Voltage("+3.3V", 2, true));
   1.642 -                  v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
   1.643 -                  v.Add(new Voltage("Voltage #5", 4, true));
   1.644 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.645 -                  v.Add(new Voltage("Voltage #7", 6, true));
   1.646 -                  v.Add(new Voltage("Voltage #8", 7, true));
   1.647 -                  v.Add(new Voltage("VBat", 8));
   1.648 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.649 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.650 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.651 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.652 -                  for (int i = 0; i < superIO.Controls.Length; i++)
   1.653 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.654 -                  break;
   1.655 -              }
   1.656 -              break;
   1.657 -
   1.658              default:
   1.659                v.Add(new Voltage("CPU VCore", 0));
   1.660                v.Add(new Voltage("Voltage #2", 1, true));
   1.661 @@ -473,184 +304,492 @@
   1.662            }
   1.663            break;
   1.664  
   1.665 -        case Chip.IT8721F:
   1.666 -        case Chip.IT8728F:
   1.667 -        case Chip.IT8771E:
   1.668 -        case Chip.IT8772E:
   1.669 -          switch (manufacturer) {
   1.670 -            case Manufacturer.ECS:
   1.671 -              switch (model) {
   1.672 -                case Model.A890GXM_A: // IT8721F
   1.673 -                  v.Add(new Voltage("CPU VCore", 0));
   1.674 -                  v.Add(new Voltage("VDIMM", 1));
   1.675 -                  v.Add(new Voltage("NB Voltage", 2));
   1.676 -                  v.Add(new Voltage("Analog +3.3V", 3, 10, 10));
   1.677 -                  // v.Add(new Voltage("VDIMM", 6, true));
   1.678 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.679 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.680 -                  t.Add(new Temperature("CPU", 0));
   1.681 -                  t.Add(new Temperature("System", 1));
   1.682 -                  t.Add(new Temperature("Northbridge", 2));
   1.683 -                  f.Add(new Fan("CPU Fan", 0));
   1.684 -                  f.Add(new Fan("System Fan", 1));
   1.685 -                  f.Add(new Fan("Power Fan", 2));
   1.686 -                  break;
   1.687 -                default:
   1.688 -                  v.Add(new Voltage("Voltage #1", 0, true));
   1.689 -                  v.Add(new Voltage("Voltage #2", 1, true));
   1.690 -                  v.Add(new Voltage("Voltage #3", 2, true));
   1.691 -                  v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
   1.692 -                  v.Add(new Voltage("Voltage #5", 4, true));
   1.693 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.694 -                  v.Add(new Voltage("Voltage #7", 6, true));
   1.695 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
   1.696 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.697 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.698 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.699 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.700 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.701 -                  for (int i = 0; i < superIO.Controls.Length; i++)
   1.702 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.703 -                  break;
   1.704 -              }
   1.705 +        case Manufacturer.ASRock:
   1.706 +          switch (model) {
   1.707 +            case Model.P55_Deluxe: // IT8720F
   1.708 +              GetASRockConfiguration(superIO, v, t, f, 
   1.709 +                ref readFan, ref postUpdate, ref mutex);
   1.710                break;
   1.711 -            case Manufacturer.Gigabyte:
   1.712 -              switch (model) {
   1.713 -                case Model.H61M_DS2_REV_1_2: // IT8728F
   1.714 -                case Model.H61M_USB3_B3_REV_2_0: // IT8728F
   1.715 -                  v.Add(new Voltage("VTT", 0));
   1.716 -                  v.Add(new Voltage("+12V", 2, 30.9f, 10));
   1.717 -                  v.Add(new Voltage("CPU VCore", 5));
   1.718 -                  v.Add(new Voltage("DRAM", 6));
   1.719 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.720 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.721 -                  t.Add(new Temperature("System", 0));
   1.722 -                  t.Add(new Temperature("CPU", 2));
   1.723 -                  f.Add(new Fan("CPU Fan", 0));
   1.724 -                  f.Add(new Fan("System Fan", 1));
   1.725 -                  break;
   1.726 -                case Model.H67A_UD3H_B3: // IT8728F
   1.727 -                case Model.H67A_USB3_B3: // IT8728F                
   1.728 -                  v.Add(new Voltage("VTT", 0));
   1.729 -                  v.Add(new Voltage("+5V", 1, 15, 10));
   1.730 -                  v.Add(new Voltage("+12V", 2, 30.9f, 10));
   1.731 -                  v.Add(new Voltage("CPU VCore", 5));
   1.732 -                  v.Add(new Voltage("DRAM", 6));
   1.733 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.734 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.735 -                  t.Add(new Temperature("System", 0));
   1.736 -                  t.Add(new Temperature("CPU", 2));
   1.737 -                  f.Add(new Fan("CPU Fan", 0));
   1.738 -                  f.Add(new Fan("System Fan #1", 1));
   1.739 -                  f.Add(new Fan("Power Fan", 2));
   1.740 -                  f.Add(new Fan("System Fan #2", 3));
   1.741 -                  break;
   1.742 -                case Model.Z68A_D3H_B3: // IT8728F
   1.743 -                  v.Add(new Voltage("VTT", 0));
   1.744 -                  v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
   1.745 -                  v.Add(new Voltage("+12V", 2, 30.9f, 10));
   1.746 -                  v.Add(new Voltage("+5V", 3, 7.15f, 10));
   1.747 -                  v.Add(new Voltage("CPU VCore", 5));
   1.748 -                  v.Add(new Voltage("DRAM", 6));
   1.749 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.750 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.751 -                  t.Add(new Temperature("System", 0));
   1.752 -                  t.Add(new Temperature("CPU", 2));
   1.753 -                  f.Add(new Fan("CPU Fan", 0));
   1.754 -                  f.Add(new Fan("System Fan #1", 1));
   1.755 -                  f.Add(new Fan("Power Fan", 2));
   1.756 -                  f.Add(new Fan("System Fan #2", 3));
   1.757 -                  break;
   1.758 -                case Model.P67A_UD3_B3: // IT8728F
   1.759 -                case Model.P67A_UD3R_B3: // IT8728F
   1.760 -                case Model.P67A_UD4_B3: // IT8728F                
   1.761 -                case Model.Z68AP_D3: // IT8728F
   1.762 -                case Model.Z68X_UD3H_B3: // IT8728F               
   1.763 -                  v.Add(new Voltage("VTT", 0));
   1.764 -                  v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
   1.765 -                  v.Add(new Voltage("+12V", 2, 30.9f, 10));
   1.766 -                  v.Add(new Voltage("+5V", 3, 7.15f, 10));
   1.767 -                  v.Add(new Voltage("CPU VCore", 5));
   1.768 -                  v.Add(new Voltage("DRAM", 6));
   1.769 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.770 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.771 -                  t.Add(new Temperature("System", 0));
   1.772 -                  t.Add(new Temperature("CPU", 2));
   1.773 -                  f.Add(new Fan("CPU Fan", 0));
   1.774 -                  f.Add(new Fan("System Fan #2", 1));
   1.775 -                  f.Add(new Fan("Power Fan", 2));
   1.776 -                  f.Add(new Fan("System Fan #1", 3));
   1.777 -                  break;                
   1.778 -                case Model.Z68X_UD7_B3: // IT8728F
   1.779 -                  v.Add(new Voltage("VTT", 0));
   1.780 -                  v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
   1.781 -                  v.Add(new Voltage("+12V", 2, 30.9f, 10));
   1.782 -                  v.Add(new Voltage("+5V", 3, 7.15f, 10));
   1.783 -                  v.Add(new Voltage("CPU VCore", 5));
   1.784 -                  v.Add(new Voltage("DRAM", 6));
   1.785 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.786 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.787 -                  t.Add(new Temperature("System", 0));
   1.788 -                  t.Add(new Temperature("CPU", 1));
   1.789 -                  t.Add(new Temperature("System 3", 2));
   1.790 -                  f.Add(new Fan("CPU Fan", 0));
   1.791 -                  f.Add(new Fan("Power Fan", 1));
   1.792 -                  f.Add(new Fan("System Fan #1", 2));
   1.793 -                  f.Add(new Fan("System Fan #2", 3));
   1.794 -                  f.Add(new Fan("System Fan #3", 4));
   1.795 -                  break;
   1.796 -                default:
   1.797 -                  v.Add(new Voltage("Voltage #1", 0, true));
   1.798 -                  v.Add(new Voltage("Voltage #2", 1, true));
   1.799 -                  v.Add(new Voltage("Voltage #3", 2, true));
   1.800 -                  v.Add(new Voltage("Voltage #4", 3, true));
   1.801 -                  v.Add(new Voltage("Voltage #5", 4, true));
   1.802 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.803 -                  v.Add(new Voltage("Voltage #7", 6, true));
   1.804 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
   1.805 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.806 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.807 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.808 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.809 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.810 -                  for (int i = 0; i < superIO.Controls.Length; i++)
   1.811 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.812 -                  break;
   1.813 -              }
   1.814 +            default:
   1.815 +              v.Add(new Voltage("CPU VCore", 0));
   1.816 +              v.Add(new Voltage("Voltage #2", 1, true));
   1.817 +              v.Add(new Voltage("Voltage #3", 2, true));
   1.818 +              v.Add(new Voltage("Voltage #4", 3, true));
   1.819 +              v.Add(new Voltage("Voltage #5", 4, true));
   1.820 +              v.Add(new Voltage("Voltage #6", 5, true));
   1.821 +              v.Add(new Voltage("Voltage #7", 6, true));
   1.822 +              v.Add(new Voltage("Voltage #8", 7, true));
   1.823 +              v.Add(new Voltage("VBat", 8));
   1.824 +              for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.825 +                t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.826 +              for (int i = 0; i < superIO.Fans.Length; i++)
   1.827 +                f.Add(new Fan("Fan #" + (i + 1), i));
   1.828                break;
   1.829 -            case Manufacturer.Shuttle:
   1.830 -              switch (model) {
   1.831 -                case Model.FH67: // IT8772E 
   1.832 -                  v.Add(new Voltage("CPU VCore", 0));
   1.833 -                  v.Add(new Voltage("DRAM", 1));
   1.834 -                  v.Add(new Voltage("PCH VCCIO", 2));
   1.835 -                  v.Add(new Voltage("CPU VCCIO", 3));
   1.836 -                  v.Add(new Voltage("Graphic Voltage", 4));
   1.837 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
   1.838 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.839 -                  t.Add(new Temperature("System", 0));
   1.840 -                  t.Add(new Temperature("CPU", 1));                  
   1.841 -                  f.Add(new Fan("Fan #1", 0));
   1.842 -                  f.Add(new Fan("CPU Fan", 1));
   1.843 -                  break;
   1.844 -                default:
   1.845 -                  v.Add(new Voltage("Voltage #1", 0, true));
   1.846 -                  v.Add(new Voltage("Voltage #2", 1, true));
   1.847 -                  v.Add(new Voltage("Voltage #3", 2, true));
   1.848 -                  v.Add(new Voltage("Voltage #4", 3, true));
   1.849 -                  v.Add(new Voltage("Voltage #5", 4, true));
   1.850 -                  v.Add(new Voltage("Voltage #6", 5, true));
   1.851 -                  v.Add(new Voltage("Voltage #7", 6, true));
   1.852 -                  v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
   1.853 -                  v.Add(new Voltage("VBat", 8, 10, 10));
   1.854 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.855 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.856 -                  for (int i = 0; i < superIO.Fans.Length; i++)
   1.857 -                    f.Add(new Fan("Fan #" + (i + 1), i));
   1.858 -                  for (int i = 0; i < superIO.Controls.Length; i++)
   1.859 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.860 -                  break;
   1.861 -              }
   1.862 +          };
   1.863 +          break;
   1.864 +
   1.865 +        case Manufacturer.DFI:
   1.866 +          switch (model) {
   1.867 +            case Model.LP_BI_P45_T2RS_Elite: // IT8718F
   1.868 +              v.Add(new Voltage("CPU VCore", 0));
   1.869 +              v.Add(new Voltage("FSB VTT", 1));
   1.870 +              v.Add(new Voltage("+3.3V", 2));
   1.871 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.872 +              v.Add(new Voltage("+12V", 4, 30, 10));
   1.873 +              v.Add(new Voltage("NB Core", 5));
   1.874 +              v.Add(new Voltage("VDIMM", 6));
   1.875 +              v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
   1.876 +              v.Add(new Voltage("VBat", 8));
   1.877 +              t.Add(new Temperature("CPU", 0));
   1.878 +              t.Add(new Temperature("System", 1));
   1.879 +              t.Add(new Temperature("Chipset", 2));
   1.880 +              f.Add(new Fan("Fan #1", 0));
   1.881 +              f.Add(new Fan("Fan #2", 1));
   1.882 +              f.Add(new Fan("Fan #3", 2));
   1.883 +              break;
   1.884 +            case Model.LP_DK_P55_T3eH9: // IT8720F
   1.885 +              v.Add(new Voltage("CPU VCore", 0));
   1.886 +              v.Add(new Voltage("VTT", 1));
   1.887 +              v.Add(new Voltage("+3.3V", 2));
   1.888 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.889 +              v.Add(new Voltage("+12V", 4, 30, 10));
   1.890 +              v.Add(new Voltage("CPU PLL", 5));
   1.891 +              v.Add(new Voltage("DRAM", 6));
   1.892 +              v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
   1.893 +              v.Add(new Voltage("VBat", 8));
   1.894 +              t.Add(new Temperature("Chipset", 0));
   1.895 +              t.Add(new Temperature("CPU PWM", 1));
   1.896 +              t.Add(new Temperature("CPU", 2));
   1.897 +              f.Add(new Fan("Fan #1", 0));
   1.898 +              f.Add(new Fan("Fan #2", 1));
   1.899 +              f.Add(new Fan("Fan #3", 2));
   1.900 +              break;
   1.901 +            default:
   1.902 +              v.Add(new Voltage("CPU VCore", 0));
   1.903 +              v.Add(new Voltage("VTT", 1, true));
   1.904 +              v.Add(new Voltage("+3.3V", 2, true));
   1.905 +              v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
   1.906 +              v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
   1.907 +              v.Add(new Voltage("Voltage #6", 5, true));
   1.908 +              v.Add(new Voltage("DRAM", 6, true));
   1.909 +              v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
   1.910 +              v.Add(new Voltage("VBat", 8));
   1.911 +              for (int i = 0; i < superIO.Temperatures.Length; i++)
   1.912 +                t.Add(new Temperature("Temperature #" + (i + 1), i));
   1.913 +              for (int i = 0; i < superIO.Fans.Length; i++)
   1.914 +                f.Add(new Fan("Fan #" + (i + 1), i));
   1.915 +              for (int i = 0; i < superIO.Controls.Length; i++)
   1.916 +                c.Add(new Ctrl("Fan Control #" + (i + 1), i));
   1.917 +              break;
   1.918 +          }
   1.919 +          break;
   1.920 +
   1.921 +        case Manufacturer.Gigabyte:
   1.922 +          switch (model) {
   1.923 +            case Model._965P_S3: // IT8718F
   1.924 +              v.Add(new Voltage("CPU VCore", 0));
   1.925 +              v.Add(new Voltage("DRAM", 1));
   1.926 +              v.Add(new Voltage("+3.3V", 2));
   1.927 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.928 +              v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.929 +              v.Add(new Voltage("VBat", 8));
   1.930 +              t.Add(new Temperature("System", 0));
   1.931 +              t.Add(new Temperature("CPU", 1));
   1.932 +              f.Add(new Fan("CPU Fan", 0));
   1.933 +              f.Add(new Fan("System Fan", 1));
   1.934 +              break;
   1.935 +            case Model.EP45_DS3R: // IT8718F
   1.936 +            case Model.EP45_UD3R:
   1.937 +            case Model.X38_DS5:
   1.938 +              v.Add(new Voltage("CPU VCore", 0));
   1.939 +              v.Add(new Voltage("DRAM", 1));
   1.940 +              v.Add(new Voltage("+3.3V", 2));
   1.941 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.942 +              v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.943 +              v.Add(new Voltage("VBat", 8));
   1.944 +              t.Add(new Temperature("System", 0));
   1.945 +              t.Add(new Temperature("CPU", 1));
   1.946 +              f.Add(new Fan("CPU Fan", 0));
   1.947 +              f.Add(new Fan("System Fan #2", 1));
   1.948 +              f.Add(new Fan("Power Fan", 2));
   1.949 +              f.Add(new Fan("System Fan #1", 3));
   1.950 +              break;
   1.951 +            case Model.EX58_EXTREME: // IT8720F                 
   1.952 +              v.Add(new Voltage("CPU VCore", 0));
   1.953 +              v.Add(new Voltage("DRAM", 1));
   1.954 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.955 +              v.Add(new Voltage("VBat", 8));
   1.956 +              t.Add(new Temperature("System", 0));
   1.957 +              t.Add(new Temperature("CPU", 1));
   1.958 +              t.Add(new Temperature("Northbridge", 2));
   1.959 +              f.Add(new Fan("CPU Fan", 0));
   1.960 +              f.Add(new Fan("System Fan #2", 1));
   1.961 +              f.Add(new Fan("Power Fan", 2));
   1.962 +              f.Add(new Fan("System Fan #1", 3));
   1.963 +              break;
   1.964 +            case Model.P35_DS3: // IT8718F 
   1.965 +            case Model.P35_DS3L: // IT8718F
   1.966 +              v.Add(new Voltage("CPU VCore", 0));
   1.967 +              v.Add(new Voltage("DRAM", 1));
   1.968 +              v.Add(new Voltage("+3.3V", 2));
   1.969 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.970 +              v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
   1.971 +              v.Add(new Voltage("VBat", 8));
   1.972 +              t.Add(new Temperature("System", 0));
   1.973 +              t.Add(new Temperature("CPU", 1));
   1.974 +              f.Add(new Fan("CPU Fan", 0));
   1.975 +              f.Add(new Fan("System Fan #1", 1));
   1.976 +              f.Add(new Fan("System Fan #2", 2));
   1.977 +              f.Add(new Fan("Power Fan", 3));
   1.978 +              break;
   1.979 +            case Model.P55_UD4: // IT8720F
   1.980 +            case Model.P55A_UD3: // IT8720F
   1.981 +            case Model.P55M_UD4: // IT8720F                
   1.982 +            case Model.H55_USB3: // IT8720F
   1.983 +            case Model.EX58_UD3R: // IT8720F 
   1.984 +              v.Add(new Voltage("CPU VCore", 0));
   1.985 +              v.Add(new Voltage("DRAM", 1));
   1.986 +              v.Add(new Voltage("+3.3V", 2));
   1.987 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
   1.988 +              v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
   1.989 +              v.Add(new Voltage("VBat", 8));
   1.990 +              t.Add(new Temperature("System", 0));
   1.991 +              t.Add(new Temperature("CPU", 2));
   1.992 +              f.Add(new Fan("CPU Fan", 0));
   1.993 +              f.Add(new Fan("System Fan #2", 1));
   1.994 +              f.Add(new Fan("Power Fan", 2));
   1.995 +              f.Add(new Fan("System Fan #1", 3));
   1.996 +              break;
   1.997 +            case Model.H55N_USB3: // IT8720F
   1.998 +              v.Add(new Voltage("CPU VCore", 0));
   1.999 +              v.Add(new Voltage("DRAM", 1));
  1.1000 +              v.Add(new Voltage("+3.3V", 2));
  1.1001 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1002 +              v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
  1.1003 +              v.Add(new Voltage("VBat", 8));
  1.1004 +              t.Add(new Temperature("System", 0));
  1.1005 +              t.Add(new Temperature("CPU", 2));
  1.1006 +              f.Add(new Fan("CPU Fan", 0));
  1.1007 +              f.Add(new Fan("System Fan", 1));
  1.1008 +              break;
  1.1009 +            case Model.G41M_Combo: // IT8718F
  1.1010 +            case Model.G41MT_S2: // IT8718F
  1.1011 +            case Model.G41MT_S2P: // IT8718F
  1.1012 +              v.Add(new Voltage("CPU VCore", 0));
  1.1013 +              v.Add(new Voltage("DRAM", 1));
  1.1014 +              v.Add(new Voltage("+3.3V", 2));
  1.1015 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1016 +              v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
  1.1017 +              v.Add(new Voltage("VBat", 8));
  1.1018 +              t.Add(new Temperature("CPU", 2));
  1.1019 +              f.Add(new Fan("CPU Fan", 0));
  1.1020 +              f.Add(new Fan("System Fan", 1));
  1.1021 +              break;
  1.1022 +            case Model.GA_970A_UD3: // IT8720F
  1.1023 +              v.Add(new Voltage("CPU VCore", 0));
  1.1024 +              v.Add(new Voltage("DRAM", 1));
  1.1025 +              v.Add(new Voltage("+3.3V", 2));
  1.1026 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1027 +              v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
  1.1028 +              v.Add(new Voltage("VBat", 8));
  1.1029 +              t.Add(new Temperature("System", 0));
  1.1030 +              t.Add(new Temperature("CPU", 1));
  1.1031 +              f.Add(new Fan("CPU Fan", 0));
  1.1032 +              f.Add(new Fan("System Fan #1", 1));
  1.1033 +              f.Add(new Fan("System Fan #2", 2));
  1.1034 +              f.Add(new Fan("Power Fan", 4));
  1.1035 +              c.Add(new Ctrl("PWM 1", 0));
  1.1036 +              c.Add(new Ctrl("PWM 2", 1));
  1.1037 +              c.Add(new Ctrl("PWM 3", 2));
  1.1038 +              break;
  1.1039 +            case Model.GA_MA770T_UD3: // IT8720F
  1.1040 +            case Model.GA_MA770T_UD3P: // IT8720F                
  1.1041 +            case Model.GA_MA790X_UD3P: // IT8720F
  1.1042 +              v.Add(new Voltage("CPU VCore", 0));
  1.1043 +              v.Add(new Voltage("DRAM", 1));
  1.1044 +              v.Add(new Voltage("+3.3V", 2));
  1.1045 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1046 +              v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
  1.1047 +              v.Add(new Voltage("VBat", 8));
  1.1048 +              t.Add(new Temperature("System", 0));
  1.1049 +              t.Add(new Temperature("CPU", 1));
  1.1050 +              f.Add(new Fan("CPU Fan", 0));
  1.1051 +              f.Add(new Fan("System Fan #1", 1));
  1.1052 +              f.Add(new Fan("System Fan #2", 2));
  1.1053 +              f.Add(new Fan("Power Fan", 3));
  1.1054 +              break;
  1.1055 +            case Model.GA_MA78LM_S2H: // IT8718F
  1.1056 +              v.Add(new Voltage("CPU VCore", 0));
  1.1057 +              v.Add(new Voltage("DRAM", 1));
  1.1058 +              v.Add(new Voltage("+3.3V", 2));
  1.1059 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1060 +              v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
  1.1061 +              v.Add(new Voltage("VBat", 8));
  1.1062 +              t.Add(new Temperature("System", 0));
  1.1063 +              t.Add(new Temperature("CPU", 1));
  1.1064 +              t.Add(new Temperature("VRM", 2));
  1.1065 +              f.Add(new Fan("CPU Fan", 0));
  1.1066 +              f.Add(new Fan("System Fan #1", 1));
  1.1067 +              f.Add(new Fan("System Fan #2", 2));
  1.1068 +              f.Add(new Fan("Power Fan", 3));
  1.1069 +              break;
  1.1070 +            case Model.GA_MA785GM_US2H: // IT8718F
  1.1071 +            case Model.GA_MA785GMT_UD2H: // IT8718F
  1.1072 +              v.Add(new Voltage("CPU VCore", 0));
  1.1073 +              v.Add(new Voltage("DRAM", 1));
  1.1074 +              v.Add(new Voltage("+3.3V", 2));
  1.1075 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1076 +              v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
  1.1077 +              v.Add(new Voltage("VBat", 8));
  1.1078 +              t.Add(new Temperature("System", 0));
  1.1079 +              t.Add(new Temperature("CPU", 1));
  1.1080 +              f.Add(new Fan("CPU Fan", 0));
  1.1081 +              f.Add(new Fan("System Fan", 1));
  1.1082 +              f.Add(new Fan("NB Fan", 2));
  1.1083 +              break;
  1.1084 +            case Model.X58A_UD3R: // IT8720F 
  1.1085 +              v.Add(new Voltage("CPU VCore", 0));
  1.1086 +              v.Add(new Voltage("DRAM", 1));
  1.1087 +              v.Add(new Voltage("+3.3V", 2));
  1.1088 +              v.Add(new Voltage("+5V", 3, 6.8f, 10));
  1.1089 +              v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
  1.1090 +              v.Add(new Voltage("VBat", 8));
  1.1091 +              t.Add(new Temperature("System", 0));
  1.1092 +              t.Add(new Temperature("CPU", 1));
  1.1093 +              t.Add(new Temperature("Northbridge", 2));
  1.1094 +              f.Add(new Fan("CPU Fan", 0));
  1.1095 +              f.Add(new Fan("System Fan #2", 1));
  1.1096 +              f.Add(new Fan("Power Fan", 2));
  1.1097 +              f.Add(new Fan("System Fan #1", 3));
  1.1098 +              break;
  1.1099 +            default:
  1.1100 +              v.Add(new Voltage("CPU VCore", 0));
  1.1101 +              v.Add(new Voltage("DRAM", 1, true));
  1.1102 +              v.Add(new Voltage("+3.3V", 2, true));
  1.1103 +              v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
  1.1104 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.1105 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.1106 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.1107 +              v.Add(new Voltage("Voltage #8", 7, true));
  1.1108 +              v.Add(new Voltage("VBat", 8));
  1.1109 +              for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1110 +                t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1111 +              for (int i = 0; i < superIO.Fans.Length; i++)
  1.1112 +                f.Add(new Fan("Fan #" + (i + 1), i));
  1.1113 +              for (int i = 0; i < superIO.Controls.Length; i++)
  1.1114 +                c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1115 +              break;
  1.1116 +          }
  1.1117 +          break;
  1.1118 +
  1.1119 +        default:
  1.1120 +          v.Add(new Voltage("CPU VCore", 0));
  1.1121 +          v.Add(new Voltage("Voltage #2", 1, true));
  1.1122 +          v.Add(new Voltage("Voltage #3", 2, true));
  1.1123 +          v.Add(new Voltage("Voltage #4", 3, true));
  1.1124 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.1125 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.1126 +          v.Add(new Voltage("Voltage #7", 6, true));
  1.1127 +          v.Add(new Voltage("Voltage #8", 7, true));
  1.1128 +          v.Add(new Voltage("VBat", 8));
  1.1129 +          for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1130 +            t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1131 +          for (int i = 0; i < superIO.Fans.Length; i++)
  1.1132 +            f.Add(new Fan("Fan #" + (i + 1), i));
  1.1133 +          for (int i = 0; i < superIO.Controls.Length; i++)
  1.1134 +            c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1135 +          break;
  1.1136 +      }
  1.1137 +    }
  1.1138 +
  1.1139 +    private static void GetASRockConfiguration(ISuperIO superIO, 
  1.1140 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f, 
  1.1141 +      ref ReadValueDelegate readFan, ref UpdateDelegate postUpdate, 
  1.1142 +      ref Mutex mutex) 
  1.1143 +    {
  1.1144 +      v.Add(new Voltage("CPU VCore", 0));
  1.1145 +      v.Add(new Voltage("+3.3V", 2));
  1.1146 +      v.Add(new Voltage("+12V", 4, 30, 10));
  1.1147 +      v.Add(new Voltage("+5V", 5, 6.8f, 10));
  1.1148 +      v.Add(new Voltage("VBat", 8));
  1.1149 +      t.Add(new Temperature("CPU", 0));
  1.1150 +      t.Add(new Temperature("Motherboard", 1));
  1.1151 +      f.Add(new Fan("CPU Fan", 0));
  1.1152 +      f.Add(new Fan("Chassis Fan #1", 1));
  1.1153 +
  1.1154 +      // this mutex is also used by the official ASRock tool
  1.1155 +      mutex = new Mutex(false, "ASRockOCMark");
  1.1156 +
  1.1157 +      bool exclusiveAccess = false;
  1.1158 +      try {
  1.1159 +        exclusiveAccess = mutex.WaitOne(10, false);
  1.1160 +      } catch (AbandonedMutexException) { } 
  1.1161 +        catch (InvalidOperationException) { }
  1.1162 +
  1.1163 +      // only read additional fans if we get exclusive access
  1.1164 +      if (exclusiveAccess) {
  1.1165 +
  1.1166 +        f.Add(new Fan("Chassis Fan #2", 2));
  1.1167 +        f.Add(new Fan("Chassis Fan #3", 3));
  1.1168 +        f.Add(new Fan("Power Fan", 4));
  1.1169 +
  1.1170 +        readFan = (index) => {
  1.1171 +          if (index < 2) {
  1.1172 +            return superIO.Fans[index];
  1.1173 +          } else {
  1.1174 +            // get GPIO 80-87
  1.1175 +            byte? gpio = superIO.ReadGPIO(7);
  1.1176 +            if (!gpio.HasValue)
  1.1177 +              return null;
  1.1178 +
  1.1179 +            // read the last 3 fans based on GPIO 83-85
  1.1180 +            int[] masks = { 0x05, 0x03, 0x06 };
  1.1181 +            return (((gpio.Value >> 3) & 0x07) ==
  1.1182 +              masks[index - 2]) ? superIO.Fans[2] : null;
  1.1183 +          }
  1.1184 +        };
  1.1185 +
  1.1186 +        int fanIndex = 0;
  1.1187 +        postUpdate = () => {
  1.1188 +          // get GPIO 80-87
  1.1189 +          byte? gpio = superIO.ReadGPIO(7);
  1.1190 +          if (!gpio.HasValue)
  1.1191 +            return;
  1.1192 +
  1.1193 +          // prepare the GPIO 83-85 for the next update
  1.1194 +          int[] masks = { 0x05, 0x03, 0x06 };
  1.1195 +          superIO.WriteGPIO(7,
  1.1196 +            (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3)));
  1.1197 +          fanIndex = (fanIndex + 1) % 3;
  1.1198 +        };
  1.1199 +      }
  1.1200 +    }
  1.1201 +
  1.1202 +    private static void GetITEConfigurationsB(ISuperIO superIO,
  1.1203 +      Manufacturer manufacturer, Model model,
  1.1204 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c) 
  1.1205 +    {
  1.1206 +      switch (manufacturer) {
  1.1207 +        case Manufacturer.ECS:
  1.1208 +          switch (model) {
  1.1209 +            case Model.A890GXM_A: // IT8721F
  1.1210 +              v.Add(new Voltage("CPU VCore", 0));
  1.1211 +              v.Add(new Voltage("VDIMM", 1));
  1.1212 +              v.Add(new Voltage("NB Voltage", 2));
  1.1213 +              v.Add(new Voltage("Analog +3.3V", 3, 10, 10));
  1.1214 +              // v.Add(new Voltage("VDIMM", 6, true));
  1.1215 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1216 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1217 +              t.Add(new Temperature("CPU", 0));
  1.1218 +              t.Add(new Temperature("System", 1));
  1.1219 +              t.Add(new Temperature("Northbridge", 2));
  1.1220 +              f.Add(new Fan("CPU Fan", 0));
  1.1221 +              f.Add(new Fan("System Fan", 1));
  1.1222 +              f.Add(new Fan("Power Fan", 2));
  1.1223 +              break;
  1.1224 +            default:
  1.1225 +              v.Add(new Voltage("Voltage #1", 0, true));
  1.1226 +              v.Add(new Voltage("Voltage #2", 1, true));
  1.1227 +              v.Add(new Voltage("Voltage #3", 2, true));
  1.1228 +              v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
  1.1229 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.1230 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.1231 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.1232 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
  1.1233 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1234 +              for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1235 +                t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1236 +              for (int i = 0; i < superIO.Fans.Length; i++)
  1.1237 +                f.Add(new Fan("Fan #" + (i + 1), i));
  1.1238 +              for (int i = 0; i < superIO.Controls.Length; i++)
  1.1239 +                c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1240 +              break;
  1.1241 +          }
  1.1242 +          break;
  1.1243 +        case Manufacturer.Gigabyte:
  1.1244 +          switch (model) {
  1.1245 +            case Model.H61M_DS2_REV_1_2: // IT8728F
  1.1246 +            case Model.H61M_USB3_B3_REV_2_0: // IT8728F
  1.1247 +              v.Add(new Voltage("VTT", 0));
  1.1248 +              v.Add(new Voltage("+12V", 2, 30.9f, 10));
  1.1249 +              v.Add(new Voltage("CPU VCore", 5));
  1.1250 +              v.Add(new Voltage("DRAM", 6));
  1.1251 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1252 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1253 +              t.Add(new Temperature("System", 0));
  1.1254 +              t.Add(new Temperature("CPU", 2));
  1.1255 +              f.Add(new Fan("CPU Fan", 0));
  1.1256 +              f.Add(new Fan("System Fan", 1));
  1.1257 +              break;
  1.1258 +            case Model.H67A_UD3H_B3: // IT8728F
  1.1259 +            case Model.H67A_USB3_B3: // IT8728F                
  1.1260 +              v.Add(new Voltage("VTT", 0));
  1.1261 +              v.Add(new Voltage("+5V", 1, 15, 10));
  1.1262 +              v.Add(new Voltage("+12V", 2, 30.9f, 10));
  1.1263 +              v.Add(new Voltage("CPU VCore", 5));
  1.1264 +              v.Add(new Voltage("DRAM", 6));
  1.1265 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1266 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1267 +              t.Add(new Temperature("System", 0));
  1.1268 +              t.Add(new Temperature("CPU", 2));
  1.1269 +              f.Add(new Fan("CPU Fan", 0));
  1.1270 +              f.Add(new Fan("System Fan #1", 1));
  1.1271 +              f.Add(new Fan("Power Fan", 2));
  1.1272 +              f.Add(new Fan("System Fan #2", 3));
  1.1273 +              break;
  1.1274 +            case Model.Z68A_D3H_B3: // IT8728F
  1.1275 +              v.Add(new Voltage("VTT", 0));
  1.1276 +              v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
  1.1277 +              v.Add(new Voltage("+12V", 2, 30.9f, 10));
  1.1278 +              v.Add(new Voltage("+5V", 3, 7.15f, 10));
  1.1279 +              v.Add(new Voltage("CPU VCore", 5));
  1.1280 +              v.Add(new Voltage("DRAM", 6));
  1.1281 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1282 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1283 +              t.Add(new Temperature("System", 0));
  1.1284 +              t.Add(new Temperature("CPU", 2));
  1.1285 +              f.Add(new Fan("CPU Fan", 0));
  1.1286 +              f.Add(new Fan("System Fan #1", 1));
  1.1287 +              f.Add(new Fan("Power Fan", 2));
  1.1288 +              f.Add(new Fan("System Fan #2", 3));
  1.1289 +              break;
  1.1290 +            case Model.P67A_UD3_B3: // IT8728F
  1.1291 +            case Model.P67A_UD3R_B3: // IT8728F
  1.1292 +            case Model.P67A_UD4_B3: // IT8728F                
  1.1293 +            case Model.Z68AP_D3: // IT8728F
  1.1294 +            case Model.Z68X_UD3H_B3: // IT8728F               
  1.1295 +              v.Add(new Voltage("VTT", 0));
  1.1296 +              v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
  1.1297 +              v.Add(new Voltage("+12V", 2, 30.9f, 10));
  1.1298 +              v.Add(new Voltage("+5V", 3, 7.15f, 10));
  1.1299 +              v.Add(new Voltage("CPU VCore", 5));
  1.1300 +              v.Add(new Voltage("DRAM", 6));
  1.1301 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1302 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1303 +              t.Add(new Temperature("System", 0));
  1.1304 +              t.Add(new Temperature("CPU", 2));
  1.1305 +              f.Add(new Fan("CPU Fan", 0));
  1.1306 +              f.Add(new Fan("System Fan #2", 1));
  1.1307 +              f.Add(new Fan("Power Fan", 2));
  1.1308 +              f.Add(new Fan("System Fan #1", 3));
  1.1309 +              break;
  1.1310 +            case Model.Z68X_UD7_B3: // IT8728F
  1.1311 +              v.Add(new Voltage("VTT", 0));
  1.1312 +              v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
  1.1313 +              v.Add(new Voltage("+12V", 2, 30.9f, 10));
  1.1314 +              v.Add(new Voltage("+5V", 3, 7.15f, 10));
  1.1315 +              v.Add(new Voltage("CPU VCore", 5));
  1.1316 +              v.Add(new Voltage("DRAM", 6));
  1.1317 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1318 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1319 +              t.Add(new Temperature("System", 0));
  1.1320 +              t.Add(new Temperature("CPU", 1));
  1.1321 +              t.Add(new Temperature("System 3", 2));
  1.1322 +              f.Add(new Fan("CPU Fan", 0));
  1.1323 +              f.Add(new Fan("Power Fan", 1));
  1.1324 +              f.Add(new Fan("System Fan #1", 2));
  1.1325 +              f.Add(new Fan("System Fan #2", 3));
  1.1326 +              f.Add(new Fan("System Fan #3", 4));
  1.1327                break;
  1.1328              default:
  1.1329                v.Add(new Voltage("Voltage #1", 0, true));
  1.1330 @@ -671,60 +810,83 @@
  1.1331                break;
  1.1332            }
  1.1333            break;
  1.1334 -          
  1.1335 -        case Chip.F71858:
  1.1336 -          v.Add(new Voltage("VCC3V", 0, 150, 150));
  1.1337 -          v.Add(new Voltage("VSB3V", 1, 150, 150));
  1.1338 -          v.Add(new Voltage("Battery", 2, 150, 150));
  1.1339 +        case Manufacturer.Shuttle:
  1.1340 +          switch (model) {
  1.1341 +            case Model.FH67: // IT8772E 
  1.1342 +              v.Add(new Voltage("CPU VCore", 0));
  1.1343 +              v.Add(new Voltage("DRAM", 1));
  1.1344 +              v.Add(new Voltage("PCH VCCIO", 2));
  1.1345 +              v.Add(new Voltage("CPU VCCIO", 3));
  1.1346 +              v.Add(new Voltage("Graphic Voltage", 4));
  1.1347 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
  1.1348 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1349 +              t.Add(new Temperature("System", 0));
  1.1350 +              t.Add(new Temperature("CPU", 1));
  1.1351 +              f.Add(new Fan("Fan #1", 0));
  1.1352 +              f.Add(new Fan("CPU Fan", 1));
  1.1353 +              break;
  1.1354 +            default:
  1.1355 +              v.Add(new Voltage("Voltage #1", 0, true));
  1.1356 +              v.Add(new Voltage("Voltage #2", 1, true));
  1.1357 +              v.Add(new Voltage("Voltage #3", 2, true));
  1.1358 +              v.Add(new Voltage("Voltage #4", 3, true));
  1.1359 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.1360 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.1361 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.1362 +              v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
  1.1363 +              v.Add(new Voltage("VBat", 8, 10, 10));
  1.1364 +              for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1365 +                t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1366 +              for (int i = 0; i < superIO.Fans.Length; i++)
  1.1367 +                f.Add(new Fan("Fan #" + (i + 1), i));
  1.1368 +              for (int i = 0; i < superIO.Controls.Length; i++)
  1.1369 +                c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1370 +              break;
  1.1371 +          }
  1.1372 +          break;
  1.1373 +        default:
  1.1374 +          v.Add(new Voltage("Voltage #1", 0, true));
  1.1375 +          v.Add(new Voltage("Voltage #2", 1, true));
  1.1376 +          v.Add(new Voltage("Voltage #3", 2, true));
  1.1377 +          v.Add(new Voltage("Voltage #4", 3, true));
  1.1378 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.1379 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.1380 +          v.Add(new Voltage("Voltage #7", 6, true));
  1.1381 +          v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
  1.1382 +          v.Add(new Voltage("VBat", 8, 10, 10));
  1.1383            for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1384              t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1385            for (int i = 0; i < superIO.Fans.Length; i++)
  1.1386              f.Add(new Fan("Fan #" + (i + 1), i));
  1.1387 +          for (int i = 0; i < superIO.Controls.Length; i++)
  1.1388 +            c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1389            break;
  1.1390 -        case Chip.F71862: 
  1.1391 -        case Chip.F71869:
  1.1392 -        case Chip.F71869A:
  1.1393 -        case Chip.F71882:
  1.1394 -        case Chip.F71889AD: 
  1.1395 -        case Chip.F71889ED: 
  1.1396 -        case Chip.F71889F:
  1.1397 -        case Chip.F71808E:
  1.1398 -          switch (manufacturer) {
  1.1399 -            case Manufacturer.EVGA:
  1.1400 -              switch (model) {
  1.1401 -                case Model.X58_SLI_Classified: // F71882 
  1.1402 -                  v.Add(new Voltage("VCC3V", 0, 150, 150));
  1.1403 -                  v.Add(new Voltage("CPU VCore", 1, 47, 100));
  1.1404 -                  v.Add(new Voltage("DIMM", 2, 47, 100));
  1.1405 -                  v.Add(new Voltage("CPU VTT", 3, 24, 100));
  1.1406 -                  v.Add(new Voltage("IOH Vcore", 4, 24, 100));
  1.1407 -                  v.Add(new Voltage("+5V", 5, 51, 12));
  1.1408 -                  v.Add(new Voltage("+12V", 6, 56, 6.8f));
  1.1409 -                  v.Add(new Voltage("3VSB", 7, 150, 150));
  1.1410 -                  v.Add(new Voltage("VBat", 8, 150, 150));
  1.1411 -                  t.Add(new Temperature("CPU", 0));
  1.1412 -                  t.Add(new Temperature("VREG", 1));
  1.1413 -                  t.Add(new Temperature("System", 2));
  1.1414 -                  f.Add(new Fan("CPU Fan", 0));
  1.1415 -                  f.Add(new Fan("Power Fan", 1));
  1.1416 -                  f.Add(new Fan("Chassis Fan", 2));
  1.1417 -                  break;
  1.1418 -                default:
  1.1419 -                  v.Add(new Voltage("VCC3V", 0, 150, 150));
  1.1420 -                  v.Add(new Voltage("CPU VCore", 1));
  1.1421 -                  v.Add(new Voltage("Voltage #3", 2, true));
  1.1422 -                  v.Add(new Voltage("Voltage #4", 3, true));
  1.1423 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1424 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1425 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1426 -                  v.Add(new Voltage("VSB3V", 7, 150, 150));
  1.1427 -                  v.Add(new Voltage("VBat", 8, 150, 150));
  1.1428 -                  for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1429 -                    t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1430 -                  for (int i = 0; i < superIO.Fans.Length; i++)
  1.1431 -                    f.Add(new Fan("Fan #" + (i + 1), i));
  1.1432 -                  break;
  1.1433 -              }
  1.1434 +      }
  1.1435 +    }
  1.1436 +
  1.1437 +    private static void GetFintekConfiguration(ISuperIO superIO,
  1.1438 +      Manufacturer manufacturer, Model model,
  1.1439 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f) 
  1.1440 +    {
  1.1441 +      switch (manufacturer) {
  1.1442 +        case Manufacturer.EVGA:
  1.1443 +          switch (model) {
  1.1444 +            case Model.X58_SLI_Classified: // F71882 
  1.1445 +              v.Add(new Voltage("VCC3V", 0, 150, 150));
  1.1446 +              v.Add(new Voltage("CPU VCore", 1, 47, 100));
  1.1447 +              v.Add(new Voltage("DIMM", 2, 47, 100));
  1.1448 +              v.Add(new Voltage("CPU VTT", 3, 24, 100));
  1.1449 +              v.Add(new Voltage("IOH Vcore", 4, 24, 100));
  1.1450 +              v.Add(new Voltage("+5V", 5, 51, 12));
  1.1451 +              v.Add(new Voltage("+12V", 6, 56, 6.8f));
  1.1452 +              v.Add(new Voltage("3VSB", 7, 150, 150));
  1.1453 +              v.Add(new Voltage("VBat", 8, 150, 150));
  1.1454 +              t.Add(new Temperature("CPU", 0));
  1.1455 +              t.Add(new Temperature("VREG", 1));
  1.1456 +              t.Add(new Temperature("System", 2));
  1.1457 +              f.Add(new Fan("CPU Fan", 0));
  1.1458 +              f.Add(new Fan("Power Fan", 1));
  1.1459 +              f.Add(new Fan("Chassis Fan", 2));
  1.1460                break;
  1.1461              default:
  1.1462                v.Add(new Voltage("VCC3V", 0, 150, 150));
  1.1463 @@ -733,8 +895,7 @@
  1.1464                v.Add(new Voltage("Voltage #4", 3, true));
  1.1465                v.Add(new Voltage("Voltage #5", 4, true));
  1.1466                v.Add(new Voltage("Voltage #6", 5, true));
  1.1467 -              if (superIO.Chip != Chip.F71808E) 
  1.1468 -                  v.Add(new Voltage("Voltage #7", 6, true)); 
  1.1469 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.1470                v.Add(new Voltage("VSB3V", 7, 150, 150));
  1.1471                v.Add(new Voltage("VBat", 8, 150, 150));
  1.1472                for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1473 @@ -744,298 +905,101 @@
  1.1474                break;
  1.1475            }
  1.1476            break;
  1.1477 +        default:
  1.1478 +          v.Add(new Voltage("VCC3V", 0, 150, 150));
  1.1479 +          v.Add(new Voltage("CPU VCore", 1));
  1.1480 +          v.Add(new Voltage("Voltage #3", 2, true));
  1.1481 +          v.Add(new Voltage("Voltage #4", 3, true));
  1.1482 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.1483 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.1484 +          if (superIO.Chip != Chip.F71808E)
  1.1485 +            v.Add(new Voltage("Voltage #7", 6, true));
  1.1486 +          v.Add(new Voltage("VSB3V", 7, 150, 150));
  1.1487 +          v.Add(new Voltage("VBat", 8, 150, 150));
  1.1488 +          for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1489 +            t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1490 +          for (int i = 0; i < superIO.Fans.Length; i++)
  1.1491 +            f.Add(new Fan("Fan #" + (i + 1), i));
  1.1492 +          break;
  1.1493 +      }
  1.1494 +    }
  1.1495  
  1.1496 -        case Chip.W83627EHF:
  1.1497 -          switch (manufacturer) {
  1.1498 -            case Manufacturer.ASRock:
  1.1499 -              switch (model) {
  1.1500 -                case Model.AOD790GX_128M: // W83627EHF
  1.1501 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1502 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1503 -                  v.Add(new Voltage("+3.3V", 4, 10, 10));
  1.1504 -                  v.Add(new Voltage("+5V", 5, 20, 10));
  1.1505 -                  v.Add(new Voltage("+12V", 6, 28, 5));
  1.1506 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1507 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1508 -                  t.Add(new Temperature("CPU", 0));
  1.1509 -                  t.Add(new Temperature("Motherboard", 2));
  1.1510 -                  f.Add(new Fan("CPU Fan", 0));
  1.1511 -                  f.Add(new Fan("Chassis Fan", 1));                 
  1.1512 -                  break;
  1.1513 -                default:
  1.1514 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1515 -                  v.Add(new Voltage("Voltage #2", 1, true));
  1.1516 -                  v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1517 -                  v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1518 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1519 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1520 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1521 -                  v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1522 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1523 -                  v.Add(new Voltage("Voltage #10", 9, true));
  1.1524 -                  t.Add(new Temperature("CPU", 0));
  1.1525 -                  t.Add(new Temperature("Auxiliary", 1));
  1.1526 -                  t.Add(new Temperature("System", 2));
  1.1527 -                  f.Add(new Fan("System Fan", 0));
  1.1528 -                  f.Add(new Fan("CPU Fan", 1));
  1.1529 -                  f.Add(new Fan("Auxiliary Fan", 2));
  1.1530 -                  f.Add(new Fan("CPU Fan #2", 3));
  1.1531 -                  f.Add(new Fan("Auxiliary Fan #2", 4));
  1.1532 -                  break;
  1.1533 -              } break;
  1.1534 -            default:
  1.1535 +    private static void GetNuvotonConfigurationF(ISuperIO superIO, 
  1.1536 +      Manufacturer manufacturer, Model model, 
  1.1537 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c) 
  1.1538 +    {
  1.1539 +      switch (manufacturer) {
  1.1540 +        case Manufacturer.ASUS:
  1.1541 +          switch (model) {
  1.1542 +            case Model.P8P67: // NCT6776F
  1.1543 +            case Model.P8P67_EVO: // NCT6776F
  1.1544 +            case Model.P8P67_PRO: // NCT6776F
  1.1545                v.Add(new Voltage("CPU VCore", 0));
  1.1546 -              v.Add(new Voltage("Voltage #2", 1, true));
  1.1547 -              v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1548 -              v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1549 -              v.Add(new Voltage("Voltage #5", 4, true));
  1.1550 +              v.Add(new Voltage("+12V", 1, 11, 1));
  1.1551 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1552 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1553 +              v.Add(new Voltage("+5V", 4, 12, 3));
  1.1554 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1555 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1556 +              t.Add(new Temperature("CPU", 0));
  1.1557 +              t.Add(new Temperature("Auxiliary", 2));
  1.1558 +              t.Add(new Temperature("Motherboard", 3));
  1.1559 +              f.Add(new Fan("Chassis Fan #1", 0));
  1.1560 +              f.Add(new Fan("CPU Fan", 1));
  1.1561 +              f.Add(new Fan("Power Fan", 2));
  1.1562 +              f.Add(new Fan("Chassis Fan #2", 3));
  1.1563 +              c.Add(new Ctrl("Chassis Fan #2", 0));
  1.1564 +              c.Add(new Ctrl("CPU Fan", 1));
  1.1565 +              c.Add(new Ctrl("Chassis Fan #1", 2));
  1.1566 +              break;
  1.1567 +            case Model.P8P67_M_PRO: // NCT6776F
  1.1568 +              v.Add(new Voltage("CPU VCore", 0));
  1.1569 +              v.Add(new Voltage("+12V", 1, 11, 1));
  1.1570 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1571 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1572 +              v.Add(new Voltage("+5V", 4, 12, 3));
  1.1573                v.Add(new Voltage("Voltage #6", 5, true));
  1.1574                v.Add(new Voltage("Voltage #7", 6, true));
  1.1575 -              v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1576 -              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1577 -              v.Add(new Voltage("Voltage #10", 9, true));
  1.1578 -              t.Add(new Temperature("CPU", 0));
  1.1579 -              t.Add(new Temperature("Auxiliary", 1));
  1.1580 -              t.Add(new Temperature("System", 2));
  1.1581 -              f.Add(new Fan("System Fan", 0));
  1.1582 -              f.Add(new Fan("CPU Fan", 1));
  1.1583 -              f.Add(new Fan("Auxiliary Fan", 2));
  1.1584 -              f.Add(new Fan("CPU Fan #2", 3));
  1.1585 -              f.Add(new Fan("Auxiliary Fan #2", 4));
  1.1586 -              break;
  1.1587 -          }
  1.1588 -          break;
  1.1589 -        case Chip.W83627DHG: 
  1.1590 -        case Chip.W83627DHGP:                      
  1.1591 -        case Chip.W83667HG:
  1.1592 -        case Chip.W83667HGB:
  1.1593 -          switch (manufacturer) {
  1.1594 -            case Manufacturer.ASRock:
  1.1595 -              switch (model) {
  1.1596 -                case Model._880GMH_USB3: // W83627DHG-P
  1.1597 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1598 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1599 -                  v.Add(new Voltage("+5V", 5, 15, 7.5f));
  1.1600 -                  v.Add(new Voltage("+12V", 6, 56, 10));
  1.1601 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1602 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1603 -                  t.Add(new Temperature("CPU", 0));
  1.1604 -                  t.Add(new Temperature("Motherboard", 2));
  1.1605 -                  f.Add(new Fan("Chassis Fan", 0));
  1.1606 -                  f.Add(new Fan("CPU Fan", 1));
  1.1607 -                  f.Add(new Fan("Power Fan", 2));
  1.1608 -                  break;
  1.1609 -                default:
  1.1610 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1611 -                  v.Add(new Voltage("Voltage #2", 1, true));
  1.1612 -                  v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1613 -                  v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1614 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1615 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1616 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1617 -                  v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1618 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1619 -                  t.Add(new Temperature("CPU", 0));
  1.1620 -                  t.Add(new Temperature("Auxiliary", 1));
  1.1621 -                  t.Add(new Temperature("System", 2));
  1.1622 -                  f.Add(new Fan("System Fan", 0));
  1.1623 -                  f.Add(new Fan("CPU Fan", 1));
  1.1624 -                  f.Add(new Fan("Auxiliary Fan", 2));
  1.1625 -                  f.Add(new Fan("CPU Fan #2", 3));
  1.1626 -                  f.Add(new Fan("Auxiliary Fan #2", 4));
  1.1627 -                  break;
  1.1628 -              }
  1.1629 -              break;
  1.1630 -            case Manufacturer.ASUS:
  1.1631 -              switch (model) {
  1.1632 -                case Model.P6T: // W83667HG
  1.1633 -                case Model.P6X58D_E: // W83667HG                 
  1.1634 -                case Model.Rampage_II_GENE: // W83667HG 
  1.1635 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1636 -                  v.Add(new Voltage("+12V", 1, 11.5f, 1.91f));
  1.1637 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1638 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1639 -                  v.Add(new Voltage("+5V", 4, 15, 7.5f));
  1.1640 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1641 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1642 -                  t.Add(new Temperature("CPU", 0));
  1.1643 -                  t.Add(new Temperature("Motherboard", 2));
  1.1644 -                  f.Add(new Fan("Chassis Fan #1", 0));
  1.1645 -                  f.Add(new Fan("CPU Fan", 1));
  1.1646 -                  f.Add(new Fan("Power Fan", 2));
  1.1647 -                  f.Add(new Fan("Chassis Fan #2", 3));
  1.1648 -                  f.Add(new Fan("Chassis Fan #3", 4));
  1.1649 -                  break;
  1.1650 -                case Model.Rampage_Extreme: // W83667HG 
  1.1651 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1652 -                  v.Add(new Voltage("+12V", 1, 12, 2));
  1.1653 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1654 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1655 -                  v.Add(new Voltage("+5V", 4, 15, 7.5f));
  1.1656 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1657 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1658 -                  t.Add(new Temperature("CPU", 0));
  1.1659 -                  t.Add(new Temperature("Motherboard", 2));
  1.1660 -                  f.Add(new Fan("Chassis Fan #1", 0));
  1.1661 -                  f.Add(new Fan("CPU Fan", 1));
  1.1662 -                  f.Add(new Fan("Power Fan", 2));
  1.1663 -                  f.Add(new Fan("Chassis Fan #2", 3));
  1.1664 -                  f.Add(new Fan("Chassis Fan #3", 4));
  1.1665 -                  break;
  1.1666 -                default:
  1.1667 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1668 -                  v.Add(new Voltage("Voltage #2", 1, true));
  1.1669 -                  v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1670 -                  v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1671 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1672 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1673 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1674 -                  v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1675 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1676 -                  t.Add(new Temperature("CPU", 0));
  1.1677 -                  t.Add(new Temperature("Auxiliary", 1));
  1.1678 -                  t.Add(new Temperature("System", 2));
  1.1679 -                  f.Add(new Fan("System Fan", 0));
  1.1680 -                  f.Add(new Fan("CPU Fan", 1));
  1.1681 -                  f.Add(new Fan("Auxiliary Fan", 2));
  1.1682 -                  f.Add(new Fan("CPU Fan #2", 3));
  1.1683 -                  f.Add(new Fan("Auxiliary Fan #2", 4));
  1.1684 -                  break;
  1.1685 -              }
  1.1686 -              break;
  1.1687 -            default:
  1.1688 -              v.Add(new Voltage("CPU VCore", 0));
  1.1689 -              v.Add(new Voltage("Voltage #2", 1, true));
  1.1690 -              v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1691 -              v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1692 -              v.Add(new Voltage("Voltage #5", 4, true));
  1.1693 -              v.Add(new Voltage("Voltage #6", 5, true));
  1.1694 -              v.Add(new Voltage("Voltage #7", 6, true));
  1.1695 -              v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1696 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1697                v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1698                t.Add(new Temperature("CPU", 0));
  1.1699 -              t.Add(new Temperature("Auxiliary", 1));
  1.1700 -              t.Add(new Temperature("System", 2));
  1.1701 -              f.Add(new Fan("System Fan", 0));
  1.1702 +              t.Add(new Temperature("Motherboard", 3));
  1.1703 +              f.Add(new Fan("Chassis Fan #1", 0));
  1.1704                f.Add(new Fan("CPU Fan", 1));
  1.1705 -              f.Add(new Fan("Auxiliary Fan", 2));
  1.1706 -              f.Add(new Fan("CPU Fan #2", 3));
  1.1707 -              f.Add(new Fan("Auxiliary Fan #2", 4));
  1.1708 +              f.Add(new Fan("Chassis Fan #2", 2));
  1.1709 +              f.Add(new Fan("Power Fan", 3));
  1.1710 +              f.Add(new Fan("Auxiliary Fan", 4));
  1.1711                break;
  1.1712 -          } 
  1.1713 -          break;
  1.1714 -        case Chip.W83627HF: 
  1.1715 -        case Chip.W83627THF: 
  1.1716 -        case Chip.W83687THF:
  1.1717 -          v.Add(new Voltage("CPU VCore", 0));
  1.1718 -          v.Add(new Voltage("Voltage #2", 1, true));
  1.1719 -          v.Add(new Voltage("Voltage #3", 2, true));
  1.1720 -          v.Add(new Voltage("AVCC", 3, 34, 51));
  1.1721 -          v.Add(new Voltage("Voltage #5", 4, true));
  1.1722 -          v.Add(new Voltage("5VSB", 5, 34, 51));
  1.1723 -          v.Add(new Voltage("VBAT", 6));
  1.1724 -          t.Add(new Temperature("CPU", 0));
  1.1725 -          t.Add(new Temperature("Auxiliary", 1));
  1.1726 -          t.Add(new Temperature("System", 2));
  1.1727 -          f.Add(new Fan("System Fan", 0));
  1.1728 -          f.Add(new Fan("CPU Fan", 1));
  1.1729 -          f.Add(new Fan("Auxiliary Fan", 2));
  1.1730 -          break;
  1.1731 -        case Chip.NCT6771F:
  1.1732 -        case Chip.NCT6776F:
  1.1733 -          switch (manufacturer) {
  1.1734 -            case Manufacturer.ASUS:
  1.1735 -              switch (model) {
  1.1736 -                case Model.P8P67: // NCT6776F
  1.1737 -                case Model.P8P67_EVO: // NCT6776F
  1.1738 -                case Model.P8P67_PRO: // NCT6776F
  1.1739 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1740 -                  v.Add(new Voltage("+12V", 1, 11, 1));
  1.1741 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1742 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1743 -                  v.Add(new Voltage("+5V", 4, 12, 3));
  1.1744 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1745 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1746 -                  t.Add(new Temperature("CPU", 0));
  1.1747 -                  t.Add(new Temperature("Auxiliary", 2));
  1.1748 -                  t.Add(new Temperature("Motherboard", 3));
  1.1749 -                  f.Add(new Fan("Chassis Fan #1", 0));
  1.1750 -                  f.Add(new Fan("CPU Fan", 1));
  1.1751 -                  f.Add(new Fan("Power Fan", 2));
  1.1752 -                  f.Add(new Fan("Chassis Fan #2", 3));
  1.1753 -                  c.Add(new Ctrl("Chassis Fan #2", 0));
  1.1754 -                  c.Add(new Ctrl("CPU Fan", 1));
  1.1755 -                  c.Add(new Ctrl("Chassis Fan #1", 2));
  1.1756 -                  break;
  1.1757 -                case Model.P8P67_M_PRO: // NCT6776F
  1.1758 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1759 -                  v.Add(new Voltage("+12V", 1, 11, 1));
  1.1760 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1761 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1762 -                  v.Add(new Voltage("+5V", 4, 12, 3));
  1.1763 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1764 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1765 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1766 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1767 -                  t.Add(new Temperature("CPU", 0));
  1.1768 -                  t.Add(new Temperature("Motherboard", 3));
  1.1769 -                  f.Add(new Fan("Chassis Fan #1", 0));
  1.1770 -                  f.Add(new Fan("CPU Fan", 1));
  1.1771 -                  f.Add(new Fan("Chassis Fan #2", 2));
  1.1772 -                  f.Add(new Fan("Power Fan", 3));
  1.1773 -                  f.Add(new Fan("Auxiliary Fan", 4));
  1.1774 -                  break;
  1.1775 -                case Model.P8Z68_V_PRO: // NCT6776F
  1.1776 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1777 -                  v.Add(new Voltage("+12V", 1, 11, 1));
  1.1778 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1779 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1780 -                  v.Add(new Voltage("+5V", 4, 12, 3));
  1.1781 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1782 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1783 -                  t.Add(new Temperature("CPU", 0));
  1.1784 -                  t.Add(new Temperature("Auxiliary", 2));
  1.1785 -                  t.Add(new Temperature("Motherboard", 3));
  1.1786 -                  for (int i = 0; i < superIO.Fans.Length; i++)
  1.1787 -                    f.Add(new Fan("Fan #" + (i + 1), i));
  1.1788 -                  for (int i = 0; i < superIO.Controls.Length; i++)
  1.1789 -                    c.Add(new Ctrl("Fan #" + (i + 1), i));
  1.1790 -                  break;
  1.1791 -                case Model.P9X79: // NCT6776F
  1.1792 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1793 -                  v.Add(new Voltage("+12V", 1, 11, 1));
  1.1794 -                  v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1795 -                  v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1796 -                  v.Add(new Voltage("+5V", 4, 12, 3));
  1.1797 -                  v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1798 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1799 -                  t.Add(new Temperature("CPU", 0));
  1.1800 -                  t.Add(new Temperature("Motherboard", 3));
  1.1801 -                  for (int i = 0; i < superIO.Fans.Length; i++)
  1.1802 -                    f.Add(new Fan("Fan #" + (i + 1), i));
  1.1803 -                  for (int i = 0; i < superIO.Controls.Length; i++)
  1.1804 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1805 -                  break;
  1.1806 -                default:
  1.1807 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1808 -                  v.Add(new Voltage("Voltage #2", 1, true));
  1.1809 -                  v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1810 -                  v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1811 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1812 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1813 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1814 -                  v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1815 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1816 -                  t.Add(new Temperature("CPU Core", 0));                  
  1.1817 -                  t.Add(new Temperature("Temperature #1", 1));
  1.1818 -                  t.Add(new Temperature("Temperature #2", 2));
  1.1819 -                  t.Add(new Temperature("Temperature #3", 3));
  1.1820 -                  for (int i = 0; i < superIO.Fans.Length; i++)
  1.1821 -                    f.Add(new Fan("Fan #" + (i + 1), i));
  1.1822 -                  for (int i = 0; i < superIO.Controls.Length; i++)
  1.1823 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1824 -                  break;
  1.1825 -              }
  1.1826 +            case Model.P8Z68_V_PRO: // NCT6776F
  1.1827 +              v.Add(new Voltage("CPU VCore", 0));
  1.1828 +              v.Add(new Voltage("+12V", 1, 11, 1));
  1.1829 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1830 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1831 +              v.Add(new Voltage("+5V", 4, 12, 3));
  1.1832 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1833 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1834 +              t.Add(new Temperature("CPU", 0));
  1.1835 +              t.Add(new Temperature("Auxiliary", 2));
  1.1836 +              t.Add(new Temperature("Motherboard", 3));
  1.1837 +              for (int i = 0; i < superIO.Fans.Length; i++)
  1.1838 +                f.Add(new Fan("Fan #" + (i + 1), i));
  1.1839 +              for (int i = 0; i < superIO.Controls.Length; i++)
  1.1840 +                c.Add(new Ctrl("Fan #" + (i + 1), i));
  1.1841 +              break;
  1.1842 +            case Model.P9X79: // NCT6776F
  1.1843 +              v.Add(new Voltage("CPU VCore", 0));
  1.1844 +              v.Add(new Voltage("+12V", 1, 11, 1));
  1.1845 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.1846 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.1847 +              v.Add(new Voltage("+5V", 4, 12, 3));
  1.1848 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.1849 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1850 +              t.Add(new Temperature("CPU", 0));
  1.1851 +              t.Add(new Temperature("Motherboard", 3));
  1.1852 +              for (int i = 0; i < superIO.Fans.Length; i++)
  1.1853 +                f.Add(new Fan("Fan #" + (i + 1), i));
  1.1854 +              for (int i = 0; i < superIO.Controls.Length; i++)
  1.1855 +                c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1856                break;
  1.1857              default:
  1.1858                v.Add(new Voltage("CPU VCore", 0));
  1.1859 @@ -1058,68 +1022,62 @@
  1.1860                break;
  1.1861            }
  1.1862            break;
  1.1863 -        case Chip.NCT6779D:
  1.1864 -        case Chip.NCT6791D:
  1.1865 -          switch (manufacturer) {
  1.1866 -            case Manufacturer.ASUS:
  1.1867 -              switch (model) {
  1.1868 -                case Model.P8Z77_V:
  1.1869 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1870 -                  v.Add(new Voltage("Voltage #2", 1, true));
  1.1871 -                  v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1872 -                  v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1873 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1874 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1875 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1876 -                  v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1877 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1878 -                  v.Add(new Voltage("VTT", 9));
  1.1879 -                  v.Add(new Voltage("Voltage #11", 10, true));
  1.1880 -                  v.Add(new Voltage("Voltage #12", 11, true));
  1.1881 -                  v.Add(new Voltage("Voltage #13", 12, true));
  1.1882 -                  v.Add(new Voltage("Voltage #14", 13, true));
  1.1883 -                  v.Add(new Voltage("Voltage #15", 14, true));
  1.1884 -                  t.Add(new Temperature("CPU Core", 0));
  1.1885 -                  t.Add(new Temperature("Auxiliary", 1));
  1.1886 -                  t.Add(new Temperature("Motherboard", 2));
  1.1887 -                  f.Add(new Fan("Chassis Fan #1", 0));
  1.1888 -                  f.Add(new Fan("CPU Fan", 1));
  1.1889 -                  f.Add(new Fan("Chassis Fan #2", 2));
  1.1890 -                  f.Add(new Fan("Chassis Fan #3", 3));
  1.1891 -                  c.Add(new Ctrl("Chassis Fan #1", 0));
  1.1892 -                  c.Add(new Ctrl("CPU  Fan", 1));
  1.1893 -                  c.Add(new Ctrl("Chassis Fan #2", 2));
  1.1894 -                  c.Add(new Ctrl("Chassis Fan #3", 3));
  1.1895 -                  break;
  1.1896 -                default:
  1.1897 -                  v.Add(new Voltage("CPU VCore", 0));
  1.1898 -                  v.Add(new Voltage("Voltage #2", 1, true));
  1.1899 -                  v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1900 -                  v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1901 -                  v.Add(new Voltage("Voltage #5", 4, true));
  1.1902 -                  v.Add(new Voltage("Voltage #6", 5, true));
  1.1903 -                  v.Add(new Voltage("Voltage #7", 6, true));
  1.1904 -                  v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1905 -                  v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1906 -                  v.Add(new Voltage("VTT", 9));
  1.1907 -                  v.Add(new Voltage("Voltage #11", 10, true));
  1.1908 -                  v.Add(new Voltage("Voltage #12", 11, true));
  1.1909 -                  v.Add(new Voltage("Voltage #13", 12, true));
  1.1910 -                  v.Add(new Voltage("Voltage #14", 13, true));
  1.1911 -                  v.Add(new Voltage("Voltage #15", 14, true));
  1.1912 -                  t.Add(new Temperature("CPU Core", 0));
  1.1913 -                  t.Add(new Temperature("Temperature #1", 1));
  1.1914 -                  t.Add(new Temperature("Temperature #2", 2));
  1.1915 -                  t.Add(new Temperature("Temperature #3", 3));
  1.1916 -                  t.Add(new Temperature("Temperature #4", 4));
  1.1917 -                  t.Add(new Temperature("Temperature #5", 5));
  1.1918 -                  t.Add(new Temperature("Temperature #6", 6));
  1.1919 -                  for (int i = 0; i < superIO.Fans.Length; i++)
  1.1920 -                    f.Add(new Fan("Fan #" + (i + 1), i));
  1.1921 -                  for (int i = 0; i < superIO.Controls.Length; i++)
  1.1922 -                    c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1923 -                  break;
  1.1924 -              }
  1.1925 +        default:
  1.1926 +          v.Add(new Voltage("CPU VCore", 0));
  1.1927 +          v.Add(new Voltage("Voltage #2", 1, true));
  1.1928 +          v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1929 +          v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1930 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.1931 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.1932 +          v.Add(new Voltage("Voltage #7", 6, true));
  1.1933 +          v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1934 +          v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1935 +          t.Add(new Temperature("CPU Core", 0));
  1.1936 +          t.Add(new Temperature("Temperature #1", 1));
  1.1937 +          t.Add(new Temperature("Temperature #2", 2));
  1.1938 +          t.Add(new Temperature("Temperature #3", 3));
  1.1939 +          for (int i = 0; i < superIO.Fans.Length; i++)
  1.1940 +            f.Add(new Fan("Fan #" + (i + 1), i));
  1.1941 +          for (int i = 0; i < superIO.Controls.Length; i++)
  1.1942 +            c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.1943 +          break;
  1.1944 +      }
  1.1945 +    }
  1.1946 +
  1.1947 +    private static void GetNuvotonConfigurationD(ISuperIO superIO,
  1.1948 +      Manufacturer manufacturer, Model model,
  1.1949 +      IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c) 
  1.1950 +    {
  1.1951 +      switch (manufacturer) {
  1.1952 +        case Manufacturer.ASUS:
  1.1953 +          switch (model) {
  1.1954 +            case Model.P8Z77_V: // NCT6779D
  1.1955 +              v.Add(new Voltage("CPU VCore", 0));
  1.1956 +              v.Add(new Voltage("Voltage #2", 1, true));
  1.1957 +              v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1958 +              v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1959 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.1960 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.1961 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.1962 +              v.Add(new Voltage("3VSB", 7, 34, 34));
  1.1963 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.1964 +              v.Add(new Voltage("VTT", 9));
  1.1965 +              v.Add(new Voltage("Voltage #11", 10, true));
  1.1966 +              v.Add(new Voltage("Voltage #12", 11, true));
  1.1967 +              v.Add(new Voltage("Voltage #13", 12, true));
  1.1968 +              v.Add(new Voltage("Voltage #14", 13, true));
  1.1969 +              v.Add(new Voltage("Voltage #15", 14, true));
  1.1970 +              t.Add(new Temperature("CPU Core", 0));
  1.1971 +              t.Add(new Temperature("Auxiliary", 1));
  1.1972 +              t.Add(new Temperature("Motherboard", 2));
  1.1973 +              f.Add(new Fan("Chassis Fan #1", 0));
  1.1974 +              f.Add(new Fan("CPU Fan", 1));
  1.1975 +              f.Add(new Fan("Chassis Fan #2", 2));
  1.1976 +              f.Add(new Fan("Chassis Fan #3", 3));
  1.1977 +              c.Add(new Ctrl("Chassis Fan #1", 0));
  1.1978 +              c.Add(new Ctrl("CPU  Fan", 1));
  1.1979 +              c.Add(new Ctrl("Chassis Fan #2", 2));
  1.1980 +              c.Add(new Ctrl("Chassis Fan #3", 3));
  1.1981                break;
  1.1982              default:
  1.1983                v.Add(new Voltage("CPU VCore", 0));
  1.1984 @@ -1152,71 +1110,215 @@
  1.1985            }
  1.1986            break;
  1.1987          default:
  1.1988 -          for (int i = 0; i < superIO.Voltages.Length; i++)
  1.1989 -            v.Add(new Voltage("Voltage #" + (i + 1), i, true));
  1.1990 -          for (int i = 0; i < superIO.Temperatures.Length; i++)
  1.1991 -            t.Add(new Temperature("Temperature #" + (i + 1), i));
  1.1992 +          v.Add(new Voltage("CPU VCore", 0));
  1.1993 +          v.Add(new Voltage("Voltage #2", 1, true));
  1.1994 +          v.Add(new Voltage("AVCC", 2, 34, 34));
  1.1995 +          v.Add(new Voltage("3VCC", 3, 34, 34));
  1.1996 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.1997 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.1998 +          v.Add(new Voltage("Voltage #7", 6, true));
  1.1999 +          v.Add(new Voltage("3VSB", 7, 34, 34));
  1.2000 +          v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2001 +          v.Add(new Voltage("VTT", 9));
  1.2002 +          v.Add(new Voltage("Voltage #11", 10, true));
  1.2003 +          v.Add(new Voltage("Voltage #12", 11, true));
  1.2004 +          v.Add(new Voltage("Voltage #13", 12, true));
  1.2005 +          v.Add(new Voltage("Voltage #14", 13, true));
  1.2006 +          v.Add(new Voltage("Voltage #15", 14, true));
  1.2007 +          t.Add(new Temperature("CPU Core", 0));
  1.2008 +          t.Add(new Temperature("Temperature #1", 1));
  1.2009 +          t.Add(new Temperature("Temperature #2", 2));
  1.2010 +          t.Add(new Temperature("Temperature #3", 3));
  1.2011 +          t.Add(new Temperature("Temperature #4", 4));
  1.2012 +          t.Add(new Temperature("Temperature #5", 5));
  1.2013 +          t.Add(new Temperature("Temperature #6", 6));
  1.2014            for (int i = 0; i < superIO.Fans.Length; i++)
  1.2015              f.Add(new Fan("Fan #" + (i + 1), i));
  1.2016            for (int i = 0; i < superIO.Controls.Length; i++)
  1.2017              c.Add(new Ctrl("Fan Control #" + (i + 1), i));
  1.2018            break;
  1.2019        }
  1.2020 +    }
  1.2021  
  1.2022 -      const string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
  1.2023 -      foreach (Voltage voltage in v) 
  1.2024 -        if (voltage.Index < superIO.Voltages.Length) {
  1.2025 -          Sensor sensor = new Sensor(voltage.Name, voltage.Index, 
  1.2026 -            voltage.Hidden, SensorType.Voltage, this, new [] {
  1.2027 -            new ParameterDescription("Ri [kΩ]", "Input resistance.\n" + 
  1.2028 -              formula, voltage.Ri),
  1.2029 -            new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" + 
  1.2030 -              formula, voltage.Rf),
  1.2031 -            new ParameterDescription("Vf [V]", "Reference voltage.\n" + 
  1.2032 -              formula, voltage.Vf)
  1.2033 -            }, settings);
  1.2034 -          voltages.Add(sensor);
  1.2035 +    private static void GetWinbondConfigurationEHF(Manufacturer manufacturer,
  1.2036 +      Model model, IList<Voltage> v, IList<Temperature> t, IList<Fan> f) 
  1.2037 +    {
  1.2038 +      switch (manufacturer) {
  1.2039 +        case Manufacturer.ASRock:
  1.2040 +          switch (model) {
  1.2041 +            case Model.AOD790GX_128M: // W83627EHF
  1.2042 +              v.Add(new Voltage("CPU VCore", 0));
  1.2043 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.2044 +              v.Add(new Voltage("+3.3V", 4, 10, 10));
  1.2045 +              v.Add(new Voltage("+5V", 5, 20, 10));
  1.2046 +              v.Add(new Voltage("+12V", 6, 28, 5));
  1.2047 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.2048 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2049 +              t.Add(new Temperature("CPU", 0));
  1.2050 +              t.Add(new Temperature("Motherboard", 2));
  1.2051 +              f.Add(new Fan("CPU Fan", 0));
  1.2052 +              f.Add(new Fan("Chassis Fan", 1));
  1.2053 +              break;
  1.2054 +            default:
  1.2055 +              v.Add(new Voltage("CPU VCore", 0));
  1.2056 +              v.Add(new Voltage("Voltage #2", 1, true));
  1.2057 +              v.Add(new Voltage("AVCC", 2, 34, 34));
  1.2058 +              v.Add(new Voltage("3VCC", 3, 34, 34));
  1.2059 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.2060 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.2061 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.2062 +              v.Add(new Voltage("3VSB", 7, 34, 34));
  1.2063 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2064 +              v.Add(new Voltage("Voltage #10", 9, true));
  1.2065 +              t.Add(new Temperature("CPU", 0));
  1.2066 +              t.Add(new Temperature("Auxiliary", 1));
  1.2067 +              t.Add(new Temperature("System", 2));
  1.2068 +              f.Add(new Fan("System Fan", 0));
  1.2069 +              f.Add(new Fan("CPU Fan", 1));
  1.2070 +              f.Add(new Fan("Auxiliary Fan", 2));
  1.2071 +              f.Add(new Fan("CPU Fan #2", 3));
  1.2072 +              f.Add(new Fan("Auxiliary Fan #2", 4));
  1.2073 +              break;
  1.2074 +          } break;
  1.2075 +        default:
  1.2076 +          v.Add(new Voltage("CPU VCore", 0));
  1.2077 +          v.Add(new Voltage("Voltage #2", 1, true));
  1.2078 +          v.Add(new Voltage("AVCC", 2, 34, 34));
  1.2079 +          v.Add(new Voltage("3VCC", 3, 34, 34));
  1.2080 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.2081 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.2082 +          v.Add(new Voltage("Voltage #7", 6, true));
  1.2083 +          v.Add(new Voltage("3VSB", 7, 34, 34));
  1.2084 +          v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2085 +          v.Add(new Voltage("Voltage #10", 9, true));
  1.2086 +          t.Add(new Temperature("CPU", 0));
  1.2087 +          t.Add(new Temperature("Auxiliary", 1));
  1.2088 +          t.Add(new Temperature("System", 2));
  1.2089 +          f.Add(new Fan("System Fan", 0));
  1.2090 +          f.Add(new Fan("CPU Fan", 1));
  1.2091 +          f.Add(new Fan("Auxiliary Fan", 2));
  1.2092 +          f.Add(new Fan("CPU Fan #2", 3));
  1.2093 +          f.Add(new Fan("Auxiliary Fan #2", 4));
  1.2094 +          break;
  1.2095        }
  1.2096 +    }
  1.2097  
  1.2098 -      foreach (Temperature temperature in t) 
  1.2099 -        if (temperature.Index < superIO.Temperatures.Length) {
  1.2100 -        Sensor sensor = new Sensor(temperature.Name, temperature.Index,
  1.2101 -          SensorType.Temperature, this, new [] {
  1.2102 -          new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
  1.2103 -        }, settings);
  1.2104 -        temperatures.Add(sensor);
  1.2105 -      }
  1.2106 -
  1.2107 -      foreach (Fan fan in f)
  1.2108 -        if (fan.Index < superIO.Fans.Length) {
  1.2109 -          Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
  1.2110 -            this, settings);
  1.2111 -          fans.Add(sensor);
  1.2112 -        }
  1.2113 -
  1.2114 -      foreach (Ctrl ctrl in c) {
  1.2115 -        int index = ctrl.Index;
  1.2116 -        if (index < superIO.Controls.Length) {
  1.2117 -          Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control,
  1.2118 -            this, settings);
  1.2119 -          Control control = new Control(sensor, settings, 0, 100);
  1.2120 -          control.ControlModeChanged += (cc) => {
  1.2121 -            if (cc.ControlMode == ControlMode.Default) {
  1.2122 -              superIO.SetControl(index, null);
  1.2123 -            } else {
  1.2124 -              superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
  1.2125 -            }
  1.2126 -          };
  1.2127 -          control.SoftwareControlValueChanged += (cc) => {
  1.2128 -            if (cc.ControlMode == ControlMode.Software) 
  1.2129 -              superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
  1.2130 -          };
  1.2131 -          if (control.ControlMode == ControlMode.Software) 
  1.2132 -            superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55));
  1.2133 -          sensor.Control = control;
  1.2134 -          controls.Add(sensor);
  1.2135 -          ActivateSensor(sensor);
  1.2136 -        }
  1.2137 +    private static void GetWinbondConfigurationHG(Manufacturer manufacturer,
  1.2138 +      Model model, IList<Voltage> v, IList<Temperature> t, IList<Fan> f) 
  1.2139 +    {
  1.2140 +      switch (manufacturer) {
  1.2141 +        case Manufacturer.ASRock:
  1.2142 +          switch (model) {
  1.2143 +            case Model._880GMH_USB3: // W83627DHG-P
  1.2144 +              v.Add(new Voltage("CPU VCore", 0));
  1.2145 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.2146 +              v.Add(new Voltage("+5V", 5, 15, 7.5f));
  1.2147 +              v.Add(new Voltage("+12V", 6, 56, 10));
  1.2148 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.2149 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2150 +              t.Add(new Temperature("CPU", 0));
  1.2151 +              t.Add(new Temperature("Motherboard", 2));
  1.2152 +              f.Add(new Fan("Chassis Fan", 0));
  1.2153 +              f.Add(new Fan("CPU Fan", 1));
  1.2154 +              f.Add(new Fan("Power Fan", 2));
  1.2155 +              break;
  1.2156 +            default:
  1.2157 +              v.Add(new Voltage("CPU VCore", 0));
  1.2158 +              v.Add(new Voltage("Voltage #2", 1, true));
  1.2159 +              v.Add(new Voltage("AVCC", 2, 34, 34));
  1.2160 +              v.Add(new Voltage("3VCC", 3, 34, 34));
  1.2161 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.2162 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.2163 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.2164 +              v.Add(new Voltage("3VSB", 7, 34, 34));
  1.2165 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2166 +              t.Add(new Temperature("CPU", 0));
  1.2167 +              t.Add(new Temperature("Auxiliary", 1));
  1.2168 +              t.Add(new Temperature("System", 2));
  1.2169 +              f.Add(new Fan("System Fan", 0));
  1.2170 +              f.Add(new Fan("CPU Fan", 1));
  1.2171 +              f.Add(new Fan("Auxiliary Fan", 2));
  1.2172 +              f.Add(new Fan("CPU Fan #2", 3));
  1.2173 +              f.Add(new Fan("Auxiliary Fan #2", 4));
  1.2174 +              break;
  1.2175 +          }
  1.2176 +          break;
  1.2177 +        case Manufacturer.ASUS:
  1.2178 +          switch (model) {
  1.2179 +            case Model.P6T: // W83667HG
  1.2180 +            case Model.P6X58D_E: // W83667HG                 
  1.2181 +            case Model.Rampage_II_GENE: // W83667HG 
  1.2182 +              v.Add(new Voltage("CPU VCore", 0));
  1.2183 +              v.Add(new Voltage("+12V", 1, 11.5f, 1.91f));
  1.2184 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.2185 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.2186 +              v.Add(new Voltage("+5V", 4, 15, 7.5f));
  1.2187 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.2188 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2189 +              t.Add(new Temperature("CPU", 0));
  1.2190 +              t.Add(new Temperature("Motherboard", 2));
  1.2191 +              f.Add(new Fan("Chassis Fan #1", 0));
  1.2192 +              f.Add(new Fan("CPU Fan", 1));
  1.2193 +              f.Add(new Fan("Power Fan", 2));
  1.2194 +              f.Add(new Fan("Chassis Fan #2", 3));
  1.2195 +              f.Add(new Fan("Chassis Fan #3", 4));
  1.2196 +              break;
  1.2197 +            case Model.Rampage_Extreme: // W83667HG 
  1.2198 +              v.Add(new Voltage("CPU VCore", 0));
  1.2199 +              v.Add(new Voltage("+12V", 1, 12, 2));
  1.2200 +              v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
  1.2201 +              v.Add(new Voltage("+3.3V", 3, 34, 34));
  1.2202 +              v.Add(new Voltage("+5V", 4, 15, 7.5f));
  1.2203 +              v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
  1.2204 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2205 +              t.Add(new Temperature("CPU", 0));
  1.2206 +              t.Add(new Temperature("Motherboard", 2));
  1.2207 +              f.Add(new Fan("Chassis Fan #1", 0));
  1.2208 +              f.Add(new Fan("CPU Fan", 1));
  1.2209 +              f.Add(new Fan("Power Fan", 2));
  1.2210 +              f.Add(new Fan("Chassis Fan #2", 3));
  1.2211 +              f.Add(new Fan("Chassis Fan #3", 4));
  1.2212 +              break;
  1.2213 +            default:
  1.2214 +              v.Add(new Voltage("CPU VCore", 0));
  1.2215 +              v.Add(new Voltage("Voltage #2", 1, true));
  1.2216 +              v.Add(new Voltage("AVCC", 2, 34, 34));
  1.2217 +              v.Add(new Voltage("3VCC", 3, 34, 34));
  1.2218 +              v.Add(new Voltage("Voltage #5", 4, true));
  1.2219 +              v.Add(new Voltage("Voltage #6", 5, true));
  1.2220 +              v.Add(new Voltage("Voltage #7", 6, true));
  1.2221 +              v.Add(new Voltage("3VSB", 7, 34, 34));
  1.2222 +              v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2223 +              t.Add(new Temperature("CPU", 0));
  1.2224 +              t.Add(new Temperature("Auxiliary", 1));
  1.2225 +              t.Add(new Temperature("System", 2));
  1.2226 +              f.Add(new Fan("System Fan", 0));
  1.2227 +              f.Add(new Fan("CPU Fan", 1));
  1.2228 +              f.Add(new Fan("Auxiliary Fan", 2));
  1.2229 +              f.Add(new Fan("CPU Fan #2", 3));
  1.2230 +              f.Add(new Fan("Auxiliary Fan #2", 4));
  1.2231 +              break;
  1.2232 +          }
  1.2233 +          break;
  1.2234 +        default:
  1.2235 +          v.Add(new Voltage("CPU VCore", 0));
  1.2236 +          v.Add(new Voltage("Voltage #2", 1, true));
  1.2237 +          v.Add(new Voltage("AVCC", 2, 34, 34));
  1.2238 +          v.Add(new Voltage("3VCC", 3, 34, 34));
  1.2239 +          v.Add(new Voltage("Voltage #5", 4, true));
  1.2240 +          v.Add(new Voltage("Voltage #6", 5, true));
  1.2241 +          v.Add(new Voltage("Voltage #7", 6, true));
  1.2242 +          v.Add(new Voltage("3VSB", 7, 34, 34));
  1.2243 +          v.Add(new Voltage("VBAT", 8, 34, 34));
  1.2244 +          t.Add(new Temperature("CPU", 0));
  1.2245 +          t.Add(new Temperature("Auxiliary", 1));
  1.2246 +          t.Add(new Temperature("System", 2));
  1.2247 +          f.Add(new Fan("System Fan", 0));
  1.2248 +          f.Add(new Fan("CPU Fan", 1));
  1.2249 +          f.Add(new Fan("Auxiliary Fan", 2));
  1.2250 +          f.Add(new Fan("CPU Fan #2", 3));
  1.2251 +          f.Add(new Fan("Auxiliary Fan #2", 4));
  1.2252 +          break;
  1.2253        }
  1.2254      }
  1.2255  
     2.1 --- a/Properties/AssemblyVersion.cs	Sun Jul 21 21:02:55 2013 +0000
     2.2 +++ b/Properties/AssemblyVersion.cs	Sun Jul 21 21:03:31 2013 +0000
     2.3 @@ -10,5 +10,5 @@
     2.4  
     2.5  using System.Reflection;
     2.6  
     2.7 -[assembly: AssemblyVersion("0.6.0.2")]
     2.8 -[assembly: AssemblyInformationalVersion("0.6.0.2 Alpha")]
     2.9 \ No newline at end of file
    2.10 +[assembly: AssemblyVersion("0.6.0.3")]
    2.11 +[assembly: AssemblyInformationalVersion("0.6.0.3 Alpha")]
    2.12 \ No newline at end of file