Converted project to VisualStudio 2012.
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-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
12 using System.Collections.Generic;
13 using System.Globalization;
14 using System.Threading;
15 using OpenHardwareMonitor.Hardware.LPC;
17 namespace OpenHardwareMonitor.Hardware.Mainboard {
18 internal class SuperIOHardware : Hardware {
20 private readonly Mainboard mainboard;
21 private readonly ISuperIO superIO;
23 private readonly List<Sensor> voltages = new List<Sensor>();
24 private readonly List<Sensor> temperatures = new List<Sensor>();
25 private readonly List<Sensor> fans = new List<Sensor>();
26 private readonly List<Sensor> controls = new List<Sensor>();
28 private delegate float? ReadValueDelegate(int index);
29 private delegate void UpdateDelegate();
31 // delegates for mainboard specific sensor reading code
32 private readonly ReadValueDelegate readVoltage;
33 private readonly ReadValueDelegate readTemperature;
34 private readonly ReadValueDelegate readFan;
35 private readonly ReadValueDelegate readControl;
37 // delegate for post update mainboard specific code
38 private readonly UpdateDelegate postUpdate;
40 // mainboard specific mutex
41 private readonly Mutex mutex;
43 public SuperIOHardware(Mainboard mainboard, ISuperIO superIO,
44 Manufacturer manufacturer, Model model, ISettings settings)
45 : base(ChipName.GetName(superIO.Chip), new Identifier("lpc",
46 superIO.Chip.ToString().ToLower(CultureInfo.InvariantCulture)),
49 this.mainboard = mainboard;
50 this.superIO = superIO;
52 this.readVoltage = (index) => superIO.Voltages[index];
53 this.readTemperature = (index) => superIO.Temperatures[index];
54 this.readFan = (index) => superIO.Fans[index];
55 this.readControl = (index) => superIO.Controls[index];
57 this.postUpdate = () => { };
59 List<Voltage> v = new List<Voltage>();
60 List<Temperature> t = new List<Temperature>();
61 List<Fan> f = new List<Fan>();
62 List<Ctrl> c = new List<Ctrl>();
64 switch (superIO.Chip) {
71 switch (manufacturer) {
72 case Manufacturer.ASUS:
74 case Model.Crosshair_III_Formula: // IT8720F
75 v.Add(new Voltage("VBat", 8));
76 t.Add(new Temperature("CPU", 0));
77 for (int i = 0; i < superIO.Fans.Length; i++)
78 f.Add(new Fan("Fan #" + (i + 1), i));
80 case Model.M2N_SLI_DELUXE:
81 v.Add(new Voltage("CPU VCore", 0));
82 v.Add(new Voltage("+3.3V", 1));
83 v.Add(new Voltage("+5V", 3, 6.8f, 10));
84 v.Add(new Voltage("+12V", 4, 30, 10));
85 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
86 v.Add(new Voltage("VBat", 8));
87 t.Add(new Temperature("CPU", 0));
88 t.Add(new Temperature("Motherboard", 1));
89 f.Add(new Fan("CPU Fan", 0));
90 f.Add(new Fan("Chassis Fan #1", 1));
91 f.Add(new Fan("Power Fan", 2));
93 case Model.M4A79XTD_EVO: // IT8720F
94 v.Add(new Voltage("+5V", 3, 6.8f, 10));
95 v.Add(new Voltage("VBat", 8));
96 t.Add(new Temperature("CPU", 0));
97 t.Add(new Temperature("Motherboard", 1));
98 f.Add(new Fan("CPU Fan", 0));
99 f.Add(new Fan("Chassis Fan #1", 1));
100 f.Add(new Fan("Chassis Fan #2", 2));
103 v.Add(new Voltage("CPU VCore", 0));
104 v.Add(new Voltage("Voltage #2", 1, true));
105 v.Add(new Voltage("Voltage #3", 2, true));
106 v.Add(new Voltage("Voltage #4", 3, true));
107 v.Add(new Voltage("Voltage #5", 4, true));
108 v.Add(new Voltage("Voltage #6", 5, true));
109 v.Add(new Voltage("Voltage #7", 6, true));
110 v.Add(new Voltage("Voltage #8", 7, true));
111 v.Add(new Voltage("VBat", 8));
112 for (int i = 0; i < superIO.Temperatures.Length; i++)
113 t.Add(new Temperature("Temperature #" + (i + 1), i));
114 for (int i = 0; i < superIO.Fans.Length; i++)
115 f.Add(new Fan("Fan #" + (i + 1), i));
116 for (int i = 0; i < superIO.Controls.Length; i++)
117 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
122 case Manufacturer.ASRock:
124 case Model.P55_Deluxe: // IT8720F
126 v.Add(new Voltage("CPU VCore", 0));
127 v.Add(new Voltage("+3.3V", 2));
128 v.Add(new Voltage("+12V", 4, 30, 10));
129 v.Add(new Voltage("+5V", 5, 6.8f, 10));
130 v.Add(new Voltage("VBat", 8));
131 t.Add(new Temperature("CPU", 0));
132 t.Add(new Temperature("Motherboard", 1));
133 f.Add(new Fan("CPU Fan", 0));
134 f.Add(new Fan("Chassis Fan #1", 1));
136 // this mutex is also used by the official ASRock tool
137 mutex = new Mutex(false, "ASRockOCMark");
139 bool exclusiveAccess = false;
141 exclusiveAccess = mutex.WaitOne(10, false);
142 } catch (AbandonedMutexException) { }
143 catch (InvalidOperationException) { }
145 // only read additional fans if we get exclusive access
146 if (exclusiveAccess) {
148 f.Add(new Fan("Chassis Fan #2", 2));
149 f.Add(new Fan("Chassis Fan #3", 3));
150 f.Add(new Fan("Power Fan", 4));
152 readFan = (index) => {
154 return superIO.Fans[index];
157 byte? gpio = superIO.ReadGPIO(7);
161 // read the last 3 fans based on GPIO 83-85
162 int[] masks = { 0x05, 0x03, 0x06 };
163 return (((gpio.Value >> 3) & 0x07) ==
164 masks[index - 2]) ? superIO.Fans[2] : null;
171 byte? gpio = superIO.ReadGPIO(7);
175 // prepare the GPIO 83-85 for the next update
176 int[] masks = { 0x05, 0x03, 0x06 };
178 (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3)));
179 fanIndex = (fanIndex + 1) % 3;
185 v.Add(new Voltage("CPU VCore", 0));
186 v.Add(new Voltage("Voltage #2", 1, true));
187 v.Add(new Voltage("Voltage #3", 2, true));
188 v.Add(new Voltage("Voltage #4", 3, true));
189 v.Add(new Voltage("Voltage #5", 4, true));
190 v.Add(new Voltage("Voltage #6", 5, true));
191 v.Add(new Voltage("Voltage #7", 6, true));
192 v.Add(new Voltage("Voltage #8", 7, true));
193 v.Add(new Voltage("VBat", 8));
194 for (int i = 0; i < superIO.Temperatures.Length; i++)
195 t.Add(new Temperature("Temperature #" + (i + 1), i));
196 for (int i = 0; i < superIO.Fans.Length; i++)
197 f.Add(new Fan("Fan #" + (i + 1), i));
202 case Manufacturer.DFI:
204 case Model.LP_BI_P45_T2RS_Elite: // IT8718F
205 v.Add(new Voltage("CPU VCore", 0));
206 v.Add(new Voltage("FSB VTT", 1));
207 v.Add(new Voltage("+3.3V", 2));
208 v.Add(new Voltage("+5V", 3, 6.8f, 10));
209 v.Add(new Voltage("+12V", 4, 30, 10));
210 v.Add(new Voltage("NB Core", 5));
211 v.Add(new Voltage("VDIMM", 6));
212 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
213 v.Add(new Voltage("VBat", 8));
214 t.Add(new Temperature("CPU", 0));
215 t.Add(new Temperature("System", 1));
216 t.Add(new Temperature("Chipset", 2));
217 f.Add(new Fan("Fan #1", 0));
218 f.Add(new Fan("Fan #2", 1));
219 f.Add(new Fan("Fan #3", 2));
221 case Model.LP_DK_P55_T3eH9: // IT8720F
222 v.Add(new Voltage("CPU VCore", 0));
223 v.Add(new Voltage("VTT", 1));
224 v.Add(new Voltage("+3.3V", 2));
225 v.Add(new Voltage("+5V", 3, 6.8f, 10));
226 v.Add(new Voltage("+12V", 4, 30, 10));
227 v.Add(new Voltage("CPU PLL", 5));
228 v.Add(new Voltage("DRAM", 6));
229 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
230 v.Add(new Voltage("VBat", 8));
231 t.Add(new Temperature("Chipset", 0));
232 t.Add(new Temperature("CPU PWM", 1));
233 t.Add(new Temperature("CPU", 2));
234 f.Add(new Fan("Fan #1", 0));
235 f.Add(new Fan("Fan #2", 1));
236 f.Add(new Fan("Fan #3", 2));
239 v.Add(new Voltage("CPU VCore", 0));
240 v.Add(new Voltage("VTT", 1, true));
241 v.Add(new Voltage("+3.3V", 2, true));
242 v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
243 v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
244 v.Add(new Voltage("Voltage #6", 5, true));
245 v.Add(new Voltage("DRAM", 6, true));
246 v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
247 v.Add(new Voltage("VBat", 8));
248 for (int i = 0; i < superIO.Temperatures.Length; i++)
249 t.Add(new Temperature("Temperature #" + (i + 1), i));
250 for (int i = 0; i < superIO.Fans.Length; i++)
251 f.Add(new Fan("Fan #" + (i + 1), i));
252 for (int i = 0; i < superIO.Controls.Length; i++)
253 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
258 case Manufacturer.Gigabyte:
260 case Model._965P_S3: // IT8718F
261 v.Add(new Voltage("CPU VCore", 0));
262 v.Add(new Voltage("DRAM", 1));
263 v.Add(new Voltage("+3.3V", 2));
264 v.Add(new Voltage("+5V", 3, 6.8f, 10));
265 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
266 v.Add(new Voltage("VBat", 8));
267 t.Add(new Temperature("System", 0));
268 t.Add(new Temperature("CPU", 1));
269 f.Add(new Fan("CPU Fan", 0));
270 f.Add(new Fan("System Fan", 1));
272 case Model.EP45_DS3R: // IT8718F
273 case Model.EP45_UD3R:
275 v.Add(new Voltage("CPU VCore", 0));
276 v.Add(new Voltage("DRAM", 1));
277 v.Add(new Voltage("+3.3V", 2));
278 v.Add(new Voltage("+5V", 3, 6.8f, 10));
279 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
280 v.Add(new Voltage("VBat", 8));
281 t.Add(new Temperature("System", 0));
282 t.Add(new Temperature("CPU", 1));
283 f.Add(new Fan("CPU Fan", 0));
284 f.Add(new Fan("System Fan #2", 1));
285 f.Add(new Fan("Power Fan", 2));
286 f.Add(new Fan("System Fan #1", 3));
288 case Model.EX58_EXTREME: // IT8720F
289 v.Add(new Voltage("CPU VCore", 0));
290 v.Add(new Voltage("DRAM", 1));
291 v.Add(new Voltage("+5V", 3, 6.8f, 10));
292 v.Add(new Voltage("VBat", 8));
293 t.Add(new Temperature("System", 0));
294 t.Add(new Temperature("CPU", 1));
295 t.Add(new Temperature("Northbridge", 2));
296 f.Add(new Fan("CPU Fan", 0));
297 f.Add(new Fan("System Fan #2", 1));
298 f.Add(new Fan("Power Fan", 2));
299 f.Add(new Fan("System Fan #1", 3));
301 case Model.P35_DS3: // IT8718F
302 case Model.P35_DS3L: // IT8718F
303 v.Add(new Voltage("CPU VCore", 0));
304 v.Add(new Voltage("DRAM", 1));
305 v.Add(new Voltage("+3.3V", 2));
306 v.Add(new Voltage("+5V", 3, 6.8f, 10));
307 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
308 v.Add(new Voltage("VBat", 8));
309 t.Add(new Temperature("System", 0));
310 t.Add(new Temperature("CPU", 1));
311 f.Add(new Fan("CPU Fan", 0));
312 f.Add(new Fan("System Fan #1", 1));
313 f.Add(new Fan("System Fan #2", 2));
314 f.Add(new Fan("Power Fan", 3));
316 case Model.P55_UD4: // IT8720F
317 case Model.P55A_UD3: // IT8720F
318 case Model.P55M_UD4: // IT8720F
319 case Model.H55_USB3: // IT8720F
320 case Model.EX58_UD3R: // IT8720F
321 v.Add(new Voltage("CPU VCore", 0));
322 v.Add(new Voltage("DRAM", 1));
323 v.Add(new Voltage("+3.3V", 2));
324 v.Add(new Voltage("+5V", 3, 6.8f, 10));
325 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
326 v.Add(new Voltage("VBat", 8));
327 t.Add(new Temperature("System", 0));
328 t.Add(new Temperature("CPU", 2));
329 f.Add(new Fan("CPU Fan", 0));
330 f.Add(new Fan("System Fan #2", 1));
331 f.Add(new Fan("Power Fan", 2));
332 f.Add(new Fan("System Fan #1", 3));
334 case Model.H55N_USB3: // IT8720F
335 v.Add(new Voltage("CPU VCore", 0));
336 v.Add(new Voltage("DRAM", 1));
337 v.Add(new Voltage("+3.3V", 2));
338 v.Add(new Voltage("+5V", 3, 6.8f, 10));
339 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
340 v.Add(new Voltage("VBat", 8));
341 t.Add(new Temperature("System", 0));
342 t.Add(new Temperature("CPU", 2));
343 f.Add(new Fan("CPU Fan", 0));
344 f.Add(new Fan("System Fan", 1));
346 case Model.G41M_Combo: // IT8718F
347 case Model.G41MT_S2: // IT8718F
348 case Model.G41MT_S2P: // IT8718F
349 v.Add(new Voltage("CPU VCore", 0));
350 v.Add(new Voltage("DRAM", 1));
351 v.Add(new Voltage("+3.3V", 2));
352 v.Add(new Voltage("+5V", 3, 6.8f, 10));
353 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
354 v.Add(new Voltage("VBat", 8));
355 t.Add(new Temperature("CPU", 2));
356 f.Add(new Fan("CPU Fan", 0));
357 f.Add(new Fan("System Fan", 1));
359 case Model.GA_970A_UD3: // IT8720F
360 v.Add(new Voltage("CPU VCore", 0));
361 v.Add(new Voltage("DRAM", 1));
362 v.Add(new Voltage("+3.3V", 2));
363 v.Add(new Voltage("+5V", 3, 6.8f, 10));
364 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
365 v.Add(new Voltage("VBat", 8));
366 t.Add(new Temperature("System", 0));
367 t.Add(new Temperature("CPU", 1));
368 f.Add(new Fan("CPU Fan", 0));
369 f.Add(new Fan("System Fan #1", 1));
370 f.Add(new Fan("System Fan #2", 2));
371 f.Add(new Fan("Power Fan", 4));
372 c.Add(new Ctrl("PWM 1", 0));
373 c.Add(new Ctrl("PWM 2", 1));
374 c.Add(new Ctrl("PWM 3", 2));
376 case Model.GA_MA770T_UD3: // IT8720F
377 case Model.GA_MA770T_UD3P: // IT8720F
378 case Model.GA_MA790X_UD3P: // IT8720F
379 v.Add(new Voltage("CPU VCore", 0));
380 v.Add(new Voltage("DRAM", 1));
381 v.Add(new Voltage("+3.3V", 2));
382 v.Add(new Voltage("+5V", 3, 6.8f, 10));
383 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
384 v.Add(new Voltage("VBat", 8));
385 t.Add(new Temperature("System", 0));
386 t.Add(new Temperature("CPU", 1));
387 f.Add(new Fan("CPU Fan", 0));
388 f.Add(new Fan("System Fan #1", 1));
389 f.Add(new Fan("System Fan #2", 2));
390 f.Add(new Fan("Power Fan", 3));
392 case Model.GA_MA78LM_S2H: // IT8718F
393 v.Add(new Voltage("CPU VCore", 0));
394 v.Add(new Voltage("DRAM", 1));
395 v.Add(new Voltage("+3.3V", 2));
396 v.Add(new Voltage("+5V", 3, 6.8f, 10));
397 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
398 v.Add(new Voltage("VBat", 8));
399 t.Add(new Temperature("System", 0));
400 t.Add(new Temperature("CPU", 1));
401 t.Add(new Temperature("VRM", 2));
402 f.Add(new Fan("CPU Fan", 0));
403 f.Add(new Fan("System Fan #1", 1));
404 f.Add(new Fan("System Fan #2", 2));
405 f.Add(new Fan("Power Fan", 3));
407 case Model.GA_MA785GM_US2H: // IT8718F
408 case Model.GA_MA785GMT_UD2H: // 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", 4, 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));
419 f.Add(new Fan("NB Fan", 2));
421 case Model.X58A_UD3R: // IT8720F
422 v.Add(new Voltage("CPU VCore", 0));
423 v.Add(new Voltage("DRAM", 1));
424 v.Add(new Voltage("+3.3V", 2));
425 v.Add(new Voltage("+5V", 3, 6.8f, 10));
426 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
427 v.Add(new Voltage("VBat", 8));
428 t.Add(new Temperature("System", 0));
429 t.Add(new Temperature("CPU", 1));
430 t.Add(new Temperature("Northbridge", 2));
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));
437 v.Add(new Voltage("CPU VCore", 0));
438 v.Add(new Voltage("DRAM", 1, true));
439 v.Add(new Voltage("+3.3V", 2, true));
440 v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
441 v.Add(new Voltage("Voltage #5", 4, true));
442 v.Add(new Voltage("Voltage #6", 5, true));
443 v.Add(new Voltage("Voltage #7", 6, true));
444 v.Add(new Voltage("Voltage #8", 7, true));
445 v.Add(new Voltage("VBat", 8));
446 for (int i = 0; i < superIO.Temperatures.Length; i++)
447 t.Add(new Temperature("Temperature #" + (i + 1), i));
448 for (int i = 0; i < superIO.Fans.Length; i++)
449 f.Add(new Fan("Fan #" + (i + 1), i));
450 for (int i = 0; i < superIO.Controls.Length; i++)
451 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
457 v.Add(new Voltage("CPU VCore", 0));
458 v.Add(new Voltage("Voltage #2", 1, true));
459 v.Add(new Voltage("Voltage #3", 2, true));
460 v.Add(new Voltage("Voltage #4", 3, true));
461 v.Add(new Voltage("Voltage #5", 4, true));
462 v.Add(new Voltage("Voltage #6", 5, true));
463 v.Add(new Voltage("Voltage #7", 6, true));
464 v.Add(new Voltage("Voltage #8", 7, true));
465 v.Add(new Voltage("VBat", 8));
466 for (int i = 0; i < superIO.Temperatures.Length; i++)
467 t.Add(new Temperature("Temperature #" + (i + 1), i));
468 for (int i = 0; i < superIO.Fans.Length; i++)
469 f.Add(new Fan("Fan #" + (i + 1), i));
470 for (int i = 0; i < superIO.Controls.Length; i++)
471 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
480 switch (manufacturer) {
481 case Manufacturer.ECS:
483 case Model.A890GXM_A: // IT8721F
484 v.Add(new Voltage("CPU VCore", 0));
485 v.Add(new Voltage("VDIMM", 1));
486 v.Add(new Voltage("NB Voltage", 2));
487 v.Add(new Voltage("Analog +3.3V", 3, 10, 10));
488 // v.Add(new Voltage("VDIMM", 6, true));
489 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
490 v.Add(new Voltage("VBat", 8, 10, 10));
491 t.Add(new Temperature("CPU", 0));
492 t.Add(new Temperature("System", 1));
493 t.Add(new Temperature("Northbridge", 2));
494 f.Add(new Fan("CPU Fan", 0));
495 f.Add(new Fan("System Fan", 1));
496 f.Add(new Fan("Power Fan", 2));
499 v.Add(new Voltage("Voltage #1", 0, true));
500 v.Add(new Voltage("Voltage #2", 1, true));
501 v.Add(new Voltage("Voltage #3", 2, true));
502 v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
503 v.Add(new Voltage("Voltage #5", 4, true));
504 v.Add(new Voltage("Voltage #6", 5, true));
505 v.Add(new Voltage("Voltage #7", 6, true));
506 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
507 v.Add(new Voltage("VBat", 8, 10, 10));
508 for (int i = 0; i < superIO.Temperatures.Length; i++)
509 t.Add(new Temperature("Temperature #" + (i + 1), i));
510 for (int i = 0; i < superIO.Fans.Length; i++)
511 f.Add(new Fan("Fan #" + (i + 1), i));
512 for (int i = 0; i < superIO.Controls.Length; i++)
513 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
517 case Manufacturer.Gigabyte:
519 case Model.H61M_DS2_REV_1_2: // IT8728F
520 case Model.H61M_USB3_B3_REV_2_0: // IT8728F
521 v.Add(new Voltage("VTT", 0));
522 v.Add(new Voltage("+12V", 2, 30.9f, 10));
523 v.Add(new Voltage("CPU VCore", 5));
524 v.Add(new Voltage("DRAM", 6));
525 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
526 v.Add(new Voltage("VBat", 8, 10, 10));
527 t.Add(new Temperature("System", 0));
528 t.Add(new Temperature("CPU", 2));
529 f.Add(new Fan("CPU Fan", 0));
530 f.Add(new Fan("System Fan", 1));
532 case Model.H67A_UD3H_B3: // IT8728F
533 case Model.H67A_USB3_B3: // IT8728F
534 v.Add(new Voltage("VTT", 0));
535 v.Add(new Voltage("+5V", 1, 15, 10));
536 v.Add(new Voltage("+12V", 2, 30.9f, 10));
537 v.Add(new Voltage("CPU VCore", 5));
538 v.Add(new Voltage("DRAM", 6));
539 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
540 v.Add(new Voltage("VBat", 8, 10, 10));
541 t.Add(new Temperature("System", 0));
542 t.Add(new Temperature("CPU", 2));
543 f.Add(new Fan("CPU Fan", 0));
544 f.Add(new Fan("System Fan #1", 1));
545 f.Add(new Fan("Power Fan", 2));
546 f.Add(new Fan("System Fan #2", 3));
548 case Model.Z68A_D3H_B3: // IT8728F
549 v.Add(new Voltage("VTT", 0));
550 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
551 v.Add(new Voltage("+12V", 2, 30.9f, 10));
552 v.Add(new Voltage("+5V", 3, 7.15f, 10));
553 v.Add(new Voltage("CPU VCore", 5));
554 v.Add(new Voltage("DRAM", 6));
555 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
556 v.Add(new Voltage("VBat", 8, 10, 10));
557 t.Add(new Temperature("System", 0));
558 t.Add(new Temperature("CPU", 2));
559 f.Add(new Fan("CPU Fan", 0));
560 f.Add(new Fan("System Fan #1", 1));
561 f.Add(new Fan("Power Fan", 2));
562 f.Add(new Fan("System Fan #2", 3));
564 case Model.P67A_UD3_B3: // IT8728F
565 case Model.P67A_UD3R_B3: // IT8728F
566 case Model.P67A_UD4_B3: // IT8728F
567 case Model.Z68AP_D3: // IT8728F
568 case Model.Z68X_UD3H_B3: // IT8728F
569 v.Add(new Voltage("VTT", 0));
570 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
571 v.Add(new Voltage("+12V", 2, 30.9f, 10));
572 v.Add(new Voltage("+5V", 3, 7.15f, 10));
573 v.Add(new Voltage("CPU VCore", 5));
574 v.Add(new Voltage("DRAM", 6));
575 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
576 v.Add(new Voltage("VBat", 8, 10, 10));
577 t.Add(new Temperature("System", 0));
578 t.Add(new Temperature("CPU", 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));
584 case Model.Z68X_UD7_B3: // IT8728F
585 v.Add(new Voltage("VTT", 0));
586 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
587 v.Add(new Voltage("+12V", 2, 30.9f, 10));
588 v.Add(new Voltage("+5V", 3, 7.15f, 10));
589 v.Add(new Voltage("CPU VCore", 5));
590 v.Add(new Voltage("DRAM", 6));
591 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
592 v.Add(new Voltage("VBat", 8, 10, 10));
593 t.Add(new Temperature("System", 0));
594 t.Add(new Temperature("CPU", 1));
595 t.Add(new Temperature("System 3", 2));
596 f.Add(new Fan("CPU Fan", 0));
597 f.Add(new Fan("Power Fan", 1));
598 f.Add(new Fan("System Fan #1", 2));
599 f.Add(new Fan("System Fan #2", 3));
600 f.Add(new Fan("System Fan #3", 4));
603 v.Add(new Voltage("Voltage #1", 0, true));
604 v.Add(new Voltage("Voltage #2", 1, true));
605 v.Add(new Voltage("Voltage #3", 2, true));
606 v.Add(new Voltage("Voltage #4", 3, true));
607 v.Add(new Voltage("Voltage #5", 4, true));
608 v.Add(new Voltage("Voltage #6", 5, true));
609 v.Add(new Voltage("Voltage #7", 6, true));
610 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
611 v.Add(new Voltage("VBat", 8, 10, 10));
612 for (int i = 0; i < superIO.Temperatures.Length; i++)
613 t.Add(new Temperature("Temperature #" + (i + 1), i));
614 for (int i = 0; i < superIO.Fans.Length; i++)
615 f.Add(new Fan("Fan #" + (i + 1), i));
616 for (int i = 0; i < superIO.Controls.Length; i++)
617 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
621 case Manufacturer.Shuttle:
623 case Model.FH67: // IT8772E
624 v.Add(new Voltage("CPU VCore", 0));
625 v.Add(new Voltage("DRAM", 1));
626 v.Add(new Voltage("PCH VCCIO", 2));
627 v.Add(new Voltage("CPU VCCIO", 3));
628 v.Add(new Voltage("Graphic Voltage", 4));
629 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
630 v.Add(new Voltage("VBat", 8, 10, 10));
631 t.Add(new Temperature("System", 0));
632 t.Add(new Temperature("CPU", 1));
633 f.Add(new Fan("Fan #1", 0));
634 f.Add(new Fan("CPU Fan", 1));
637 v.Add(new Voltage("Voltage #1", 0, true));
638 v.Add(new Voltage("Voltage #2", 1, true));
639 v.Add(new Voltage("Voltage #3", 2, true));
640 v.Add(new Voltage("Voltage #4", 3, true));
641 v.Add(new Voltage("Voltage #5", 4, true));
642 v.Add(new Voltage("Voltage #6", 5, true));
643 v.Add(new Voltage("Voltage #7", 6, true));
644 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
645 v.Add(new Voltage("VBat", 8, 10, 10));
646 for (int i = 0; i < superIO.Temperatures.Length; i++)
647 t.Add(new Temperature("Temperature #" + (i + 1), i));
648 for (int i = 0; i < superIO.Fans.Length; i++)
649 f.Add(new Fan("Fan #" + (i + 1), i));
650 for (int i = 0; i < superIO.Controls.Length; i++)
651 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
656 v.Add(new Voltage("Voltage #1", 0, true));
657 v.Add(new Voltage("Voltage #2", 1, true));
658 v.Add(new Voltage("Voltage #3", 2, true));
659 v.Add(new Voltage("Voltage #4", 3, true));
660 v.Add(new Voltage("Voltage #5", 4, true));
661 v.Add(new Voltage("Voltage #6", 5, true));
662 v.Add(new Voltage("Voltage #7", 6, true));
663 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
664 v.Add(new Voltage("VBat", 8, 10, 10));
665 for (int i = 0; i < superIO.Temperatures.Length; i++)
666 t.Add(new Temperature("Temperature #" + (i + 1), i));
667 for (int i = 0; i < superIO.Fans.Length; i++)
668 f.Add(new Fan("Fan #" + (i + 1), i));
669 for (int i = 0; i < superIO.Controls.Length; i++)
670 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
676 v.Add(new Voltage("VCC3V", 0, 150, 150));
677 v.Add(new Voltage("VSB3V", 1, 150, 150));
678 v.Add(new Voltage("Battery", 2, 150, 150));
679 for (int i = 0; i < superIO.Temperatures.Length; i++)
680 t.Add(new Temperature("Temperature #" + (i + 1), i));
681 for (int i = 0; i < superIO.Fans.Length; i++)
682 f.Add(new Fan("Fan #" + (i + 1), i));
691 switch (manufacturer) {
692 case Manufacturer.EVGA:
694 case Model.X58_SLI_Classified: // F71882
695 v.Add(new Voltage("VCC3V", 0, 150, 150));
696 v.Add(new Voltage("CPU VCore", 1, 47, 100));
697 v.Add(new Voltage("DIMM", 2, 47, 100));
698 v.Add(new Voltage("CPU VTT", 3, 24, 100));
699 v.Add(new Voltage("IOH Vcore", 4, 24, 100));
700 v.Add(new Voltage("+5V", 5, 51, 12));
701 v.Add(new Voltage("+12V", 6, 56, 6.8f));
702 v.Add(new Voltage("3VSB", 7, 150, 150));
703 v.Add(new Voltage("VBat", 8, 150, 150));
704 t.Add(new Temperature("CPU", 0));
705 t.Add(new Temperature("VREG", 1));
706 t.Add(new Temperature("System", 2));
707 f.Add(new Fan("CPU Fan", 0));
708 f.Add(new Fan("Power Fan", 1));
709 f.Add(new Fan("Chassis Fan", 2));
712 v.Add(new Voltage("VCC3V", 0, 150, 150));
713 v.Add(new Voltage("CPU VCore", 1));
714 v.Add(new Voltage("Voltage #3", 2, true));
715 v.Add(new Voltage("Voltage #4", 3, true));
716 v.Add(new Voltage("Voltage #5", 4, true));
717 v.Add(new Voltage("Voltage #6", 5, true));
718 v.Add(new Voltage("Voltage #7", 6, true));
719 v.Add(new Voltage("VSB3V", 7, 150, 150));
720 v.Add(new Voltage("VBat", 8, 150, 150));
721 for (int i = 0; i < superIO.Temperatures.Length; i++)
722 t.Add(new Temperature("Temperature #" + (i + 1), i));
723 for (int i = 0; i < superIO.Fans.Length; i++)
724 f.Add(new Fan("Fan #" + (i + 1), i));
729 v.Add(new Voltage("VCC3V", 0, 150, 150));
730 v.Add(new Voltage("CPU VCore", 1));
731 v.Add(new Voltage("Voltage #3", 2, true));
732 v.Add(new Voltage("Voltage #4", 3, true));
733 v.Add(new Voltage("Voltage #5", 4, true));
734 v.Add(new Voltage("Voltage #6", 5, true));
735 if (superIO.Chip != Chip.F71808E)
736 v.Add(new Voltage("Voltage #7", 6, true));
737 v.Add(new Voltage("VSB3V", 7, 150, 150));
738 v.Add(new Voltage("VBat", 8, 150, 150));
739 for (int i = 0; i < superIO.Temperatures.Length; i++)
740 t.Add(new Temperature("Temperature #" + (i + 1), i));
741 for (int i = 0; i < superIO.Fans.Length; i++)
742 f.Add(new Fan("Fan #" + (i + 1), i));
748 switch (manufacturer) {
749 case Manufacturer.ASRock:
751 case Model.AOD790GX_128M: // W83627EHF
752 v.Add(new Voltage("CPU VCore", 0));
753 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
754 v.Add(new Voltage("+3.3V", 4, 10, 10));
755 v.Add(new Voltage("+5V", 5, 20, 10));
756 v.Add(new Voltage("+12V", 6, 28, 5));
757 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
758 v.Add(new Voltage("VBAT", 8, 34, 34));
759 t.Add(new Temperature("CPU", 0));
760 t.Add(new Temperature("Motherboard", 2));
761 f.Add(new Fan("CPU Fan", 0));
762 f.Add(new Fan("Chassis Fan", 1));
765 v.Add(new Voltage("CPU VCore", 0));
766 v.Add(new Voltage("Voltage #2", 1, true));
767 v.Add(new Voltage("AVCC", 2, 34, 34));
768 v.Add(new Voltage("3VCC", 3, 34, 34));
769 v.Add(new Voltage("Voltage #5", 4, true));
770 v.Add(new Voltage("Voltage #6", 5, true));
771 v.Add(new Voltage("Voltage #7", 6, true));
772 v.Add(new Voltage("3VSB", 7, 34, 34));
773 v.Add(new Voltage("VBAT", 8, 34, 34));
774 v.Add(new Voltage("Voltage #10", 9, true));
775 t.Add(new Temperature("CPU", 0));
776 t.Add(new Temperature("Auxiliary", 1));
777 t.Add(new Temperature("System", 2));
778 f.Add(new Fan("System Fan", 0));
779 f.Add(new Fan("CPU Fan", 1));
780 f.Add(new Fan("Auxiliary Fan", 2));
781 f.Add(new Fan("CPU Fan #2", 3));
782 f.Add(new Fan("Auxiliary Fan #2", 4));
786 v.Add(new Voltage("CPU VCore", 0));
787 v.Add(new Voltage("Voltage #2", 1, true));
788 v.Add(new Voltage("AVCC", 2, 34, 34));
789 v.Add(new Voltage("3VCC", 3, 34, 34));
790 v.Add(new Voltage("Voltage #5", 4, true));
791 v.Add(new Voltage("Voltage #6", 5, true));
792 v.Add(new Voltage("Voltage #7", 6, true));
793 v.Add(new Voltage("3VSB", 7, 34, 34));
794 v.Add(new Voltage("VBAT", 8, 34, 34));
795 v.Add(new Voltage("Voltage #10", 9, true));
796 t.Add(new Temperature("CPU", 0));
797 t.Add(new Temperature("Auxiliary", 1));
798 t.Add(new Temperature("System", 2));
799 f.Add(new Fan("System Fan", 0));
800 f.Add(new Fan("CPU Fan", 1));
801 f.Add(new Fan("Auxiliary Fan", 2));
802 f.Add(new Fan("CPU Fan #2", 3));
803 f.Add(new Fan("Auxiliary Fan #2", 4));
808 case Chip.W83627DHGP:
811 switch (manufacturer) {
812 case Manufacturer.ASRock:
814 case Model._880GMH_USB3: // W83627DHG-P
815 v.Add(new Voltage("CPU VCore", 0));
816 v.Add(new Voltage("+3.3V", 3, 34, 34));
817 v.Add(new Voltage("+5V", 5, 15, 7.5f));
818 v.Add(new Voltage("+12V", 6, 56, 10));
819 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
820 v.Add(new Voltage("VBAT", 8, 34, 34));
821 t.Add(new Temperature("CPU", 0));
822 t.Add(new Temperature("Motherboard", 2));
823 f.Add(new Fan("Chassis Fan", 0));
824 f.Add(new Fan("CPU Fan", 1));
825 f.Add(new Fan("Power Fan", 2));
828 v.Add(new Voltage("CPU VCore", 0));
829 v.Add(new Voltage("Voltage #2", 1, true));
830 v.Add(new Voltage("AVCC", 2, 34, 34));
831 v.Add(new Voltage("3VCC", 3, 34, 34));
832 v.Add(new Voltage("Voltage #5", 4, true));
833 v.Add(new Voltage("Voltage #6", 5, true));
834 v.Add(new Voltage("Voltage #7", 6, true));
835 v.Add(new Voltage("3VSB", 7, 34, 34));
836 v.Add(new Voltage("VBAT", 8, 34, 34));
837 t.Add(new Temperature("CPU", 0));
838 t.Add(new Temperature("Auxiliary", 1));
839 t.Add(new Temperature("System", 2));
840 f.Add(new Fan("System Fan", 0));
841 f.Add(new Fan("CPU Fan", 1));
842 f.Add(new Fan("Auxiliary Fan", 2));
843 f.Add(new Fan("CPU Fan #2", 3));
844 f.Add(new Fan("Auxiliary Fan #2", 4));
848 case Manufacturer.ASUS:
850 case Model.P6T: // W83667HG
851 case Model.P6X58D_E: // W83667HG
852 case Model.Rampage_II_GENE: // W83667HG
853 v.Add(new Voltage("CPU VCore", 0));
854 v.Add(new Voltage("+12V", 1, 11.5f, 1.91f));
855 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
856 v.Add(new Voltage("+3.3V", 3, 34, 34));
857 v.Add(new Voltage("+5V", 4, 15, 7.5f));
858 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
859 v.Add(new Voltage("VBAT", 8, 34, 34));
860 t.Add(new Temperature("CPU", 0));
861 t.Add(new Temperature("Motherboard", 2));
862 f.Add(new Fan("Chassis Fan #1", 0));
863 f.Add(new Fan("CPU Fan", 1));
864 f.Add(new Fan("Power Fan", 2));
865 f.Add(new Fan("Chassis Fan #2", 3));
866 f.Add(new Fan("Chassis Fan #3", 4));
868 case Model.Rampage_Extreme: // W83667HG
869 v.Add(new Voltage("CPU VCore", 0));
870 v.Add(new Voltage("+12V", 1, 12, 2));
871 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
872 v.Add(new Voltage("+3.3V", 3, 34, 34));
873 v.Add(new Voltage("+5V", 4, 15, 7.5f));
874 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
875 v.Add(new Voltage("VBAT", 8, 34, 34));
876 t.Add(new Temperature("CPU", 0));
877 t.Add(new Temperature("Motherboard", 2));
878 f.Add(new Fan("Chassis Fan #1", 0));
879 f.Add(new Fan("CPU Fan", 1));
880 f.Add(new Fan("Power Fan", 2));
881 f.Add(new Fan("Chassis Fan #2", 3));
882 f.Add(new Fan("Chassis Fan #3", 4));
885 v.Add(new Voltage("CPU VCore", 0));
886 v.Add(new Voltage("Voltage #2", 1, true));
887 v.Add(new Voltage("AVCC", 2, 34, 34));
888 v.Add(new Voltage("3VCC", 3, 34, 34));
889 v.Add(new Voltage("Voltage #5", 4, true));
890 v.Add(new Voltage("Voltage #6", 5, true));
891 v.Add(new Voltage("Voltage #7", 6, true));
892 v.Add(new Voltage("3VSB", 7, 34, 34));
893 v.Add(new Voltage("VBAT", 8, 34, 34));
894 t.Add(new Temperature("CPU", 0));
895 t.Add(new Temperature("Auxiliary", 1));
896 t.Add(new Temperature("System", 2));
897 f.Add(new Fan("System Fan", 0));
898 f.Add(new Fan("CPU Fan", 1));
899 f.Add(new Fan("Auxiliary Fan", 2));
900 f.Add(new Fan("CPU Fan #2", 3));
901 f.Add(new Fan("Auxiliary Fan #2", 4));
906 v.Add(new Voltage("CPU VCore", 0));
907 v.Add(new Voltage("Voltage #2", 1, true));
908 v.Add(new Voltage("AVCC", 2, 34, 34));
909 v.Add(new Voltage("3VCC", 3, 34, 34));
910 v.Add(new Voltage("Voltage #5", 4, true));
911 v.Add(new Voltage("Voltage #6", 5, true));
912 v.Add(new Voltage("Voltage #7", 6, true));
913 v.Add(new Voltage("3VSB", 7, 34, 34));
914 v.Add(new Voltage("VBAT", 8, 34, 34));
915 t.Add(new Temperature("CPU", 0));
916 t.Add(new Temperature("Auxiliary", 1));
917 t.Add(new Temperature("System", 2));
918 f.Add(new Fan("System Fan", 0));
919 f.Add(new Fan("CPU Fan", 1));
920 f.Add(new Fan("Auxiliary Fan", 2));
921 f.Add(new Fan("CPU Fan #2", 3));
922 f.Add(new Fan("Auxiliary Fan #2", 4));
929 v.Add(new Voltage("CPU VCore", 0));
930 v.Add(new Voltage("Voltage #2", 1, true));
931 v.Add(new Voltage("Voltage #3", 2, true));
932 v.Add(new Voltage("AVCC", 3, 34, 51));
933 v.Add(new Voltage("Voltage #5", 4, true));
934 v.Add(new Voltage("5VSB", 5, 34, 51));
935 v.Add(new Voltage("VBAT", 6));
936 t.Add(new Temperature("CPU", 0));
937 t.Add(new Temperature("Auxiliary", 1));
938 t.Add(new Temperature("System", 2));
939 f.Add(new Fan("System Fan", 0));
940 f.Add(new Fan("CPU Fan", 1));
941 f.Add(new Fan("Auxiliary Fan", 2));
945 switch (manufacturer) {
946 case Manufacturer.ASUS:
948 case Model.P8P67: // NCT6776F
949 case Model.P8P67_EVO: // NCT6776F
950 case Model.P8P67_PRO: // NCT6776F
951 v.Add(new Voltage("CPU VCore", 0));
952 v.Add(new Voltage("+12V", 1, 11, 1));
953 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
954 v.Add(new Voltage("+3.3V", 3, 34, 34));
955 v.Add(new Voltage("+5V", 4, 12, 3));
956 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
957 v.Add(new Voltage("VBAT", 8, 34, 34));
958 t.Add(new Temperature("CPU", 0));
959 t.Add(new Temperature("Auxiliary", 2));
960 t.Add(new Temperature("Motherboard", 3));
961 f.Add(new Fan("Chassis Fan #1", 0));
962 f.Add(new Fan("CPU Fan", 1));
963 f.Add(new Fan("Power Fan", 2));
964 f.Add(new Fan("Chassis Fan #2", 3));
965 c.Add(new Ctrl("Chassis Fan #2", 0));
966 c.Add(new Ctrl("CPU Fan", 1));
967 c.Add(new Ctrl("Chassis Fan #1", 2));
969 case Model.P8P67_M_PRO: // NCT6776F
970 v.Add(new Voltage("CPU VCore", 0));
971 v.Add(new Voltage("+12V", 1, 11, 1));
972 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
973 v.Add(new Voltage("+3.3V", 3, 34, 34));
974 v.Add(new Voltage("+5V", 4, 12, 3));
975 v.Add(new Voltage("Voltage #6", 5, true));
976 v.Add(new Voltage("Voltage #7", 6, true));
977 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
978 v.Add(new Voltage("VBAT", 8, 34, 34));
979 t.Add(new Temperature("CPU", 0));
980 t.Add(new Temperature("Motherboard", 3));
981 f.Add(new Fan("Chassis Fan #1", 0));
982 f.Add(new Fan("CPU Fan", 1));
983 f.Add(new Fan("Chassis Fan #2", 2));
984 f.Add(new Fan("Power Fan", 3));
985 f.Add(new Fan("Auxiliary Fan", 4));
987 case Model.P8Z68_V_PRO: // NCT6776F
988 v.Add(new Voltage("CPU VCore", 0));
989 v.Add(new Voltage("+12V", 1, 11, 1));
990 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
991 v.Add(new Voltage("+3.3V", 3, 34, 34));
992 v.Add(new Voltage("+5V", 4, 12, 3));
993 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
994 v.Add(new Voltage("VBAT", 8, 34, 34));
995 t.Add(new Temperature("CPU", 0));
996 t.Add(new Temperature("Auxiliary", 2));
997 t.Add(new Temperature("Motherboard", 3));
998 for (int i = 0; i < superIO.Fans.Length; i++)
999 f.Add(new Fan("Fan #" + (i + 1), i));
1000 for (int i = 0; i < superIO.Controls.Length; i++)
1001 c.Add(new Ctrl("Fan #" + (i + 1), i));
1003 case Model.P9X79: // NCT6776F
1004 v.Add(new Voltage("CPU VCore", 0));
1005 v.Add(new Voltage("+12V", 1, 11, 1));
1006 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
1007 v.Add(new Voltage("+3.3V", 3, 34, 34));
1008 v.Add(new Voltage("+5V", 4, 12, 3));
1009 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
1010 v.Add(new Voltage("VBAT", 8, 34, 34));
1011 t.Add(new Temperature("CPU", 0));
1012 t.Add(new Temperature("Motherboard", 3));
1013 for (int i = 0; i < superIO.Fans.Length; i++)
1014 f.Add(new Fan("Fan #" + (i + 1), i));
1015 for (int i = 0; i < superIO.Controls.Length; i++)
1016 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1019 v.Add(new Voltage("CPU VCore", 0));
1020 v.Add(new Voltage("Voltage #2", 1, true));
1021 v.Add(new Voltage("AVCC", 2, 34, 34));
1022 v.Add(new Voltage("3VCC", 3, 34, 34));
1023 v.Add(new Voltage("Voltage #5", 4, true));
1024 v.Add(new Voltage("Voltage #6", 5, true));
1025 v.Add(new Voltage("Voltage #7", 6, true));
1026 v.Add(new Voltage("3VSB", 7, 34, 34));
1027 v.Add(new Voltage("VBAT", 8, 34, 34));
1028 t.Add(new Temperature("CPU Core", 0));
1029 t.Add(new Temperature("Temperature #1", 1));
1030 t.Add(new Temperature("Temperature #2", 2));
1031 t.Add(new Temperature("Temperature #3", 3));
1032 for (int i = 0; i < superIO.Fans.Length; i++)
1033 f.Add(new Fan("Fan #" + (i + 1), i));
1034 for (int i = 0; i < superIO.Controls.Length; i++)
1035 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1040 v.Add(new Voltage("CPU VCore", 0));
1041 v.Add(new Voltage("Voltage #2", 1, true));
1042 v.Add(new Voltage("AVCC", 2, 34, 34));
1043 v.Add(new Voltage("3VCC", 3, 34, 34));
1044 v.Add(new Voltage("Voltage #5", 4, true));
1045 v.Add(new Voltage("Voltage #6", 5, true));
1046 v.Add(new Voltage("Voltage #7", 6, true));
1047 v.Add(new Voltage("3VSB", 7, 34, 34));
1048 v.Add(new Voltage("VBAT", 8, 34, 34));
1049 t.Add(new Temperature("CPU Core", 0));
1050 t.Add(new Temperature("Temperature #1", 1));
1051 t.Add(new Temperature("Temperature #2", 2));
1052 t.Add(new Temperature("Temperature #3", 3));
1053 for (int i = 0; i < superIO.Fans.Length; i++)
1054 f.Add(new Fan("Fan #" + (i + 1), i));
1055 for (int i = 0; i < superIO.Controls.Length; i++)
1056 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1061 switch (manufacturer) {
1062 case Manufacturer.ASUS:
1065 v.Add(new Voltage("CPU VCore", 0));
1066 v.Add(new Voltage("Voltage #2", 1, true));
1067 v.Add(new Voltage("AVCC", 2, 34, 34));
1068 v.Add(new Voltage("3VCC", 3, 34, 34));
1069 v.Add(new Voltage("Voltage #5", 4, true));
1070 v.Add(new Voltage("Voltage #6", 5, true));
1071 v.Add(new Voltage("Voltage #7", 6, true));
1072 v.Add(new Voltage("3VSB", 7, 34, 34));
1073 v.Add(new Voltage("VBAT", 8, 34, 34));
1074 v.Add(new Voltage("VTT", 9));
1075 v.Add(new Voltage("Voltage #11", 10, true));
1076 v.Add(new Voltage("Voltage #12", 11, true));
1077 v.Add(new Voltage("Voltage #13", 12, true));
1078 v.Add(new Voltage("Voltage #14", 13, true));
1079 v.Add(new Voltage("Voltage #15", 14, true));
1080 t.Add(new Temperature("CPU Core", 0));
1081 t.Add(new Temperature("Auxiliary", 1));
1082 t.Add(new Temperature("Motherboard", 2));
1083 f.Add(new Fan("Chassis Fan #1", 0));
1084 f.Add(new Fan("CPU Fan", 1));
1085 f.Add(new Fan("Chassis Fan #2", 2));
1086 f.Add(new Fan("Chassis Fan #3", 3));
1087 c.Add(new Ctrl("Chassis Fan #1", 0));
1088 c.Add(new Ctrl("CPU Fan", 1));
1089 c.Add(new Ctrl("Chassis Fan #2", 2));
1090 c.Add(new Ctrl("Chassis Fan #3", 3));
1093 v.Add(new Voltage("CPU VCore", 0));
1094 v.Add(new Voltage("Voltage #2", 1, true));
1095 v.Add(new Voltage("AVCC", 2, 34, 34));
1096 v.Add(new Voltage("3VCC", 3, 34, 34));
1097 v.Add(new Voltage("Voltage #5", 4, true));
1098 v.Add(new Voltage("Voltage #6", 5, true));
1099 v.Add(new Voltage("Voltage #7", 6, true));
1100 v.Add(new Voltage("3VSB", 7, 34, 34));
1101 v.Add(new Voltage("VBAT", 8, 34, 34));
1102 v.Add(new Voltage("VTT", 9));
1103 v.Add(new Voltage("Voltage #11", 10, true));
1104 v.Add(new Voltage("Voltage #12", 11, true));
1105 v.Add(new Voltage("Voltage #13", 12, true));
1106 v.Add(new Voltage("Voltage #14", 13, true));
1107 v.Add(new Voltage("Voltage #15", 14, true));
1108 t.Add(new Temperature("CPU Core", 0));
1109 t.Add(new Temperature("Temperature #1", 1));
1110 t.Add(new Temperature("Temperature #2", 2));
1111 t.Add(new Temperature("Temperature #3", 3));
1112 t.Add(new Temperature("Temperature #4", 4));
1113 t.Add(new Temperature("Temperature #5", 5));
1114 t.Add(new Temperature("Temperature #6", 6));
1115 for (int i = 0; i < superIO.Fans.Length; i++)
1116 f.Add(new Fan("Fan #" + (i + 1), i));
1117 for (int i = 0; i < superIO.Controls.Length; i++)
1118 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1123 v.Add(new Voltage("CPU VCore", 0));
1124 v.Add(new Voltage("Voltage #2", 1, true));
1125 v.Add(new Voltage("AVCC", 2, 34, 34));
1126 v.Add(new Voltage("3VCC", 3, 34, 34));
1127 v.Add(new Voltage("Voltage #5", 4, true));
1128 v.Add(new Voltage("Voltage #6", 5, true));
1129 v.Add(new Voltage("Voltage #7", 6, true));
1130 v.Add(new Voltage("3VSB", 7, 34, 34));
1131 v.Add(new Voltage("VBAT", 8, 34, 34));
1132 v.Add(new Voltage("VTT", 9));
1133 v.Add(new Voltage("Voltage #11", 10, true));
1134 v.Add(new Voltage("Voltage #12", 11, true));
1135 v.Add(new Voltage("Voltage #13", 12, true));
1136 v.Add(new Voltage("Voltage #14", 13, true));
1137 v.Add(new Voltage("Voltage #15", 14, true));
1138 t.Add(new Temperature("CPU Core", 0));
1139 t.Add(new Temperature("Temperature #1", 1));
1140 t.Add(new Temperature("Temperature #2", 2));
1141 t.Add(new Temperature("Temperature #3", 3));
1142 t.Add(new Temperature("Temperature #4", 4));
1143 t.Add(new Temperature("Temperature #5", 5));
1144 t.Add(new Temperature("Temperature #6", 6));
1145 for (int i = 0; i < superIO.Fans.Length; i++)
1146 f.Add(new Fan("Fan #" + (i + 1), i));
1147 for (int i = 0; i < superIO.Controls.Length; i++)
1148 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1153 for (int i = 0; i < superIO.Voltages.Length; i++)
1154 v.Add(new Voltage("Voltage #" + (i + 1), i, true));
1155 for (int i = 0; i < superIO.Temperatures.Length; i++)
1156 t.Add(new Temperature("Temperature #" + (i + 1), i));
1157 for (int i = 0; i < superIO.Fans.Length; i++)
1158 f.Add(new Fan("Fan #" + (i + 1), i));
1159 for (int i = 0; i < superIO.Controls.Length; i++)
1160 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1164 const string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
1165 foreach (Voltage voltage in v)
1166 if (voltage.Index < superIO.Voltages.Length) {
1167 Sensor sensor = new Sensor(voltage.Name, voltage.Index,
1168 voltage.Hidden, SensorType.Voltage, this, new [] {
1169 new ParameterDescription("Ri [kΩ]", "Input resistance.\n" +
1170 formula, voltage.Ri),
1171 new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" +
1172 formula, voltage.Rf),
1173 new ParameterDescription("Vf [V]", "Reference voltage.\n" +
1174 formula, voltage.Vf)
1176 voltages.Add(sensor);
1179 foreach (Temperature temperature in t)
1180 if (temperature.Index < superIO.Temperatures.Length) {
1181 Sensor sensor = new Sensor(temperature.Name, temperature.Index,
1182 SensorType.Temperature, this, new [] {
1183 new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
1185 temperatures.Add(sensor);
1188 foreach (Fan fan in f)
1189 if (fan.Index < superIO.Fans.Length) {
1190 Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
1195 foreach (Ctrl ctrl in c) {
1196 int index = ctrl.Index;
1197 if (index < superIO.Controls.Length) {
1198 Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control,
1200 Control control = new Control(sensor, settings, 0, 100);
1201 control.ControlModeChanged += (cc) => {
1202 if (cc.ControlMode == ControlMode.Default) {
1203 superIO.SetControl(index, null);
1205 superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
1208 control.SoftwareControlValueChanged += (cc) => {
1209 if (cc.ControlMode == ControlMode.Software)
1210 superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
1212 if (control.ControlMode == ControlMode.Software)
1213 superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55));
1214 sensor.Control = control;
1215 controls.Add(sensor);
1216 ActivateSensor(sensor);
1221 public override HardwareType HardwareType {
1222 get { return HardwareType.SuperIO; }
1225 public override IHardware Parent {
1226 get { return mainboard; }
1230 public override string GetReport() {
1231 return superIO.GetReport();
1234 public override void Update() {
1237 foreach (Sensor sensor in voltages) {
1238 float? value = readVoltage(sensor.Index);
1239 if (value.HasValue) {
1240 sensor.Value = value + (value - sensor.Parameters[2].Value) *
1241 sensor.Parameters[0].Value / sensor.Parameters[1].Value;
1242 ActivateSensor(sensor);
1246 foreach (Sensor sensor in temperatures) {
1247 float? value = readTemperature(sensor.Index);
1248 if (value.HasValue) {
1249 sensor.Value = value + sensor.Parameters[0].Value;
1250 ActivateSensor(sensor);
1254 foreach (Sensor sensor in fans) {
1255 float? value = readFan(sensor.Index);
1256 if (value.HasValue) {
1257 sensor.Value = value;
1258 if (value.Value > 0)
1259 ActivateSensor(sensor);
1263 foreach (Sensor sensor in controls) {
1264 float? value = readControl(sensor.Index);
1265 sensor.Value = value;
1271 public override void Close() {
1272 foreach (Sensor sensor in controls) {
1273 // restore all controls back to default
1274 superIO.SetControl(sensor.Index, null);
1279 private class Voltage {
1280 public readonly string Name;
1281 public readonly int Index;
1282 public readonly float Ri;
1283 public readonly float Rf;
1284 public readonly float Vf;
1285 public readonly bool Hidden;
1287 public Voltage(string name, int index) :
1288 this(name, index, false) { }
1290 public Voltage(string name, int index, bool hidden) :
1291 this(name, index, 0, 1, 0, hidden) { }
1293 public Voltage(string name, int index, float ri, float rf) :
1294 this(name, index, ri, rf, 0, false) { }
1296 // float ri = 0, float rf = 1, float vf = 0, bool hidden = false)
1298 public Voltage(string name, int index,
1299 float ri, float rf, float vf, bool hidden)
1306 this.Hidden = hidden;
1310 private class Temperature {
1311 public readonly string Name;
1312 public readonly int Index;
1314 public Temperature(string name, int index) {
1321 public readonly string Name;
1322 public readonly int Index;
1324 public Fan(string name, int index) {
1330 private class Ctrl {
1331 public readonly string Name;
1332 public readonly int Index;
1334 public Ctrl(string name, int index) {