Adding SoundGraphDisplay and SensorFrontView classes.
They were respectively based on SystemTray and SensorNotifyIcon.
SoundGraphDisplay is now able to load iMONDisplay.dll providing it lives on your PATH.
Adding option to sensor context menu for adding it into FrontView.
3 This Source Code Form is subject to the terms of the Mozilla Public
4 License, v. 2.0. If a copy of the MPL was not distributed with this
5 file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 Copyright (C) 2009-2014 Michael Möller <mmoeller@openhardwaremonitor.org>
12 using System.Collections.Generic;
13 using System.Threading;
14 using OpenHardwareMonitor.Hardware.LPC;
16 namespace OpenHardwareMonitor.Hardware.Mainboard {
17 internal sealed class SuperIOHardware : Hardware {
19 private readonly Mainboard mainboard;
20 private readonly ISuperIO superIO;
22 private readonly List<Sensor> voltages = new List<Sensor>();
23 private readonly List<Sensor> temperatures = new List<Sensor>();
24 private readonly List<Sensor> fans = new List<Sensor>();
25 private readonly List<Sensor> controls = new List<Sensor>();
27 private delegate float? ReadValueDelegate(int index);
28 private delegate void UpdateDelegate();
30 // delegates for mainboard specific sensor reading code
31 private readonly ReadValueDelegate readVoltage;
32 private readonly ReadValueDelegate readTemperature;
33 private readonly ReadValueDelegate readFan;
34 private readonly ReadValueDelegate readControl;
36 // delegate for post update mainboard specific code
37 private readonly UpdateDelegate postUpdate;
39 // mainboard specific mutex
40 private readonly Mutex mutex;
42 public SuperIOHardware(Mainboard mainboard, ISuperIO superIO,
43 Manufacturer manufacturer, Model model, ISettings settings)
44 : base(ChipName.GetName(superIO.Chip), new Identifier("lpc",
45 superIO.Chip.ToString().ToLowerInvariant()), settings)
47 this.mainboard = mainboard;
48 this.superIO = superIO;
54 GetBoardSpecificConfiguration(superIO, manufacturer, model,
55 out v, out t, out f, out c,
56 out readVoltage, out readTemperature, out readFan, out readControl,
57 out postUpdate, out mutex);
59 CreateVoltageSensors(superIO, settings, v);
60 CreateTemperatureSensors(superIO, settings, t);
61 CreateFanSensors(superIO, settings, f);
62 CreateControlSensors(superIO, settings, c);
65 private void CreateControlSensors(ISuperIO superIO, ISettings settings,
68 foreach (Ctrl ctrl in c) {
69 int index = ctrl.Index;
70 if (index < superIO.Controls.Length) {
71 Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control,
73 Control control = new Control(sensor, settings, 0, 100);
74 control.ControlModeChanged += (cc) => {
75 switch (cc.ControlMode) {
76 case ControlMode.Undefined:
78 case ControlMode.Default:
79 superIO.SetControl(index, null);
81 case ControlMode.Software:
82 superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
88 control.SoftwareControlValueChanged += (cc) => {
89 if (cc.ControlMode == ControlMode.Software)
90 superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
93 switch (control.ControlMode) {
94 case ControlMode.Undefined:
96 case ControlMode.Default:
97 superIO.SetControl(index, null);
99 case ControlMode.Software:
100 superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55));
106 sensor.Control = control;
107 controls.Add(sensor);
108 ActivateSensor(sensor);
113 private void CreateFanSensors(ISuperIO superIO, ISettings settings,
116 foreach (Fan fan in f) {
117 if (fan.Index < superIO.Fans.Length) {
118 Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
125 private void CreateTemperatureSensors(ISuperIO superIO, ISettings settings,
126 IList<Temperature> t)
128 foreach (Temperature temperature in t)
129 if (temperature.Index < superIO.Temperatures.Length) {
130 Sensor sensor = new Sensor(temperature.Name, temperature.Index,
131 SensorType.Temperature, this, new[] {
132 new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
134 temperatures.Add(sensor);
138 private void CreateVoltageSensors(ISuperIO superIO, ISettings settings,
141 const string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
142 foreach (Voltage voltage in v)
143 if (voltage.Index < superIO.Voltages.Length) {
144 Sensor sensor = new Sensor(voltage.Name, voltage.Index,
145 voltage.Hidden, SensorType.Voltage, this, new[] {
146 new ParameterDescription("Ri [kΩ]", "Input resistance.\n" +
147 formula, voltage.Ri),
148 new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" +
149 formula, voltage.Rf),
150 new ParameterDescription("Vf [V]", "Reference voltage.\n" +
153 voltages.Add(sensor);
157 private static void GetBoardSpecificConfiguration(ISuperIO superIO,
158 Manufacturer manufacturer, Model model, out IList<Voltage> v,
159 out IList<Temperature> t, out IList<Fan> f, out IList<Ctrl> c,
160 out ReadValueDelegate readVoltage,
161 out ReadValueDelegate readTemperature,
162 out ReadValueDelegate readFan,
163 out ReadValueDelegate readControl,
164 out UpdateDelegate postUpdate, out Mutex mutex) {
165 readVoltage = (index) => superIO.Voltages[index];
166 readTemperature = (index) => superIO.Temperatures[index];
167 readFan = (index) => superIO.Fans[index];
168 readControl = (index) => superIO.Controls[index];
170 postUpdate = () => { };
173 v = new List<Voltage>();
174 t = new List<Temperature>();
176 c = new List<Ctrl>();
178 switch (superIO.Chip) {
185 GetITEConfigurationsA(superIO, manufacturer, model, v, t, f, c,
186 ref readFan, ref postUpdate, ref mutex);
193 GetITEConfigurationsB(superIO, manufacturer, model, v, t, f, c);
197 v.Add(new Voltage("VCC3V", 0, 150, 150));
198 v.Add(new Voltage("VSB3V", 1, 150, 150));
199 v.Add(new Voltage("Battery", 2, 150, 150));
200 for (int i = 0; i < superIO.Temperatures.Length; i++)
201 t.Add(new Temperature("Temperature #" + (i + 1), i));
202 for (int i = 0; i < superIO.Fans.Length; i++)
203 f.Add(new Fan("Fan #" + (i + 1), i));
213 GetFintekConfiguration(superIO, manufacturer, model, v, t, f);
217 GetWinbondConfigurationEHF(manufacturer, model, v, t, f);
220 case Chip.W83627DHGP:
223 GetWinbondConfigurationHG(manufacturer, model, v, t, f);
228 v.Add(new Voltage("CPU VCore", 0));
229 v.Add(new Voltage("Voltage #2", 1, true));
230 v.Add(new Voltage("Voltage #3", 2, true));
231 v.Add(new Voltage("AVCC", 3, 34, 51));
232 v.Add(new Voltage("Voltage #5", 4, true));
233 v.Add(new Voltage("5VSB", 5, 34, 51));
234 v.Add(new Voltage("VBAT", 6));
235 t.Add(new Temperature("CPU", 0));
236 t.Add(new Temperature("Auxiliary", 1));
237 t.Add(new Temperature("System", 2));
238 f.Add(new Fan("System Fan", 0));
239 f.Add(new Fan("CPU Fan", 1));
240 f.Add(new Fan("Auxiliary Fan", 2));
244 GetNuvotonConfigurationF(superIO, manufacturer, model, v, t, f, c);
248 GetNuvotonConfigurationD(superIO, manufacturer, model, v, t, f, c);
251 GetDefaultConfiguration(superIO, v, t, f, c);
256 private static void GetDefaultConfiguration(ISuperIO superIO,
257 IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c)
259 for (int i = 0; i < superIO.Voltages.Length; i++)
260 v.Add(new Voltage("Voltage #" + (i + 1), i, true));
261 for (int i = 0; i < superIO.Temperatures.Length; i++)
262 t.Add(new Temperature("Temperature #" + (i + 1), i));
263 for (int i = 0; i < superIO.Fans.Length; i++)
264 f.Add(new Fan("Fan #" + (i + 1), i));
265 for (int i = 0; i < superIO.Controls.Length; i++)
266 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
269 private static void GetITEConfigurationsA(ISuperIO superIO,
270 Manufacturer manufacturer, Model model,
271 IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c,
272 ref ReadValueDelegate readFan, ref UpdateDelegate postUpdate,
275 switch (manufacturer) {
276 case Manufacturer.ASUS:
278 case Model.Crosshair_III_Formula: // IT8720F
279 v.Add(new Voltage("VBat", 8));
280 t.Add(new Temperature("CPU", 0));
281 for (int i = 0; i < superIO.Fans.Length; i++)
282 f.Add(new Fan("Fan #" + (i + 1), i));
284 case Model.M2N_SLI_DELUXE:
285 v.Add(new Voltage("CPU VCore", 0));
286 v.Add(new Voltage("+3.3V", 1));
287 v.Add(new Voltage("+5V", 3, 6.8f, 10));
288 v.Add(new Voltage("+12V", 4, 30, 10));
289 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
290 v.Add(new Voltage("VBat", 8));
291 t.Add(new Temperature("CPU", 0));
292 t.Add(new Temperature("Motherboard", 1));
293 f.Add(new Fan("CPU Fan", 0));
294 f.Add(new Fan("Chassis Fan #1", 1));
295 f.Add(new Fan("Power Fan", 2));
297 case Model.M4A79XTD_EVO: // IT8720F
298 v.Add(new Voltage("+5V", 3, 6.8f, 10));
299 v.Add(new Voltage("VBat", 8));
300 t.Add(new Temperature("CPU", 0));
301 t.Add(new Temperature("Motherboard", 1));
302 f.Add(new Fan("CPU Fan", 0));
303 f.Add(new Fan("Chassis Fan #1", 1));
304 f.Add(new Fan("Chassis Fan #2", 2));
307 v.Add(new Voltage("CPU VCore", 0));
308 v.Add(new Voltage("Voltage #2", 1, true));
309 v.Add(new Voltage("Voltage #3", 2, true));
310 v.Add(new Voltage("Voltage #4", 3, true));
311 v.Add(new Voltage("Voltage #5", 4, true));
312 v.Add(new Voltage("Voltage #6", 5, true));
313 v.Add(new Voltage("Voltage #7", 6, true));
314 v.Add(new Voltage("Voltage #8", 7, true));
315 v.Add(new Voltage("VBat", 8));
316 for (int i = 0; i < superIO.Temperatures.Length; i++)
317 t.Add(new Temperature("Temperature #" + (i + 1), i));
318 for (int i = 0; i < superIO.Fans.Length; i++)
319 f.Add(new Fan("Fan #" + (i + 1), i));
320 for (int i = 0; i < superIO.Controls.Length; i++)
321 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
326 case Manufacturer.ASRock:
328 case Model.P55_Deluxe: // IT8720F
329 GetASRockConfiguration(superIO, v, t, f,
330 ref readFan, ref postUpdate, ref mutex);
333 v.Add(new Voltage("CPU VCore", 0));
334 v.Add(new Voltage("Voltage #2", 1, true));
335 v.Add(new Voltage("Voltage #3", 2, true));
336 v.Add(new Voltage("Voltage #4", 3, true));
337 v.Add(new Voltage("Voltage #5", 4, true));
338 v.Add(new Voltage("Voltage #6", 5, true));
339 v.Add(new Voltage("Voltage #7", 6, true));
340 v.Add(new Voltage("Voltage #8", 7, true));
341 v.Add(new Voltage("VBat", 8));
342 for (int i = 0; i < superIO.Temperatures.Length; i++)
343 t.Add(new Temperature("Temperature #" + (i + 1), i));
344 for (int i = 0; i < superIO.Fans.Length; i++)
345 f.Add(new Fan("Fan #" + (i + 1), i));
350 case Manufacturer.DFI:
352 case Model.LP_BI_P45_T2RS_Elite: // IT8718F
353 v.Add(new Voltage("CPU VCore", 0));
354 v.Add(new Voltage("FSB VTT", 1));
355 v.Add(new Voltage("+3.3V", 2));
356 v.Add(new Voltage("+5V", 3, 6.8f, 10));
357 v.Add(new Voltage("+12V", 4, 30, 10));
358 v.Add(new Voltage("NB Core", 5));
359 v.Add(new Voltage("VDIMM", 6));
360 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
361 v.Add(new Voltage("VBat", 8));
362 t.Add(new Temperature("CPU", 0));
363 t.Add(new Temperature("System", 1));
364 t.Add(new Temperature("Chipset", 2));
365 f.Add(new Fan("Fan #1", 0));
366 f.Add(new Fan("Fan #2", 1));
367 f.Add(new Fan("Fan #3", 2));
369 case Model.LP_DK_P55_T3eH9: // IT8720F
370 v.Add(new Voltage("CPU VCore", 0));
371 v.Add(new Voltage("VTT", 1));
372 v.Add(new Voltage("+3.3V", 2));
373 v.Add(new Voltage("+5V", 3, 6.8f, 10));
374 v.Add(new Voltage("+12V", 4, 30, 10));
375 v.Add(new Voltage("CPU PLL", 5));
376 v.Add(new Voltage("DRAM", 6));
377 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
378 v.Add(new Voltage("VBat", 8));
379 t.Add(new Temperature("Chipset", 0));
380 t.Add(new Temperature("CPU PWM", 1));
381 t.Add(new Temperature("CPU", 2));
382 f.Add(new Fan("Fan #1", 0));
383 f.Add(new Fan("Fan #2", 1));
384 f.Add(new Fan("Fan #3", 2));
387 v.Add(new Voltage("CPU VCore", 0));
388 v.Add(new Voltage("VTT", 1, true));
389 v.Add(new Voltage("+3.3V", 2, true));
390 v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
391 v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
392 v.Add(new Voltage("Voltage #6", 5, true));
393 v.Add(new Voltage("DRAM", 6, true));
394 v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
395 v.Add(new Voltage("VBat", 8));
396 for (int i = 0; i < superIO.Temperatures.Length; i++)
397 t.Add(new Temperature("Temperature #" + (i + 1), i));
398 for (int i = 0; i < superIO.Fans.Length; i++)
399 f.Add(new Fan("Fan #" + (i + 1), i));
400 for (int i = 0; i < superIO.Controls.Length; i++)
401 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
406 case Manufacturer.Gigabyte:
408 case Model._965P_S3: // IT8718F
409 v.Add(new Voltage("CPU VCore", 0));
410 v.Add(new Voltage("DRAM", 1));
411 v.Add(new Voltage("+3.3V", 2));
412 v.Add(new Voltage("+5V", 3, 6.8f, 10));
413 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
414 v.Add(new Voltage("VBat", 8));
415 t.Add(new Temperature("System", 0));
416 t.Add(new Temperature("CPU", 1));
417 f.Add(new Fan("CPU Fan", 0));
418 f.Add(new Fan("System Fan", 1));
420 case Model.EP45_DS3R: // IT8718F
421 case Model.EP45_UD3R:
423 v.Add(new Voltage("CPU VCore", 0));
424 v.Add(new Voltage("DRAM", 1));
425 v.Add(new Voltage("+3.3V", 2));
426 v.Add(new Voltage("+5V", 3, 6.8f, 10));
427 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
428 v.Add(new Voltage("VBat", 8));
429 t.Add(new Temperature("System", 0));
430 t.Add(new Temperature("CPU", 1));
431 f.Add(new Fan("CPU Fan", 0));
432 f.Add(new Fan("System Fan #2", 1));
433 f.Add(new Fan("Power Fan", 2));
434 f.Add(new Fan("System Fan #1", 3));
436 case Model.EX58_EXTREME: // IT8720F
437 v.Add(new Voltage("CPU VCore", 0));
438 v.Add(new Voltage("DRAM", 1));
439 v.Add(new Voltage("+5V", 3, 6.8f, 10));
440 v.Add(new Voltage("VBat", 8));
441 t.Add(new Temperature("System", 0));
442 t.Add(new Temperature("CPU", 1));
443 t.Add(new Temperature("Northbridge", 2));
444 f.Add(new Fan("CPU Fan", 0));
445 f.Add(new Fan("System Fan #2", 1));
446 f.Add(new Fan("Power Fan", 2));
447 f.Add(new Fan("System Fan #1", 3));
449 case Model.P35_DS3: // IT8718F
450 case Model.P35_DS3L: // IT8718F
451 v.Add(new Voltage("CPU VCore", 0));
452 v.Add(new Voltage("DRAM", 1));
453 v.Add(new Voltage("+3.3V", 2));
454 v.Add(new Voltage("+5V", 3, 6.8f, 10));
455 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
456 v.Add(new Voltage("VBat", 8));
457 t.Add(new Temperature("System", 0));
458 t.Add(new Temperature("CPU", 1));
459 f.Add(new Fan("CPU Fan", 0));
460 f.Add(new Fan("System Fan #1", 1));
461 f.Add(new Fan("System Fan #2", 2));
462 f.Add(new Fan("Power Fan", 3));
464 case Model.P55_UD4: // IT8720F
465 case Model.P55A_UD3: // IT8720F
466 case Model.P55M_UD4: // IT8720F
467 case Model.H55_USB3: // IT8720F
468 case Model.EX58_UD3R: // IT8720F
469 v.Add(new Voltage("CPU VCore", 0));
470 v.Add(new Voltage("DRAM", 1));
471 v.Add(new Voltage("+3.3V", 2));
472 v.Add(new Voltage("+5V", 3, 6.8f, 10));
473 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
474 v.Add(new Voltage("VBat", 8));
475 t.Add(new Temperature("System", 0));
476 t.Add(new Temperature("CPU", 2));
477 f.Add(new Fan("CPU Fan", 0));
478 f.Add(new Fan("System Fan #2", 1));
479 f.Add(new Fan("Power Fan", 2));
480 f.Add(new Fan("System Fan #1", 3));
482 case Model.H55N_USB3: // IT8720F
483 v.Add(new Voltage("CPU VCore", 0));
484 v.Add(new Voltage("DRAM", 1));
485 v.Add(new Voltage("+3.3V", 2));
486 v.Add(new Voltage("+5V", 3, 6.8f, 10));
487 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
488 v.Add(new Voltage("VBat", 8));
489 t.Add(new Temperature("System", 0));
490 t.Add(new Temperature("CPU", 2));
491 f.Add(new Fan("CPU Fan", 0));
492 f.Add(new Fan("System Fan", 1));
494 case Model.G41M_Combo: // IT8718F
495 case Model.G41MT_S2: // IT8718F
496 case Model.G41MT_S2P: // IT8718F
497 v.Add(new Voltage("CPU VCore", 0));
498 v.Add(new Voltage("DRAM", 1));
499 v.Add(new Voltage("+3.3V", 2));
500 v.Add(new Voltage("+5V", 3, 6.8f, 10));
501 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
502 v.Add(new Voltage("VBat", 8));
503 t.Add(new Temperature("CPU", 2));
504 f.Add(new Fan("CPU Fan", 0));
505 f.Add(new Fan("System Fan", 1));
507 case Model.GA_970A_UD3: // IT8720F
508 v.Add(new Voltage("CPU VCore", 0));
509 v.Add(new Voltage("DRAM", 1));
510 v.Add(new Voltage("+3.3V", 2));
511 v.Add(new Voltage("+5V", 3, 6.8f, 10));
512 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
513 v.Add(new Voltage("VBat", 8));
514 t.Add(new Temperature("System", 0));
515 t.Add(new Temperature("CPU", 1));
516 f.Add(new Fan("CPU Fan", 0));
517 f.Add(new Fan("System Fan #1", 1));
518 f.Add(new Fan("System Fan #2", 2));
519 f.Add(new Fan("Power Fan", 4));
520 c.Add(new Ctrl("PWM 1", 0));
521 c.Add(new Ctrl("PWM 2", 1));
522 c.Add(new Ctrl("PWM 3", 2));
524 case Model.GA_MA770T_UD3: // IT8720F
525 case Model.GA_MA770T_UD3P: // IT8720F
526 case Model.GA_MA790X_UD3P: // IT8720F
527 v.Add(new Voltage("CPU VCore", 0));
528 v.Add(new Voltage("DRAM", 1));
529 v.Add(new Voltage("+3.3V", 2));
530 v.Add(new Voltage("+5V", 3, 6.8f, 10));
531 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
532 v.Add(new Voltage("VBat", 8));
533 t.Add(new Temperature("System", 0));
534 t.Add(new Temperature("CPU", 1));
535 f.Add(new Fan("CPU Fan", 0));
536 f.Add(new Fan("System Fan #1", 1));
537 f.Add(new Fan("System Fan #2", 2));
538 f.Add(new Fan("Power Fan", 3));
540 case Model.GA_MA78LM_S2H: // IT8718F
541 v.Add(new Voltage("CPU VCore", 0));
542 v.Add(new Voltage("DRAM", 1));
543 v.Add(new Voltage("+3.3V", 2));
544 v.Add(new Voltage("+5V", 3, 6.8f, 10));
545 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
546 v.Add(new Voltage("VBat", 8));
547 t.Add(new Temperature("System", 0));
548 t.Add(new Temperature("CPU", 1));
549 t.Add(new Temperature("VRM", 2));
550 f.Add(new Fan("CPU Fan", 0));
551 f.Add(new Fan("System Fan #1", 1));
552 f.Add(new Fan("System Fan #2", 2));
553 f.Add(new Fan("Power Fan", 3));
555 case Model.GA_MA785GM_US2H: // IT8718F
556 case Model.GA_MA785GMT_UD2H: // IT8718F
557 v.Add(new Voltage("CPU VCore", 0));
558 v.Add(new Voltage("DRAM", 1));
559 v.Add(new Voltage("+3.3V", 2));
560 v.Add(new Voltage("+5V", 3, 6.8f, 10));
561 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
562 v.Add(new Voltage("VBat", 8));
563 t.Add(new Temperature("System", 0));
564 t.Add(new Temperature("CPU", 1));
565 f.Add(new Fan("CPU Fan", 0));
566 f.Add(new Fan("System Fan", 1));
567 f.Add(new Fan("NB Fan", 2));
569 case Model.X58A_UD3R: // IT8720F
570 v.Add(new Voltage("CPU VCore", 0));
571 v.Add(new Voltage("DRAM", 1));
572 v.Add(new Voltage("+3.3V", 2));
573 v.Add(new Voltage("+5V", 3, 6.8f, 10));
574 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
575 v.Add(new Voltage("VBat", 8));
576 t.Add(new Temperature("System", 0));
577 t.Add(new Temperature("CPU", 1));
578 t.Add(new Temperature("Northbridge", 2));
579 f.Add(new Fan("CPU Fan", 0));
580 f.Add(new Fan("System Fan #2", 1));
581 f.Add(new Fan("Power Fan", 2));
582 f.Add(new Fan("System Fan #1", 3));
585 v.Add(new Voltage("CPU VCore", 0));
586 v.Add(new Voltage("DRAM", 1, true));
587 v.Add(new Voltage("+3.3V", 2, true));
588 v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
589 v.Add(new Voltage("Voltage #5", 4, true));
590 v.Add(new Voltage("Voltage #6", 5, true));
591 v.Add(new Voltage("Voltage #7", 6, true));
592 v.Add(new Voltage("Voltage #8", 7, true));
593 v.Add(new Voltage("VBat", 8));
594 for (int i = 0; i < superIO.Temperatures.Length; i++)
595 t.Add(new Temperature("Temperature #" + (i + 1), i));
596 for (int i = 0; i < superIO.Fans.Length; i++)
597 f.Add(new Fan("Fan #" + (i + 1), i));
598 for (int i = 0; i < superIO.Controls.Length; i++)
599 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
605 v.Add(new Voltage("CPU VCore", 0));
606 v.Add(new Voltage("Voltage #2", 1, true));
607 v.Add(new Voltage("Voltage #3", 2, true));
608 v.Add(new Voltage("Voltage #4", 3, true));
609 v.Add(new Voltage("Voltage #5", 4, true));
610 v.Add(new Voltage("Voltage #6", 5, true));
611 v.Add(new Voltage("Voltage #7", 6, true));
612 v.Add(new Voltage("Voltage #8", 7, true));
613 v.Add(new Voltage("VBat", 8));
614 for (int i = 0; i < superIO.Temperatures.Length; i++)
615 t.Add(new Temperature("Temperature #" + (i + 1), i));
616 for (int i = 0; i < superIO.Fans.Length; i++)
617 f.Add(new Fan("Fan #" + (i + 1), i));
618 for (int i = 0; i < superIO.Controls.Length; i++)
619 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
624 private static void GetASRockConfiguration(ISuperIO superIO,
625 IList<Voltage> v, IList<Temperature> t, IList<Fan> f,
626 ref ReadValueDelegate readFan, ref UpdateDelegate postUpdate,
629 v.Add(new Voltage("CPU VCore", 0));
630 v.Add(new Voltage("+3.3V", 2));
631 v.Add(new Voltage("+12V", 4, 30, 10));
632 v.Add(new Voltage("+5V", 5, 6.8f, 10));
633 v.Add(new Voltage("VBat", 8));
634 t.Add(new Temperature("CPU", 0));
635 t.Add(new Temperature("Motherboard", 1));
636 f.Add(new Fan("CPU Fan", 0));
637 f.Add(new Fan("Chassis Fan #1", 1));
639 // this mutex is also used by the official ASRock tool
640 mutex = new Mutex(false, "ASRockOCMark");
642 bool exclusiveAccess = false;
644 exclusiveAccess = mutex.WaitOne(10, false);
645 } catch (AbandonedMutexException) { }
646 catch (InvalidOperationException) { }
648 // only read additional fans if we get exclusive access
649 if (exclusiveAccess) {
651 f.Add(new Fan("Chassis Fan #2", 2));
652 f.Add(new Fan("Chassis Fan #3", 3));
653 f.Add(new Fan("Power Fan", 4));
655 readFan = (index) => {
657 return superIO.Fans[index];
660 byte? gpio = superIO.ReadGPIO(7);
664 // read the last 3 fans based on GPIO 83-85
665 int[] masks = { 0x05, 0x03, 0x06 };
666 return (((gpio.Value >> 3) & 0x07) ==
667 masks[index - 2]) ? superIO.Fans[2] : null;
674 byte? gpio = superIO.ReadGPIO(7);
678 // prepare the GPIO 83-85 for the next update
679 int[] masks = { 0x05, 0x03, 0x06 };
681 (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3)));
682 fanIndex = (fanIndex + 1) % 3;
687 private static void GetITEConfigurationsB(ISuperIO superIO,
688 Manufacturer manufacturer, Model model,
689 IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c)
691 switch (manufacturer) {
692 case Manufacturer.ECS:
694 case Model.A890GXM_A: // IT8721F
695 v.Add(new Voltage("CPU VCore", 0));
696 v.Add(new Voltage("VDIMM", 1));
697 v.Add(new Voltage("NB Voltage", 2));
698 v.Add(new Voltage("Analog +3.3V", 3, 10, 10));
699 // v.Add(new Voltage("VDIMM", 6, true));
700 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
701 v.Add(new Voltage("VBat", 8, 10, 10));
702 t.Add(new Temperature("CPU", 0));
703 t.Add(new Temperature("System", 1));
704 t.Add(new Temperature("Northbridge", 2));
705 f.Add(new Fan("CPU Fan", 0));
706 f.Add(new Fan("System Fan", 1));
707 f.Add(new Fan("Power Fan", 2));
710 v.Add(new Voltage("Voltage #1", 0, true));
711 v.Add(new Voltage("Voltage #2", 1, true));
712 v.Add(new Voltage("Voltage #3", 2, true));
713 v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
714 v.Add(new Voltage("Voltage #5", 4, true));
715 v.Add(new Voltage("Voltage #6", 5, true));
716 v.Add(new Voltage("Voltage #7", 6, true));
717 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
718 v.Add(new Voltage("VBat", 8, 10, 10));
719 for (int i = 0; i < superIO.Temperatures.Length; i++)
720 t.Add(new Temperature("Temperature #" + (i + 1), i));
721 for (int i = 0; i < superIO.Fans.Length; i++)
722 f.Add(new Fan("Fan #" + (i + 1), i));
723 for (int i = 0; i < superIO.Controls.Length; i++)
724 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
728 case Manufacturer.Gigabyte:
730 case Model.H61M_DS2_REV_1_2: // IT8728F
731 case Model.H61M_USB3_B3_REV_2_0: // IT8728F
732 v.Add(new Voltage("VTT", 0));
733 v.Add(new Voltage("+12V", 2, 30.9f, 10));
734 v.Add(new Voltage("CPU VCore", 5));
735 v.Add(new Voltage("DRAM", 6));
736 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
737 v.Add(new Voltage("VBat", 8, 10, 10));
738 t.Add(new Temperature("System", 0));
739 t.Add(new Temperature("CPU", 2));
740 f.Add(new Fan("CPU Fan", 0));
741 f.Add(new Fan("System Fan", 1));
743 case Model.H67A_UD3H_B3: // IT8728F
744 case Model.H67A_USB3_B3: // IT8728F
745 v.Add(new Voltage("VTT", 0));
746 v.Add(new Voltage("+5V", 1, 15, 10));
747 v.Add(new Voltage("+12V", 2, 30.9f, 10));
748 v.Add(new Voltage("CPU VCore", 5));
749 v.Add(new Voltage("DRAM", 6));
750 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
751 v.Add(new Voltage("VBat", 8, 10, 10));
752 t.Add(new Temperature("System", 0));
753 t.Add(new Temperature("CPU", 2));
754 f.Add(new Fan("CPU Fan", 0));
755 f.Add(new Fan("System Fan #1", 1));
756 f.Add(new Fan("Power Fan", 2));
757 f.Add(new Fan("System Fan #2", 3));
759 case Model.Z68A_D3H_B3: // IT8728F
760 v.Add(new Voltage("VTT", 0));
761 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
762 v.Add(new Voltage("+12V", 2, 30.9f, 10));
763 v.Add(new Voltage("+5V", 3, 7.15f, 10));
764 v.Add(new Voltage("CPU VCore", 5));
765 v.Add(new Voltage("DRAM", 6));
766 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
767 v.Add(new Voltage("VBat", 8, 10, 10));
768 t.Add(new Temperature("System", 0));
769 t.Add(new Temperature("CPU", 2));
770 f.Add(new Fan("CPU Fan", 0));
771 f.Add(new Fan("System Fan #1", 1));
772 f.Add(new Fan("Power Fan", 2));
773 f.Add(new Fan("System Fan #2", 3));
775 case Model.P67A_UD3_B3: // IT8728F
776 case Model.P67A_UD3R_B3: // IT8728F
777 case Model.P67A_UD4_B3: // IT8728F
778 case Model.Z68AP_D3: // IT8728F
779 case Model.Z68X_UD3H_B3: // IT8728F
780 v.Add(new Voltage("VTT", 0));
781 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
782 v.Add(new Voltage("+12V", 2, 30.9f, 10));
783 v.Add(new Voltage("+5V", 3, 7.15f, 10));
784 v.Add(new Voltage("CPU VCore", 5));
785 v.Add(new Voltage("DRAM", 6));
786 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
787 v.Add(new Voltage("VBat", 8, 10, 10));
788 t.Add(new Temperature("System", 0));
789 t.Add(new Temperature("CPU", 2));
790 f.Add(new Fan("CPU Fan", 0));
791 f.Add(new Fan("System Fan #2", 1));
792 f.Add(new Fan("Power Fan", 2));
793 f.Add(new Fan("System Fan #1", 3));
795 case Model.Z68X_UD7_B3: // IT8728F
796 v.Add(new Voltage("VTT", 0));
797 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
798 v.Add(new Voltage("+12V", 2, 30.9f, 10));
799 v.Add(new Voltage("+5V", 3, 7.15f, 10));
800 v.Add(new Voltage("CPU VCore", 5));
801 v.Add(new Voltage("DRAM", 6));
802 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
803 v.Add(new Voltage("VBat", 8, 10, 10));
804 t.Add(new Temperature("System", 0));
805 t.Add(new Temperature("CPU", 1));
806 t.Add(new Temperature("System 3", 2));
807 f.Add(new Fan("CPU Fan", 0));
808 f.Add(new Fan("Power Fan", 1));
809 f.Add(new Fan("System Fan #1", 2));
810 f.Add(new Fan("System Fan #2", 3));
811 f.Add(new Fan("System Fan #3", 4));
814 v.Add(new Voltage("Voltage #1", 0, true));
815 v.Add(new Voltage("Voltage #2", 1, true));
816 v.Add(new Voltage("Voltage #3", 2, true));
817 v.Add(new Voltage("Voltage #4", 3, true));
818 v.Add(new Voltage("Voltage #5", 4, true));
819 v.Add(new Voltage("Voltage #6", 5, true));
820 v.Add(new Voltage("Voltage #7", 6, true));
821 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
822 v.Add(new Voltage("VBat", 8, 10, 10));
823 for (int i = 0; i < superIO.Temperatures.Length; i++)
824 t.Add(new Temperature("Temperature #" + (i + 1), i));
825 for (int i = 0; i < superIO.Fans.Length; i++)
826 f.Add(new Fan("Fan #" + (i + 1), i));
827 for (int i = 0; i < superIO.Controls.Length; i++)
828 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
832 case Manufacturer.Shuttle:
834 case Model.FH67: // IT8772E
835 v.Add(new Voltage("CPU VCore", 0));
836 v.Add(new Voltage("DRAM", 1));
837 v.Add(new Voltage("PCH VCCIO", 2));
838 v.Add(new Voltage("CPU VCCIO", 3));
839 v.Add(new Voltage("Graphic Voltage", 4));
840 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
841 v.Add(new Voltage("VBat", 8, 10, 10));
842 t.Add(new Temperature("System", 0));
843 t.Add(new Temperature("CPU", 1));
844 f.Add(new Fan("Fan #1", 0));
845 f.Add(new Fan("CPU Fan", 1));
848 v.Add(new Voltage("Voltage #1", 0, true));
849 v.Add(new Voltage("Voltage #2", 1, true));
850 v.Add(new Voltage("Voltage #3", 2, true));
851 v.Add(new Voltage("Voltage #4", 3, true));
852 v.Add(new Voltage("Voltage #5", 4, true));
853 v.Add(new Voltage("Voltage #6", 5, true));
854 v.Add(new Voltage("Voltage #7", 6, true));
855 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
856 v.Add(new Voltage("VBat", 8, 10, 10));
857 for (int i = 0; i < superIO.Temperatures.Length; i++)
858 t.Add(new Temperature("Temperature #" + (i + 1), i));
859 for (int i = 0; i < superIO.Fans.Length; i++)
860 f.Add(new Fan("Fan #" + (i + 1), i));
861 for (int i = 0; i < superIO.Controls.Length; i++)
862 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
867 v.Add(new Voltage("Voltage #1", 0, true));
868 v.Add(new Voltage("Voltage #2", 1, true));
869 v.Add(new Voltage("Voltage #3", 2, true));
870 v.Add(new Voltage("Voltage #4", 3, true));
871 v.Add(new Voltage("Voltage #5", 4, true));
872 v.Add(new Voltage("Voltage #6", 5, true));
873 v.Add(new Voltage("Voltage #7", 6, true));
874 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
875 v.Add(new Voltage("VBat", 8, 10, 10));
876 for (int i = 0; i < superIO.Temperatures.Length; i++)
877 t.Add(new Temperature("Temperature #" + (i + 1), i));
878 for (int i = 0; i < superIO.Fans.Length; i++)
879 f.Add(new Fan("Fan #" + (i + 1), i));
880 for (int i = 0; i < superIO.Controls.Length; i++)
881 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
886 private static void GetFintekConfiguration(ISuperIO superIO,
887 Manufacturer manufacturer, Model model,
888 IList<Voltage> v, IList<Temperature> t, IList<Fan> f)
890 switch (manufacturer) {
891 case Manufacturer.EVGA:
893 case Model.X58_SLI_Classified: // F71882
894 v.Add(new Voltage("VCC3V", 0, 150, 150));
895 v.Add(new Voltage("CPU VCore", 1, 47, 100));
896 v.Add(new Voltage("DIMM", 2, 47, 100));
897 v.Add(new Voltage("CPU VTT", 3, 24, 100));
898 v.Add(new Voltage("IOH Vcore", 4, 24, 100));
899 v.Add(new Voltage("+5V", 5, 51, 12));
900 v.Add(new Voltage("+12V", 6, 56, 6.8f));
901 v.Add(new Voltage("3VSB", 7, 150, 150));
902 v.Add(new Voltage("VBat", 8, 150, 150));
903 t.Add(new Temperature("CPU", 0));
904 t.Add(new Temperature("VREG", 1));
905 t.Add(new Temperature("System", 2));
906 f.Add(new Fan("CPU Fan", 0));
907 f.Add(new Fan("Power Fan", 1));
908 f.Add(new Fan("Chassis Fan", 2));
911 v.Add(new Voltage("VCC3V", 0, 150, 150));
912 v.Add(new Voltage("CPU VCore", 1));
913 v.Add(new Voltage("Voltage #3", 2, true));
914 v.Add(new Voltage("Voltage #4", 3, true));
915 v.Add(new Voltage("Voltage #5", 4, true));
916 v.Add(new Voltage("Voltage #6", 5, true));
917 v.Add(new Voltage("Voltage #7", 6, true));
918 v.Add(new Voltage("VSB3V", 7, 150, 150));
919 v.Add(new Voltage("VBat", 8, 150, 150));
920 for (int i = 0; i < superIO.Temperatures.Length; i++)
921 t.Add(new Temperature("Temperature #" + (i + 1), i));
922 for (int i = 0; i < superIO.Fans.Length; i++)
923 f.Add(new Fan("Fan #" + (i + 1), i));
928 v.Add(new Voltage("VCC3V", 0, 150, 150));
929 v.Add(new Voltage("CPU VCore", 1));
930 v.Add(new Voltage("Voltage #3", 2, true));
931 v.Add(new Voltage("Voltage #4", 3, true));
932 v.Add(new Voltage("Voltage #5", 4, true));
933 v.Add(new Voltage("Voltage #6", 5, true));
934 if (superIO.Chip != Chip.F71808E)
935 v.Add(new Voltage("Voltage #7", 6, true));
936 v.Add(new Voltage("VSB3V", 7, 150, 150));
937 v.Add(new Voltage("VBat", 8, 150, 150));
938 for (int i = 0; i < superIO.Temperatures.Length; i++)
939 t.Add(new Temperature("Temperature #" + (i + 1), i));
940 for (int i = 0; i < superIO.Fans.Length; i++)
941 f.Add(new Fan("Fan #" + (i + 1), i));
946 private static void GetNuvotonConfigurationF(ISuperIO superIO,
947 Manufacturer manufacturer, Model model,
948 IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c)
950 switch (manufacturer) {
951 case Manufacturer.ASUS:
953 case Model.P8P67: // NCT6776F
954 case Model.P8P67_EVO: // NCT6776F
955 case Model.P8P67_PRO: // NCT6776F
956 v.Add(new Voltage("CPU VCore", 0));
957 v.Add(new Voltage("+12V", 1, 11, 1));
958 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
959 v.Add(new Voltage("+3.3V", 3, 34, 34));
960 v.Add(new Voltage("+5V", 4, 12, 3));
961 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
962 v.Add(new Voltage("VBAT", 8, 34, 34));
963 t.Add(new Temperature("CPU", 0));
964 t.Add(new Temperature("Auxiliary", 2));
965 t.Add(new Temperature("Motherboard", 3));
966 f.Add(new Fan("Chassis Fan #1", 0));
967 f.Add(new Fan("CPU Fan", 1));
968 f.Add(new Fan("Power Fan", 2));
969 f.Add(new Fan("Chassis Fan #2", 3));
970 c.Add(new Ctrl("Chassis Fan #2", 0));
971 c.Add(new Ctrl("CPU Fan", 1));
972 c.Add(new Ctrl("Chassis Fan #1", 2));
974 case Model.P8P67_M_PRO: // NCT6776F
975 v.Add(new Voltage("CPU VCore", 0));
976 v.Add(new Voltage("+12V", 1, 11, 1));
977 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
978 v.Add(new Voltage("+3.3V", 3, 34, 34));
979 v.Add(new Voltage("+5V", 4, 12, 3));
980 v.Add(new Voltage("Voltage #6", 5, true));
981 v.Add(new Voltage("Voltage #7", 6, true));
982 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
983 v.Add(new Voltage("VBAT", 8, 34, 34));
984 t.Add(new Temperature("CPU", 0));
985 t.Add(new Temperature("Motherboard", 3));
986 f.Add(new Fan("Chassis Fan #1", 0));
987 f.Add(new Fan("CPU Fan", 1));
988 f.Add(new Fan("Chassis Fan #2", 2));
989 f.Add(new Fan("Power Fan", 3));
990 f.Add(new Fan("Auxiliary Fan", 4));
992 case Model.P8Z68_V_PRO: // NCT6776F
993 v.Add(new Voltage("CPU VCore", 0));
994 v.Add(new Voltage("+12V", 1, 11, 1));
995 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
996 v.Add(new Voltage("+3.3V", 3, 34, 34));
997 v.Add(new Voltage("+5V", 4, 12, 3));
998 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
999 v.Add(new Voltage("VBAT", 8, 34, 34));
1000 t.Add(new Temperature("CPU", 0));
1001 t.Add(new Temperature("Auxiliary", 2));
1002 t.Add(new Temperature("Motherboard", 3));
1003 for (int i = 0; i < superIO.Fans.Length; i++)
1004 f.Add(new Fan("Fan #" + (i + 1), i));
1005 for (int i = 0; i < superIO.Controls.Length; i++)
1006 c.Add(new Ctrl("Fan #" + (i + 1), i));
1008 case Model.P9X79: // NCT6776F
1009 v.Add(new Voltage("CPU VCore", 0));
1010 v.Add(new Voltage("+12V", 1, 11, 1));
1011 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
1012 v.Add(new Voltage("+3.3V", 3, 34, 34));
1013 v.Add(new Voltage("+5V", 4, 12, 3));
1014 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
1015 v.Add(new Voltage("VBAT", 8, 34, 34));
1016 t.Add(new Temperature("CPU", 0));
1017 t.Add(new Temperature("Motherboard", 3));
1018 for (int i = 0; i < superIO.Fans.Length; i++)
1019 f.Add(new Fan("Fan #" + (i + 1), i));
1020 for (int i = 0; i < superIO.Controls.Length; i++)
1021 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1024 v.Add(new Voltage("CPU VCore", 0));
1025 v.Add(new Voltage("Voltage #2", 1, true));
1026 v.Add(new Voltage("AVCC", 2, 34, 34));
1027 v.Add(new Voltage("3VCC", 3, 34, 34));
1028 v.Add(new Voltage("Voltage #5", 4, true));
1029 v.Add(new Voltage("Voltage #6", 5, true));
1030 v.Add(new Voltage("Voltage #7", 6, true));
1031 v.Add(new Voltage("3VSB", 7, 34, 34));
1032 v.Add(new Voltage("VBAT", 8, 34, 34));
1033 t.Add(new Temperature("CPU Core", 0));
1034 t.Add(new Temperature("Temperature #1", 1));
1035 t.Add(new Temperature("Temperature #2", 2));
1036 t.Add(new Temperature("Temperature #3", 3));
1037 for (int i = 0; i < superIO.Fans.Length; i++)
1038 f.Add(new Fan("Fan #" + (i + 1), i));
1039 for (int i = 0; i < superIO.Controls.Length; i++)
1040 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1045 v.Add(new Voltage("CPU VCore", 0));
1046 v.Add(new Voltage("Voltage #2", 1, true));
1047 v.Add(new Voltage("AVCC", 2, 34, 34));
1048 v.Add(new Voltage("3VCC", 3, 34, 34));
1049 v.Add(new Voltage("Voltage #5", 4, true));
1050 v.Add(new Voltage("Voltage #6", 5, true));
1051 v.Add(new Voltage("Voltage #7", 6, true));
1052 v.Add(new Voltage("3VSB", 7, 34, 34));
1053 v.Add(new Voltage("VBAT", 8, 34, 34));
1054 t.Add(new Temperature("CPU Core", 0));
1055 t.Add(new Temperature("Temperature #1", 1));
1056 t.Add(new Temperature("Temperature #2", 2));
1057 t.Add(new Temperature("Temperature #3", 3));
1058 for (int i = 0; i < superIO.Fans.Length; i++)
1059 f.Add(new Fan("Fan #" + (i + 1), i));
1060 for (int i = 0; i < superIO.Controls.Length; i++)
1061 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1066 private static void GetNuvotonConfigurationD(ISuperIO superIO,
1067 Manufacturer manufacturer, Model model,
1068 IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c)
1070 switch (manufacturer) {
1071 case Manufacturer.ASUS:
1073 case Model.P8Z77_V: // NCT6779D
1074 v.Add(new Voltage("CPU VCore", 0));
1075 v.Add(new Voltage("Voltage #2", 1, true));
1076 v.Add(new Voltage("AVCC", 2, 34, 34));
1077 v.Add(new Voltage("3VCC", 3, 34, 34));
1078 v.Add(new Voltage("Voltage #5", 4, true));
1079 v.Add(new Voltage("Voltage #6", 5, true));
1080 v.Add(new Voltage("Voltage #7", 6, true));
1081 v.Add(new Voltage("3VSB", 7, 34, 34));
1082 v.Add(new Voltage("VBAT", 8, 34, 34));
1083 v.Add(new Voltage("VTT", 9));
1084 v.Add(new Voltage("Voltage #11", 10, true));
1085 v.Add(new Voltage("Voltage #12", 11, true));
1086 v.Add(new Voltage("Voltage #13", 12, true));
1087 v.Add(new Voltage("Voltage #14", 13, true));
1088 v.Add(new Voltage("Voltage #15", 14, true));
1089 t.Add(new Temperature("CPU Core", 0));
1090 t.Add(new Temperature("Auxiliary", 1));
1091 t.Add(new Temperature("Motherboard", 2));
1092 f.Add(new Fan("Chassis Fan #1", 0));
1093 f.Add(new Fan("CPU Fan", 1));
1094 f.Add(new Fan("Chassis Fan #2", 2));
1095 f.Add(new Fan("Chassis Fan #3", 3));
1096 c.Add(new Ctrl("Chassis Fan #1", 0));
1097 c.Add(new Ctrl("CPU Fan", 1));
1098 c.Add(new Ctrl("Chassis Fan #2", 2));
1099 c.Add(new Ctrl("Chassis Fan #3", 3));
1102 v.Add(new Voltage("CPU VCore", 0));
1103 v.Add(new Voltage("Voltage #2", 1, true));
1104 v.Add(new Voltage("AVCC", 2, 34, 34));
1105 v.Add(new Voltage("3VCC", 3, 34, 34));
1106 v.Add(new Voltage("Voltage #5", 4, true));
1107 v.Add(new Voltage("Voltage #6", 5, true));
1108 v.Add(new Voltage("Voltage #7", 6, true));
1109 v.Add(new Voltage("3VSB", 7, 34, 34));
1110 v.Add(new Voltage("VBAT", 8, 34, 34));
1111 v.Add(new Voltage("VTT", 9));
1112 v.Add(new Voltage("Voltage #11", 10, true));
1113 v.Add(new Voltage("Voltage #12", 11, true));
1114 v.Add(new Voltage("Voltage #13", 12, true));
1115 v.Add(new Voltage("Voltage #14", 13, true));
1116 v.Add(new Voltage("Voltage #15", 14, true));
1117 t.Add(new Temperature("CPU Core", 0));
1118 t.Add(new Temperature("Temperature #1", 1));
1119 t.Add(new Temperature("Temperature #2", 2));
1120 t.Add(new Temperature("Temperature #3", 3));
1121 t.Add(new Temperature("Temperature #4", 4));
1122 t.Add(new Temperature("Temperature #5", 5));
1123 t.Add(new Temperature("Temperature #6", 6));
1124 for (int i = 0; i < superIO.Fans.Length; i++)
1125 f.Add(new Fan("Fan #" + (i + 1), i));
1126 for (int i = 0; i < superIO.Controls.Length; i++)
1127 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1132 v.Add(new Voltage("CPU VCore", 0));
1133 v.Add(new Voltage("Voltage #2", 1, true));
1134 v.Add(new Voltage("AVCC", 2, 34, 34));
1135 v.Add(new Voltage("3VCC", 3, 34, 34));
1136 v.Add(new Voltage("Voltage #5", 4, true));
1137 v.Add(new Voltage("Voltage #6", 5, true));
1138 v.Add(new Voltage("Voltage #7", 6, true));
1139 v.Add(new Voltage("3VSB", 7, 34, 34));
1140 v.Add(new Voltage("VBAT", 8, 34, 34));
1141 v.Add(new Voltage("VTT", 9));
1142 v.Add(new Voltage("Voltage #11", 10, true));
1143 v.Add(new Voltage("Voltage #12", 11, true));
1144 v.Add(new Voltage("Voltage #13", 12, true));
1145 v.Add(new Voltage("Voltage #14", 13, true));
1146 v.Add(new Voltage("Voltage #15", 14, true));
1147 t.Add(new Temperature("CPU Core", 0));
1148 t.Add(new Temperature("Temperature #1", 1));
1149 t.Add(new Temperature("Temperature #2", 2));
1150 t.Add(new Temperature("Temperature #3", 3));
1151 t.Add(new Temperature("Temperature #4", 4));
1152 t.Add(new Temperature("Temperature #5", 5));
1153 t.Add(new Temperature("Temperature #6", 6));
1154 for (int i = 0; i < superIO.Fans.Length; i++)
1155 f.Add(new Fan("Fan #" + (i + 1), i));
1156 for (int i = 0; i < superIO.Controls.Length; i++)
1157 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1162 private static void GetWinbondConfigurationEHF(Manufacturer manufacturer,
1163 Model model, IList<Voltage> v, IList<Temperature> t, IList<Fan> f)
1165 switch (manufacturer) {
1166 case Manufacturer.ASRock:
1168 case Model.AOD790GX_128M: // W83627EHF
1169 v.Add(new Voltage("CPU VCore", 0));
1170 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
1171 v.Add(new Voltage("+3.3V", 4, 10, 10));
1172 v.Add(new Voltage("+5V", 5, 20, 10));
1173 v.Add(new Voltage("+12V", 6, 28, 5));
1174 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
1175 v.Add(new Voltage("VBAT", 8, 34, 34));
1176 t.Add(new Temperature("CPU", 0));
1177 t.Add(new Temperature("Motherboard", 2));
1178 f.Add(new Fan("CPU Fan", 0));
1179 f.Add(new Fan("Chassis Fan", 1));
1182 v.Add(new Voltage("CPU VCore", 0));
1183 v.Add(new Voltage("Voltage #2", 1, true));
1184 v.Add(new Voltage("AVCC", 2, 34, 34));
1185 v.Add(new Voltage("3VCC", 3, 34, 34));
1186 v.Add(new Voltage("Voltage #5", 4, true));
1187 v.Add(new Voltage("Voltage #6", 5, true));
1188 v.Add(new Voltage("Voltage #7", 6, true));
1189 v.Add(new Voltage("3VSB", 7, 34, 34));
1190 v.Add(new Voltage("VBAT", 8, 34, 34));
1191 v.Add(new Voltage("Voltage #10", 9, true));
1192 t.Add(new Temperature("CPU", 0));
1193 t.Add(new Temperature("Auxiliary", 1));
1194 t.Add(new Temperature("System", 2));
1195 f.Add(new Fan("System Fan", 0));
1196 f.Add(new Fan("CPU Fan", 1));
1197 f.Add(new Fan("Auxiliary Fan", 2));
1198 f.Add(new Fan("CPU Fan #2", 3));
1199 f.Add(new Fan("Auxiliary Fan #2", 4));
1203 v.Add(new Voltage("CPU VCore", 0));
1204 v.Add(new Voltage("Voltage #2", 1, true));
1205 v.Add(new Voltage("AVCC", 2, 34, 34));
1206 v.Add(new Voltage("3VCC", 3, 34, 34));
1207 v.Add(new Voltage("Voltage #5", 4, true));
1208 v.Add(new Voltage("Voltage #6", 5, true));
1209 v.Add(new Voltage("Voltage #7", 6, true));
1210 v.Add(new Voltage("3VSB", 7, 34, 34));
1211 v.Add(new Voltage("VBAT", 8, 34, 34));
1212 v.Add(new Voltage("Voltage #10", 9, true));
1213 t.Add(new Temperature("CPU", 0));
1214 t.Add(new Temperature("Auxiliary", 1));
1215 t.Add(new Temperature("System", 2));
1216 f.Add(new Fan("System Fan", 0));
1217 f.Add(new Fan("CPU Fan", 1));
1218 f.Add(new Fan("Auxiliary Fan", 2));
1219 f.Add(new Fan("CPU Fan #2", 3));
1220 f.Add(new Fan("Auxiliary Fan #2", 4));
1225 private static void GetWinbondConfigurationHG(Manufacturer manufacturer,
1226 Model model, IList<Voltage> v, IList<Temperature> t, IList<Fan> f)
1228 switch (manufacturer) {
1229 case Manufacturer.ASRock:
1231 case Model._880GMH_USB3: // W83627DHG-P
1232 v.Add(new Voltage("CPU VCore", 0));
1233 v.Add(new Voltage("+3.3V", 3, 34, 34));
1234 v.Add(new Voltage("+5V", 5, 15, 7.5f));
1235 v.Add(new Voltage("+12V", 6, 56, 10));
1236 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
1237 v.Add(new Voltage("VBAT", 8, 34, 34));
1238 t.Add(new Temperature("CPU", 0));
1239 t.Add(new Temperature("Motherboard", 2));
1240 f.Add(new Fan("Chassis Fan", 0));
1241 f.Add(new Fan("CPU Fan", 1));
1242 f.Add(new Fan("Power Fan", 2));
1245 v.Add(new Voltage("CPU VCore", 0));
1246 v.Add(new Voltage("Voltage #2", 1, true));
1247 v.Add(new Voltage("AVCC", 2, 34, 34));
1248 v.Add(new Voltage("3VCC", 3, 34, 34));
1249 v.Add(new Voltage("Voltage #5", 4, true));
1250 v.Add(new Voltage("Voltage #6", 5, true));
1251 v.Add(new Voltage("Voltage #7", 6, true));
1252 v.Add(new Voltage("3VSB", 7, 34, 34));
1253 v.Add(new Voltage("VBAT", 8, 34, 34));
1254 t.Add(new Temperature("CPU", 0));
1255 t.Add(new Temperature("Auxiliary", 1));
1256 t.Add(new Temperature("System", 2));
1257 f.Add(new Fan("System Fan", 0));
1258 f.Add(new Fan("CPU Fan", 1));
1259 f.Add(new Fan("Auxiliary Fan", 2));
1260 f.Add(new Fan("CPU Fan #2", 3));
1261 f.Add(new Fan("Auxiliary Fan #2", 4));
1265 case Manufacturer.ASUS:
1267 case Model.P6T: // W83667HG
1268 case Model.P6X58D_E: // W83667HG
1269 case Model.Rampage_II_GENE: // W83667HG
1270 v.Add(new Voltage("CPU VCore", 0));
1271 v.Add(new Voltage("+12V", 1, 11.5f, 1.91f));
1272 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
1273 v.Add(new Voltage("+3.3V", 3, 34, 34));
1274 v.Add(new Voltage("+5V", 4, 15, 7.5f));
1275 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
1276 v.Add(new Voltage("VBAT", 8, 34, 34));
1277 t.Add(new Temperature("CPU", 0));
1278 t.Add(new Temperature("Motherboard", 2));
1279 f.Add(new Fan("Chassis Fan #1", 0));
1280 f.Add(new Fan("CPU Fan", 1));
1281 f.Add(new Fan("Power Fan", 2));
1282 f.Add(new Fan("Chassis Fan #2", 3));
1283 f.Add(new Fan("Chassis Fan #3", 4));
1285 case Model.Rampage_Extreme: // W83667HG
1286 v.Add(new Voltage("CPU VCore", 0));
1287 v.Add(new Voltage("+12V", 1, 12, 2));
1288 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
1289 v.Add(new Voltage("+3.3V", 3, 34, 34));
1290 v.Add(new Voltage("+5V", 4, 15, 7.5f));
1291 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
1292 v.Add(new Voltage("VBAT", 8, 34, 34));
1293 t.Add(new Temperature("CPU", 0));
1294 t.Add(new Temperature("Motherboard", 2));
1295 f.Add(new Fan("Chassis Fan #1", 0));
1296 f.Add(new Fan("CPU Fan", 1));
1297 f.Add(new Fan("Power Fan", 2));
1298 f.Add(new Fan("Chassis Fan #2", 3));
1299 f.Add(new Fan("Chassis Fan #3", 4));
1302 v.Add(new Voltage("CPU VCore", 0));
1303 v.Add(new Voltage("Voltage #2", 1, true));
1304 v.Add(new Voltage("AVCC", 2, 34, 34));
1305 v.Add(new Voltage("3VCC", 3, 34, 34));
1306 v.Add(new Voltage("Voltage #5", 4, true));
1307 v.Add(new Voltage("Voltage #6", 5, true));
1308 v.Add(new Voltage("Voltage #7", 6, true));
1309 v.Add(new Voltage("3VSB", 7, 34, 34));
1310 v.Add(new Voltage("VBAT", 8, 34, 34));
1311 t.Add(new Temperature("CPU", 0));
1312 t.Add(new Temperature("Auxiliary", 1));
1313 t.Add(new Temperature("System", 2));
1314 f.Add(new Fan("System Fan", 0));
1315 f.Add(new Fan("CPU Fan", 1));
1316 f.Add(new Fan("Auxiliary Fan", 2));
1317 f.Add(new Fan("CPU Fan #2", 3));
1318 f.Add(new Fan("Auxiliary Fan #2", 4));
1323 v.Add(new Voltage("CPU VCore", 0));
1324 v.Add(new Voltage("Voltage #2", 1, true));
1325 v.Add(new Voltage("AVCC", 2, 34, 34));
1326 v.Add(new Voltage("3VCC", 3, 34, 34));
1327 v.Add(new Voltage("Voltage #5", 4, true));
1328 v.Add(new Voltage("Voltage #6", 5, true));
1329 v.Add(new Voltage("Voltage #7", 6, true));
1330 v.Add(new Voltage("3VSB", 7, 34, 34));
1331 v.Add(new Voltage("VBAT", 8, 34, 34));
1332 t.Add(new Temperature("CPU", 0));
1333 t.Add(new Temperature("Auxiliary", 1));
1334 t.Add(new Temperature("System", 2));
1335 f.Add(new Fan("System Fan", 0));
1336 f.Add(new Fan("CPU Fan", 1));
1337 f.Add(new Fan("Auxiliary Fan", 2));
1338 f.Add(new Fan("CPU Fan #2", 3));
1339 f.Add(new Fan("Auxiliary Fan #2", 4));
1344 public override HardwareType HardwareType {
1345 get { return HardwareType.SuperIO; }
1348 public override IHardware Parent {
1349 get { return mainboard; }
1353 public override string GetReport() {
1354 return superIO.GetReport();
1357 public override void Update() {
1360 foreach (Sensor sensor in voltages) {
1361 float? value = readVoltage(sensor.Index);
1362 if (value.HasValue) {
1363 sensor.Value = value + (value - sensor.Parameters[2].Value) *
1364 sensor.Parameters[0].Value / sensor.Parameters[1].Value;
1365 ActivateSensor(sensor);
1369 foreach (Sensor sensor in temperatures) {
1370 float? value = readTemperature(sensor.Index);
1371 if (value.HasValue) {
1372 sensor.Value = value + sensor.Parameters[0].Value;
1373 ActivateSensor(sensor);
1377 foreach (Sensor sensor in fans) {
1378 float? value = readFan(sensor.Index);
1379 if (value.HasValue) {
1380 sensor.Value = value;
1381 if (value.Value > 0)
1382 ActivateSensor(sensor);
1386 foreach (Sensor sensor in controls) {
1387 float? value = readControl(sensor.Index);
1388 sensor.Value = value;
1394 public override void Close() {
1395 foreach (Sensor sensor in controls) {
1396 // restore all controls back to default
1397 superIO.SetControl(sensor.Index, null);
1402 private class Voltage {
1403 public readonly string Name;
1404 public readonly int Index;
1405 public readonly float Ri;
1406 public readonly float Rf;
1407 public readonly float Vf;
1408 public readonly bool Hidden;
1410 public Voltage(string name, int index) :
1411 this(name, index, false) { }
1413 public Voltage(string name, int index, bool hidden) :
1414 this(name, index, 0, 1, 0, hidden) { }
1416 public Voltage(string name, int index, float ri, float rf) :
1417 this(name, index, ri, rf, 0, false) { }
1419 // float ri = 0, float rf = 1, float vf = 0, bool hidden = false)
1421 public Voltage(string name, int index,
1422 float ri, float rf, float vf, bool hidden)
1429 this.Hidden = hidden;
1433 private class Temperature {
1434 public readonly string Name;
1435 public readonly int Index;
1437 public Temperature(string name, int index) {
1444 public readonly string Name;
1445 public readonly int Index;
1447 public Fan(string name, int index) {
1453 private class Ctrl {
1454 public readonly string Name;
1455 public readonly int Index;
1457 public Ctrl(string name, int index) {