Fixed Issue 387. The new implementation does not try to start a ring 0 driver that already exists, but could not be opened. It tries to delete the driver and install it new. The driver is now stored temporarily in the application folder. The driver is not correctly removed on system shutdown.
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));
120 case Manufacturer.ASRock:
122 case Model.P55_Deluxe: // IT8720F
124 v.Add(new Voltage("CPU VCore", 0));
125 v.Add(new Voltage("+3.3V", 2));
126 v.Add(new Voltage("+12V", 4, 30, 10));
127 v.Add(new Voltage("+5V", 5, 6.8f, 10));
128 v.Add(new Voltage("VBat", 8));
129 t.Add(new Temperature("CPU", 0));
130 t.Add(new Temperature("Motherboard", 1));
131 f.Add(new Fan("CPU Fan", 0));
132 f.Add(new Fan("Chassis Fan #1", 1));
134 // this mutex is also used by the official ASRock tool
135 mutex = new Mutex(false, "ASRockOCMark");
137 bool exclusiveAccess = false;
139 exclusiveAccess = mutex.WaitOne(10, false);
140 } catch (AbandonedMutexException) { }
141 catch (InvalidOperationException) { }
143 // only read additional fans if we get exclusive access
144 if (exclusiveAccess) {
146 f.Add(new Fan("Chassis Fan #2", 2));
147 f.Add(new Fan("Chassis Fan #3", 3));
148 f.Add(new Fan("Power Fan", 4));
150 readFan = (index) => {
152 return superIO.Fans[index];
155 byte? gpio = superIO.ReadGPIO(7);
159 // read the last 3 fans based on GPIO 83-85
160 int[] masks = { 0x05, 0x03, 0x06 };
161 return (((gpio.Value >> 3) & 0x07) ==
162 masks[index - 2]) ? superIO.Fans[2] : null;
169 byte? gpio = superIO.ReadGPIO(7);
173 // prepare the GPIO 83-85 for the next update
174 int[] masks = { 0x05, 0x03, 0x06 };
176 (byte)((gpio.Value & 0xC7) | (masks[fanIndex] << 3)));
177 fanIndex = (fanIndex + 1) % 3;
183 v.Add(new Voltage("CPU VCore", 0));
184 v.Add(new Voltage("Voltage #2", 1, true));
185 v.Add(new Voltage("Voltage #3", 2, true));
186 v.Add(new Voltage("Voltage #4", 3, true));
187 v.Add(new Voltage("Voltage #5", 4, true));
188 v.Add(new Voltage("Voltage #6", 5, true));
189 v.Add(new Voltage("Voltage #7", 6, true));
190 v.Add(new Voltage("Voltage #8", 7, true));
191 v.Add(new Voltage("VBat", 8));
192 for (int i = 0; i < superIO.Temperatures.Length; i++)
193 t.Add(new Temperature("Temperature #" + (i + 1), i));
194 for (int i = 0; i < superIO.Fans.Length; i++)
195 f.Add(new Fan("Fan #" + (i + 1), i));
200 case Manufacturer.DFI:
202 case Model.LP_BI_P45_T2RS_Elite: // IT8718F
203 v.Add(new Voltage("CPU VCore", 0));
204 v.Add(new Voltage("FSB VTT", 1));
205 v.Add(new Voltage("+3.3V", 2));
206 v.Add(new Voltage("+5V", 3, 6.8f, 10));
207 v.Add(new Voltage("+12V", 4, 30, 10));
208 v.Add(new Voltage("NB Core", 5));
209 v.Add(new Voltage("VDIMM", 6));
210 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
211 v.Add(new Voltage("VBat", 8));
212 t.Add(new Temperature("CPU", 0));
213 t.Add(new Temperature("System", 1));
214 t.Add(new Temperature("Chipset", 2));
215 f.Add(new Fan("Fan #1", 0));
216 f.Add(new Fan("Fan #2", 1));
217 f.Add(new Fan("Fan #3", 2));
219 case Model.LP_DK_P55_T3eH9: // IT8720F
220 v.Add(new Voltage("CPU VCore", 0));
221 v.Add(new Voltage("VTT", 1));
222 v.Add(new Voltage("+3.3V", 2));
223 v.Add(new Voltage("+5V", 3, 6.8f, 10));
224 v.Add(new Voltage("+12V", 4, 30, 10));
225 v.Add(new Voltage("CPU PLL", 5));
226 v.Add(new Voltage("DRAM", 6));
227 v.Add(new Voltage("+5VSB", 7, 6.8f, 10));
228 v.Add(new Voltage("VBat", 8));
229 t.Add(new Temperature("Chipset", 0));
230 t.Add(new Temperature("CPU PWM", 1));
231 t.Add(new Temperature("CPU", 2));
232 f.Add(new Fan("Fan #1", 0));
233 f.Add(new Fan("Fan #2", 1));
234 f.Add(new Fan("Fan #3", 2));
237 v.Add(new Voltage("CPU VCore", 0));
238 v.Add(new Voltage("VTT", 1, true));
239 v.Add(new Voltage("+3.3V", 2, true));
240 v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
241 v.Add(new Voltage("+12V", 4, 30, 10, 0, true));
242 v.Add(new Voltage("Voltage #6", 5, true));
243 v.Add(new Voltage("DRAM", 6, true));
244 v.Add(new Voltage("+5VSB", 7, 6.8f, 10, 0, true));
245 v.Add(new Voltage("VBat", 8));
246 for (int i = 0; i < superIO.Temperatures.Length; i++)
247 t.Add(new Temperature("Temperature #" + (i + 1), i));
248 for (int i = 0; i < superIO.Fans.Length; i++)
249 f.Add(new Fan("Fan #" + (i + 1), i));
254 case Manufacturer.Gigabyte:
256 case Model._965P_S3: // IT8718F
257 v.Add(new Voltage("CPU VCore", 0));
258 v.Add(new Voltage("DRAM", 1));
259 v.Add(new Voltage("+3.3V", 2));
260 v.Add(new Voltage("+5V", 3, 6.8f, 10));
261 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
262 v.Add(new Voltage("VBat", 8));
263 t.Add(new Temperature("System", 0));
264 t.Add(new Temperature("CPU", 1));
265 f.Add(new Fan("CPU Fan", 0));
266 f.Add(new Fan("System Fan", 1));
268 case Model.EP45_DS3R: // IT8718F
269 case Model.EP45_UD3R:
271 v.Add(new Voltage("CPU VCore", 0));
272 v.Add(new Voltage("DRAM", 1));
273 v.Add(new Voltage("+3.3V", 2));
274 v.Add(new Voltage("+5V", 3, 6.8f, 10));
275 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
276 v.Add(new Voltage("VBat", 8));
277 t.Add(new Temperature("System", 0));
278 t.Add(new Temperature("CPU", 1));
279 f.Add(new Fan("CPU Fan", 0));
280 f.Add(new Fan("System Fan #2", 1));
281 f.Add(new Fan("Power Fan", 2));
282 f.Add(new Fan("System Fan #1", 3));
284 case Model.EX58_EXTREME: // IT8720F
285 v.Add(new Voltage("CPU VCore", 0));
286 v.Add(new Voltage("DRAM", 1));
287 v.Add(new Voltage("+5V", 3, 6.8f, 10));
288 v.Add(new Voltage("VBat", 8));
289 t.Add(new Temperature("System", 0));
290 t.Add(new Temperature("CPU", 1));
291 t.Add(new Temperature("Northbridge", 2));
292 f.Add(new Fan("CPU Fan", 0));
293 f.Add(new Fan("System Fan #2", 1));
294 f.Add(new Fan("Power Fan", 2));
295 f.Add(new Fan("System Fan #1", 3));
297 case Model.P35_DS3: // IT8718F
298 case Model.P35_DS3L: // IT8718F
299 v.Add(new Voltage("CPU VCore", 0));
300 v.Add(new Voltage("DRAM", 1));
301 v.Add(new Voltage("+3.3V", 2));
302 v.Add(new Voltage("+5V", 3, 6.8f, 10));
303 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
304 v.Add(new Voltage("VBat", 8));
305 t.Add(new Temperature("System", 0));
306 t.Add(new Temperature("CPU", 1));
307 f.Add(new Fan("CPU Fan", 0));
308 f.Add(new Fan("System Fan #1", 1));
309 f.Add(new Fan("System Fan #2", 2));
310 f.Add(new Fan("Power Fan", 3));
312 case Model.P55_UD4: // IT8720F
313 case Model.P55A_UD3: // IT8720F
314 case Model.P55M_UD4: // IT8720F
315 case Model.H55_USB3: // IT8720F
316 case Model.EX58_UD3R: // IT8720F
317 v.Add(new Voltage("CPU VCore", 0));
318 v.Add(new Voltage("DRAM", 1));
319 v.Add(new Voltage("+3.3V", 2));
320 v.Add(new Voltage("+5V", 3, 6.8f, 10));
321 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
322 v.Add(new Voltage("VBat", 8));
323 t.Add(new Temperature("System", 0));
324 t.Add(new Temperature("CPU", 2));
325 f.Add(new Fan("CPU Fan", 0));
326 f.Add(new Fan("System Fan #2", 1));
327 f.Add(new Fan("Power Fan", 2));
328 f.Add(new Fan("System Fan #1", 3));
330 case Model.H55N_USB3: // IT8720F
331 v.Add(new Voltage("CPU VCore", 0));
332 v.Add(new Voltage("DRAM", 1));
333 v.Add(new Voltage("+3.3V", 2));
334 v.Add(new Voltage("+5V", 3, 6.8f, 10));
335 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
336 v.Add(new Voltage("VBat", 8));
337 t.Add(new Temperature("System", 0));
338 t.Add(new Temperature("CPU", 2));
339 f.Add(new Fan("CPU Fan", 0));
340 f.Add(new Fan("System Fan", 1));
342 case Model.G41M_Combo: // IT8718F
343 case Model.G41MT_S2: // IT8718F
344 case Model.G41MT_S2P: // IT8718F
345 v.Add(new Voltage("CPU VCore", 0));
346 v.Add(new Voltage("DRAM", 1));
347 v.Add(new Voltage("+3.3V", 2));
348 v.Add(new Voltage("+5V", 3, 6.8f, 10));
349 v.Add(new Voltage("+12V", 7, 24.3f, 8.2f));
350 v.Add(new Voltage("VBat", 8));
351 t.Add(new Temperature("CPU", 2));
352 f.Add(new Fan("CPU Fan", 0));
353 f.Add(new Fan("System Fan", 1));
355 case Model.GA_MA770T_UD3: // IT8720F
356 case Model.GA_MA770T_UD3P: // IT8720F
357 case Model.GA_MA790X_UD3P: // IT8720F
358 v.Add(new Voltage("CPU VCore", 0));
359 v.Add(new Voltage("DRAM", 1));
360 v.Add(new Voltage("+3.3V", 2));
361 v.Add(new Voltage("+5V", 3, 6.8f, 10));
362 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
363 v.Add(new Voltage("VBat", 8));
364 t.Add(new Temperature("System", 0));
365 t.Add(new Temperature("CPU", 1));
366 f.Add(new Fan("CPU Fan", 0));
367 f.Add(new Fan("System Fan #1", 1));
368 f.Add(new Fan("System Fan #2", 2));
369 f.Add(new Fan("Power Fan", 3));
371 case Model.GA_MA78LM_S2H: // IT8718F
372 v.Add(new Voltage("CPU VCore", 0));
373 v.Add(new Voltage("DRAM", 1));
374 v.Add(new Voltage("+3.3V", 2));
375 v.Add(new Voltage("+5V", 3, 6.8f, 10));
376 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
377 v.Add(new Voltage("VBat", 8));
378 t.Add(new Temperature("System", 0));
379 t.Add(new Temperature("CPU", 1));
380 t.Add(new Temperature("VRM", 2));
381 f.Add(new Fan("CPU Fan", 0));
382 f.Add(new Fan("System Fan #1", 1));
383 f.Add(new Fan("System Fan #2", 2));
384 f.Add(new Fan("Power Fan", 3));
386 case Model.GA_MA785GM_US2H: // IT8718F
387 case Model.GA_MA785GMT_UD2H: // IT8718F
388 v.Add(new Voltage("CPU VCore", 0));
389 v.Add(new Voltage("DRAM", 1));
390 v.Add(new Voltage("+3.3V", 2));
391 v.Add(new Voltage("+5V", 3, 6.8f, 10));
392 v.Add(new Voltage("+12V", 4, 24.3f, 8.2f));
393 v.Add(new Voltage("VBat", 8));
394 t.Add(new Temperature("System", 0));
395 t.Add(new Temperature("CPU", 1));
396 f.Add(new Fan("CPU Fan", 0));
397 f.Add(new Fan("System Fan", 1));
398 f.Add(new Fan("NB Fan", 2));
400 case Model.X58A_UD3R: // IT8720F
401 v.Add(new Voltage("CPU VCore", 0));
402 v.Add(new Voltage("DRAM", 1));
403 v.Add(new Voltage("+3.3V", 2));
404 v.Add(new Voltage("+5V", 3, 6.8f, 10));
405 v.Add(new Voltage("+12V", 5, 24.3f, 8.2f));
406 v.Add(new Voltage("VBat", 8));
407 t.Add(new Temperature("System", 0));
408 t.Add(new Temperature("CPU", 1));
409 t.Add(new Temperature("Northbridge", 2));
410 f.Add(new Fan("CPU Fan", 0));
411 f.Add(new Fan("System Fan #2", 1));
412 f.Add(new Fan("Power Fan", 2));
413 f.Add(new Fan("System Fan #1", 3));
416 v.Add(new Voltage("CPU VCore", 0));
417 v.Add(new Voltage("DRAM", 1, true));
418 v.Add(new Voltage("+3.3V", 2, true));
419 v.Add(new Voltage("+5V", 3, 6.8f, 10, 0, true));
420 v.Add(new Voltage("Voltage #5", 4, true));
421 v.Add(new Voltage("Voltage #6", 5, true));
422 v.Add(new Voltage("Voltage #7", 6, true));
423 v.Add(new Voltage("Voltage #8", 7, true));
424 v.Add(new Voltage("VBat", 8));
425 for (int i = 0; i < superIO.Temperatures.Length; i++)
426 t.Add(new Temperature("Temperature #" + (i + 1), i));
427 for (int i = 0; i < superIO.Fans.Length; i++)
428 f.Add(new Fan("Fan #" + (i + 1), i));
434 v.Add(new Voltage("CPU VCore", 0));
435 v.Add(new Voltage("Voltage #2", 1, true));
436 v.Add(new Voltage("Voltage #3", 2, true));
437 v.Add(new Voltage("Voltage #4", 3, true));
438 v.Add(new Voltage("Voltage #5", 4, true));
439 v.Add(new Voltage("Voltage #6", 5, true));
440 v.Add(new Voltage("Voltage #7", 6, true));
441 v.Add(new Voltage("Voltage #8", 7, true));
442 v.Add(new Voltage("VBat", 8));
443 for (int i = 0; i < superIO.Temperatures.Length; i++)
444 t.Add(new Temperature("Temperature #" + (i + 1), i));
445 for (int i = 0; i < superIO.Fans.Length; i++)
446 f.Add(new Fan("Fan #" + (i + 1), i));
455 switch (manufacturer) {
456 case Manufacturer.ECS:
458 case Model.A890GXM_A: // IT8721F
459 v.Add(new Voltage("CPU VCore", 0));
460 v.Add(new Voltage("VDIMM", 1));
461 v.Add(new Voltage("NB Voltage", 2));
462 v.Add(new Voltage("Analog +3.3V", 3, 10, 10));
463 // v.Add(new Voltage("VDIMM", 6, true));
464 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
465 v.Add(new Voltage("VBat", 8, 10, 10));
466 t.Add(new Temperature("CPU", 0));
467 t.Add(new Temperature("System", 1));
468 t.Add(new Temperature("Northbridge", 2));
469 f.Add(new Fan("CPU Fan", 0));
470 f.Add(new Fan("System Fan", 1));
471 f.Add(new Fan("Power Fan", 2));
474 v.Add(new Voltage("Voltage #1", 0, true));
475 v.Add(new Voltage("Voltage #2", 1, true));
476 v.Add(new Voltage("Voltage #3", 2, true));
477 v.Add(new Voltage("Analog +3.3V", 3, 10, 10, 0, true));
478 v.Add(new Voltage("Voltage #5", 4, true));
479 v.Add(new Voltage("Voltage #6", 5, true));
480 v.Add(new Voltage("Voltage #7", 6, true));
481 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
482 v.Add(new Voltage("VBat", 8, 10, 10));
483 for (int i = 0; i < superIO.Temperatures.Length; i++)
484 t.Add(new Temperature("Temperature #" + (i + 1), i));
485 for (int i = 0; i < superIO.Fans.Length; i++)
486 f.Add(new Fan("Fan #" + (i + 1), i));
490 case Manufacturer.Gigabyte:
492 case Model.H61M_DS2_REV_1_2: // IT8728F
493 case Model.H61M_USB3_B3_REV_2_0: // IT8728F
494 v.Add(new Voltage("VTT", 0));
495 v.Add(new Voltage("+12V", 2, 30.9f, 10));
496 v.Add(new Voltage("CPU VCore", 5));
497 v.Add(new Voltage("DRAM", 6));
498 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
499 v.Add(new Voltage("VBat", 8, 10, 10));
500 t.Add(new Temperature("System", 0));
501 t.Add(new Temperature("CPU", 2));
502 f.Add(new Fan("CPU Fan", 0));
503 f.Add(new Fan("System Fan", 1));
505 case Model.H67A_UD3H_B3: // IT8728F
506 case Model.H67A_USB3_B3: // IT8728F
507 v.Add(new Voltage("VTT", 0));
508 v.Add(new Voltage("+5V", 1, 15, 10));
509 v.Add(new Voltage("+12V", 2, 30.9f, 10));
510 v.Add(new Voltage("CPU VCore", 5));
511 v.Add(new Voltage("DRAM", 6));
512 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
513 v.Add(new Voltage("VBat", 8, 10, 10));
514 t.Add(new Temperature("System", 0));
515 t.Add(new Temperature("CPU", 2));
516 f.Add(new Fan("CPU Fan", 0));
517 f.Add(new Fan("System Fan #1", 1));
518 f.Add(new Fan("Power Fan", 2));
519 f.Add(new Fan("System Fan #2", 3));
521 case Model.Z68A_D3H_B3: // IT8728F
522 v.Add(new Voltage("VTT", 0));
523 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
524 v.Add(new Voltage("+12V", 2, 30.9f, 10));
525 v.Add(new Voltage("+5V", 3, 7.15f, 10));
526 v.Add(new Voltage("CPU VCore", 5));
527 v.Add(new Voltage("DRAM", 6));
528 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
529 v.Add(new Voltage("VBat", 8, 10, 10));
530 t.Add(new Temperature("System", 0));
531 t.Add(new Temperature("CPU", 2));
532 f.Add(new Fan("CPU Fan", 0));
533 f.Add(new Fan("System Fan #1", 1));
534 f.Add(new Fan("Power Fan", 2));
535 f.Add(new Fan("System Fan #2", 3));
537 case Model.P67A_UD3_B3: // IT8728F
538 case Model.P67A_UD3R_B3: // IT8728F
539 case Model.P67A_UD4_B3: // IT8728F
540 case Model.Z68AP_D3: // IT8728F
541 case Model.Z68X_UD3H_B3: // IT8728F
542 v.Add(new Voltage("VTT", 0));
543 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
544 v.Add(new Voltage("+12V", 2, 30.9f, 10));
545 v.Add(new Voltage("+5V", 3, 7.15f, 10));
546 v.Add(new Voltage("CPU VCore", 5));
547 v.Add(new Voltage("DRAM", 6));
548 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
549 v.Add(new Voltage("VBat", 8, 10, 10));
550 t.Add(new Temperature("System", 0));
551 t.Add(new Temperature("CPU", 2));
552 f.Add(new Fan("CPU Fan", 0));
553 f.Add(new Fan("System Fan #2", 1));
554 f.Add(new Fan("Power Fan", 2));
555 f.Add(new Fan("System Fan #1", 3));
557 case Model.Z68X_UD7_B3: // IT8728F
558 v.Add(new Voltage("VTT", 0));
559 v.Add(new Voltage("+3.3V", 1, 6.49f, 10));
560 v.Add(new Voltage("+12V", 2, 30.9f, 10));
561 v.Add(new Voltage("+5V", 3, 7.15f, 10));
562 v.Add(new Voltage("CPU VCore", 5));
563 v.Add(new Voltage("DRAM", 6));
564 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
565 v.Add(new Voltage("VBat", 8, 10, 10));
566 t.Add(new Temperature("System", 0));
567 t.Add(new Temperature("CPU", 1));
568 t.Add(new Temperature("System 3", 2));
569 f.Add(new Fan("CPU Fan", 0));
570 f.Add(new Fan("Power Fan", 1));
571 f.Add(new Fan("System Fan #1", 2));
572 f.Add(new Fan("System Fan #2", 3));
573 f.Add(new Fan("System Fan #3", 4));
576 v.Add(new Voltage("Voltage #1", 0, true));
577 v.Add(new Voltage("Voltage #2", 1, true));
578 v.Add(new Voltage("Voltage #3", 2, true));
579 v.Add(new Voltage("Voltage #4", 3, true));
580 v.Add(new Voltage("Voltage #5", 4, true));
581 v.Add(new Voltage("Voltage #6", 5, true));
582 v.Add(new Voltage("Voltage #7", 6, true));
583 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
584 v.Add(new Voltage("VBat", 8, 10, 10));
585 for (int i = 0; i < superIO.Temperatures.Length; i++)
586 t.Add(new Temperature("Temperature #" + (i + 1), i));
587 for (int i = 0; i < superIO.Fans.Length; i++)
588 f.Add(new Fan("Fan #" + (i + 1), i));
592 case Manufacturer.Shuttle:
594 case Model.FH67: // IT8772E
595 v.Add(new Voltage("CPU VCore", 0));
596 v.Add(new Voltage("DRAM", 1));
597 v.Add(new Voltage("PCH VCCIO", 2));
598 v.Add(new Voltage("CPU VCCIO", 3));
599 v.Add(new Voltage("Graphic Voltage", 4));
600 v.Add(new Voltage("Standby +3.3V", 7, 10, 10));
601 v.Add(new Voltage("VBat", 8, 10, 10));
602 t.Add(new Temperature("System", 0));
603 t.Add(new Temperature("CPU", 1));
604 f.Add(new Fan("Fan #1", 0));
605 f.Add(new Fan("CPU Fan", 1));
608 v.Add(new Voltage("Voltage #1", 0, true));
609 v.Add(new Voltage("Voltage #2", 1, true));
610 v.Add(new Voltage("Voltage #3", 2, true));
611 v.Add(new Voltage("Voltage #4", 3, true));
612 v.Add(new Voltage("Voltage #5", 4, true));
613 v.Add(new Voltage("Voltage #6", 5, true));
614 v.Add(new Voltage("Voltage #7", 6, true));
615 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
616 v.Add(new Voltage("VBat", 8, 10, 10));
617 for (int i = 0; i < superIO.Temperatures.Length; i++)
618 t.Add(new Temperature("Temperature #" + (i + 1), i));
619 for (int i = 0; i < superIO.Fans.Length; i++)
620 f.Add(new Fan("Fan #" + (i + 1), i));
625 v.Add(new Voltage("Voltage #1", 0, true));
626 v.Add(new Voltage("Voltage #2", 1, true));
627 v.Add(new Voltage("Voltage #3", 2, true));
628 v.Add(new Voltage("Voltage #4", 3, true));
629 v.Add(new Voltage("Voltage #5", 4, true));
630 v.Add(new Voltage("Voltage #6", 5, true));
631 v.Add(new Voltage("Voltage #7", 6, true));
632 v.Add(new Voltage("Standby +3.3V", 7, 10, 10, 0, true));
633 v.Add(new Voltage("VBat", 8, 10, 10));
634 for (int i = 0; i < superIO.Temperatures.Length; i++)
635 t.Add(new Temperature("Temperature #" + (i + 1), i));
636 for (int i = 0; i < superIO.Fans.Length; i++)
637 f.Add(new Fan("Fan #" + (i + 1), i));
643 v.Add(new Voltage("VCC3V", 0, 150, 150));
644 v.Add(new Voltage("VSB3V", 1, 150, 150));
645 v.Add(new Voltage("Battery", 2, 150, 150));
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));
658 switch (manufacturer) {
659 case Manufacturer.EVGA:
661 case Model.X58_SLI_Classified: // F71882
662 v.Add(new Voltage("VCC3V", 0, 150, 150));
663 v.Add(new Voltage("CPU VCore", 1, 47, 100));
664 v.Add(new Voltage("DIMM", 2, 47, 100));
665 v.Add(new Voltage("CPU VTT", 3, 24, 100));
666 v.Add(new Voltage("IOH Vcore", 4, 24, 100));
667 v.Add(new Voltage("+5V", 5, 51, 12));
668 v.Add(new Voltage("+12V", 6, 56, 6.8f));
669 v.Add(new Voltage("3VSB", 7, 150, 150));
670 v.Add(new Voltage("VBat", 8, 150, 150));
671 t.Add(new Temperature("CPU", 0));
672 t.Add(new Temperature("VREG", 1));
673 t.Add(new Temperature("System", 2));
674 f.Add(new Fan("CPU Fan", 0));
675 f.Add(new Fan("Power Fan", 1));
676 f.Add(new Fan("Chassis Fan", 2));
679 v.Add(new Voltage("VCC3V", 0, 150, 150));
680 v.Add(new Voltage("CPU VCore", 1));
681 v.Add(new Voltage("Voltage #3", 2, true));
682 v.Add(new Voltage("Voltage #4", 3, true));
683 v.Add(new Voltage("Voltage #5", 4, true));
684 v.Add(new Voltage("Voltage #6", 5, true));
685 v.Add(new Voltage("Voltage #7", 6, true));
686 v.Add(new Voltage("VSB3V", 7, 150, 150));
687 v.Add(new Voltage("VBat", 8, 150, 150));
688 for (int i = 0; i < superIO.Temperatures.Length; i++)
689 t.Add(new Temperature("Temperature #" + (i + 1), i));
690 for (int i = 0; i < superIO.Fans.Length; i++)
691 f.Add(new Fan("Fan #" + (i + 1), i));
696 v.Add(new Voltage("VCC3V", 0, 150, 150));
697 v.Add(new Voltage("CPU VCore", 1));
698 v.Add(new Voltage("Voltage #3", 2, true));
699 v.Add(new Voltage("Voltage #4", 3, true));
700 v.Add(new Voltage("Voltage #5", 4, true));
701 v.Add(new Voltage("Voltage #6", 5, true));
702 if (superIO.Chip != Chip.F71808E)
703 v.Add(new Voltage("Voltage #7", 6, true));
704 v.Add(new Voltage("VSB3V", 7, 150, 150));
705 v.Add(new Voltage("VBat", 8, 150, 150));
706 for (int i = 0; i < superIO.Temperatures.Length; i++)
707 t.Add(new Temperature("Temperature #" + (i + 1), i));
708 for (int i = 0; i < superIO.Fans.Length; i++)
709 f.Add(new Fan("Fan #" + (i + 1), i));
715 switch (manufacturer) {
716 case Manufacturer.ASRock:
718 case Model.AOD790GX_128M: // W83627EHF
719 v.Add(new Voltage("CPU VCore", 0));
720 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
721 v.Add(new Voltage("+3.3V", 4, 10, 10));
722 v.Add(new Voltage("+5V", 5, 20, 10));
723 v.Add(new Voltage("+12V", 6, 28, 5));
724 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
725 v.Add(new Voltage("VBAT", 8, 34, 34));
726 t.Add(new Temperature("CPU", 0));
727 t.Add(new Temperature("Motherboard", 2));
728 f.Add(new Fan("CPU Fan", 0));
729 f.Add(new Fan("Chassis Fan", 1));
732 v.Add(new Voltage("CPU VCore", 0));
733 v.Add(new Voltage("Voltage #2", 1, true));
734 v.Add(new Voltage("AVCC", 2, 34, 34));
735 v.Add(new Voltage("3VCC", 3, 34, 34));
736 v.Add(new Voltage("Voltage #5", 4, true));
737 v.Add(new Voltage("Voltage #6", 5, true));
738 v.Add(new Voltage("Voltage #7", 6, true));
739 v.Add(new Voltage("3VSB", 7, 34, 34));
740 v.Add(new Voltage("VBAT", 8, 34, 34));
741 v.Add(new Voltage("Voltage #10", 9, true));
742 t.Add(new Temperature("CPU", 0));
743 t.Add(new Temperature("Auxiliary", 1));
744 t.Add(new Temperature("System", 2));
745 f.Add(new Fan("System Fan", 0));
746 f.Add(new Fan("CPU Fan", 1));
747 f.Add(new Fan("Auxiliary Fan", 2));
748 f.Add(new Fan("CPU Fan #2", 3));
749 f.Add(new Fan("Auxiliary Fan #2", 4));
753 v.Add(new Voltage("CPU VCore", 0));
754 v.Add(new Voltage("Voltage #2", 1, true));
755 v.Add(new Voltage("AVCC", 2, 34, 34));
756 v.Add(new Voltage("3VCC", 3, 34, 34));
757 v.Add(new Voltage("Voltage #5", 4, true));
758 v.Add(new Voltage("Voltage #6", 5, true));
759 v.Add(new Voltage("Voltage #7", 6, true));
760 v.Add(new Voltage("3VSB", 7, 34, 34));
761 v.Add(new Voltage("VBAT", 8, 34, 34));
762 v.Add(new Voltage("Voltage #10", 9, true));
763 t.Add(new Temperature("CPU", 0));
764 t.Add(new Temperature("Auxiliary", 1));
765 t.Add(new Temperature("System", 2));
766 f.Add(new Fan("System Fan", 0));
767 f.Add(new Fan("CPU Fan", 1));
768 f.Add(new Fan("Auxiliary Fan", 2));
769 f.Add(new Fan("CPU Fan #2", 3));
770 f.Add(new Fan("Auxiliary Fan #2", 4));
775 case Chip.W83627DHGP:
778 switch (manufacturer) {
779 case Manufacturer.ASRock:
781 case Model._880GMH_USB3: // W83627DHG-P
782 v.Add(new Voltage("CPU VCore", 0));
783 v.Add(new Voltage("+3.3V", 3, 34, 34));
784 v.Add(new Voltage("+5V", 5, 15, 7.5f));
785 v.Add(new Voltage("+12V", 6, 56, 10));
786 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
787 v.Add(new Voltage("VBAT", 8, 34, 34));
788 t.Add(new Temperature("CPU", 0));
789 t.Add(new Temperature("Motherboard", 2));
790 f.Add(new Fan("Chassis Fan", 0));
791 f.Add(new Fan("CPU Fan", 1));
792 f.Add(new Fan("Power Fan", 2));
795 v.Add(new Voltage("CPU VCore", 0));
796 v.Add(new Voltage("Voltage #2", 1, true));
797 v.Add(new Voltage("AVCC", 2, 34, 34));
798 v.Add(new Voltage("3VCC", 3, 34, 34));
799 v.Add(new Voltage("Voltage #5", 4, true));
800 v.Add(new Voltage("Voltage #6", 5, true));
801 v.Add(new Voltage("Voltage #7", 6, true));
802 v.Add(new Voltage("3VSB", 7, 34, 34));
803 v.Add(new Voltage("VBAT", 8, 34, 34));
804 t.Add(new Temperature("CPU", 0));
805 t.Add(new Temperature("Auxiliary", 1));
806 t.Add(new Temperature("System", 2));
807 f.Add(new Fan("System Fan", 0));
808 f.Add(new Fan("CPU Fan", 1));
809 f.Add(new Fan("Auxiliary Fan", 2));
810 f.Add(new Fan("CPU Fan #2", 3));
811 f.Add(new Fan("Auxiliary Fan #2", 4));
815 case Manufacturer.ASUS:
817 case Model.P6T: // W83667HG
818 case Model.P6X58D_E: // W83667HG
819 case Model.Rampage_II_GENE: // W83667HG
820 v.Add(new Voltage("CPU VCore", 0));
821 v.Add(new Voltage("+12V", 1, 11.5f, 1.91f));
822 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
823 v.Add(new Voltage("+3.3V", 3, 34, 34));
824 v.Add(new Voltage("+5V", 4, 15, 7.5f));
825 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
826 v.Add(new Voltage("VBAT", 8, 34, 34));
827 t.Add(new Temperature("CPU", 0));
828 t.Add(new Temperature("Motherboard", 2));
829 f.Add(new Fan("Chassis Fan #1", 0));
830 f.Add(new Fan("CPU Fan", 1));
831 f.Add(new Fan("Power Fan", 2));
832 f.Add(new Fan("Chassis Fan #2", 3));
833 f.Add(new Fan("Chassis Fan #3", 4));
835 case Model.Rampage_Extreme: // W83667HG
836 v.Add(new Voltage("CPU VCore", 0));
837 v.Add(new Voltage("+12V", 1, 12, 2));
838 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
839 v.Add(new Voltage("+3.3V", 3, 34, 34));
840 v.Add(new Voltage("+5V", 4, 15, 7.5f));
841 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
842 v.Add(new Voltage("VBAT", 8, 34, 34));
843 t.Add(new Temperature("CPU", 0));
844 t.Add(new Temperature("Motherboard", 2));
845 f.Add(new Fan("Chassis Fan #1", 0));
846 f.Add(new Fan("CPU Fan", 1));
847 f.Add(new Fan("Power Fan", 2));
848 f.Add(new Fan("Chassis Fan #2", 3));
849 f.Add(new Fan("Chassis Fan #3", 4));
852 v.Add(new Voltage("CPU VCore", 0));
853 v.Add(new Voltage("Voltage #2", 1, true));
854 v.Add(new Voltage("AVCC", 2, 34, 34));
855 v.Add(new Voltage("3VCC", 3, 34, 34));
856 v.Add(new Voltage("Voltage #5", 4, true));
857 v.Add(new Voltage("Voltage #6", 5, true));
858 v.Add(new Voltage("Voltage #7", 6, true));
859 v.Add(new Voltage("3VSB", 7, 34, 34));
860 v.Add(new Voltage("VBAT", 8, 34, 34));
861 t.Add(new Temperature("CPU", 0));
862 t.Add(new Temperature("Auxiliary", 1));
863 t.Add(new Temperature("System", 2));
864 f.Add(new Fan("System Fan", 0));
865 f.Add(new Fan("CPU Fan", 1));
866 f.Add(new Fan("Auxiliary Fan", 2));
867 f.Add(new Fan("CPU Fan #2", 3));
868 f.Add(new Fan("Auxiliary Fan #2", 4));
873 v.Add(new Voltage("CPU VCore", 0));
874 v.Add(new Voltage("Voltage #2", 1, true));
875 v.Add(new Voltage("AVCC", 2, 34, 34));
876 v.Add(new Voltage("3VCC", 3, 34, 34));
877 v.Add(new Voltage("Voltage #5", 4, true));
878 v.Add(new Voltage("Voltage #6", 5, true));
879 v.Add(new Voltage("Voltage #7", 6, true));
880 v.Add(new Voltage("3VSB", 7, 34, 34));
881 v.Add(new Voltage("VBAT", 8, 34, 34));
882 t.Add(new Temperature("CPU", 0));
883 t.Add(new Temperature("Auxiliary", 1));
884 t.Add(new Temperature("System", 2));
885 f.Add(new Fan("System Fan", 0));
886 f.Add(new Fan("CPU Fan", 1));
887 f.Add(new Fan("Auxiliary Fan", 2));
888 f.Add(new Fan("CPU Fan #2", 3));
889 f.Add(new Fan("Auxiliary Fan #2", 4));
896 v.Add(new Voltage("CPU VCore", 0));
897 v.Add(new Voltage("Voltage #2", 1, true));
898 v.Add(new Voltage("Voltage #3", 2, true));
899 v.Add(new Voltage("AVCC", 3, 34, 51));
900 v.Add(new Voltage("Voltage #5", 4, true));
901 v.Add(new Voltage("5VSB", 5, 34, 51));
902 v.Add(new Voltage("VBAT", 6));
903 t.Add(new Temperature("CPU", 0));
904 t.Add(new Temperature("Auxiliary", 1));
905 t.Add(new Temperature("System", 2));
906 f.Add(new Fan("System Fan", 0));
907 f.Add(new Fan("CPU Fan", 1));
908 f.Add(new Fan("Auxiliary Fan", 2));
912 switch (manufacturer) {
913 case Manufacturer.ASUS:
915 case Model.P8P67: // NCT6776F
916 case Model.P8P67_EVO: // NCT6776F
917 case Model.P8P67_PRO: // NCT6776F
918 v.Add(new Voltage("CPU VCore", 0));
919 v.Add(new Voltage("+12V", 1, 11, 1));
920 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
921 v.Add(new Voltage("+3.3V", 3, 34, 34));
922 v.Add(new Voltage("+5V", 4, 12, 3));
923 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
924 v.Add(new Voltage("VBAT", 8, 34, 34));
925 t.Add(new Temperature("CPU", 0));
926 t.Add(new Temperature("Auxiliary", 2));
927 t.Add(new Temperature("Motherboard", 3));
928 f.Add(new Fan("Chassis Fan #1", 0));
929 f.Add(new Fan("CPU Fan", 1));
930 f.Add(new Fan("Power Fan", 2));
931 f.Add(new Fan("Chassis Fan #2", 3));
932 c.Add(new Ctrl("Chassis Fan #2", 0));
933 c.Add(new Ctrl("CPU Fan", 1));
934 c.Add(new Ctrl("Chassis Fan #1", 2));
936 case Model.P8P67_M_PRO: // NCT6776F
937 v.Add(new Voltage("CPU VCore", 0));
938 v.Add(new Voltage("+12V", 1, 11, 1));
939 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
940 v.Add(new Voltage("+3.3V", 3, 34, 34));
941 v.Add(new Voltage("+5V", 4, 12, 3));
942 v.Add(new Voltage("Voltage #6", 5, true));
943 v.Add(new Voltage("Voltage #7", 6, true));
944 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
945 v.Add(new Voltage("VBAT", 8, 34, 34));
946 t.Add(new Temperature("CPU", 0));
947 t.Add(new Temperature("Motherboard", 3));
948 f.Add(new Fan("Chassis Fan #1", 0));
949 f.Add(new Fan("CPU Fan", 1));
950 f.Add(new Fan("Chassis Fan #2", 2));
951 f.Add(new Fan("Power Fan", 3));
952 f.Add(new Fan("Auxiliary Fan", 4));
954 case Model.P8Z68_V_PRO: // NCT6776F
955 v.Add(new Voltage("CPU VCore", 0));
956 v.Add(new Voltage("+12V", 1, 11, 1));
957 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
958 v.Add(new Voltage("+3.3V", 3, 34, 34));
959 v.Add(new Voltage("+5V", 4, 12, 3));
960 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
961 v.Add(new Voltage("VBAT", 8, 34, 34));
962 t.Add(new Temperature("CPU", 0));
963 t.Add(new Temperature("Auxiliary", 2));
964 t.Add(new Temperature("Motherboard", 3));
965 for (int i = 0; i < superIO.Fans.Length; i++)
966 f.Add(new Fan("Fan #" + (i + 1), i));
967 for (int i = 0; i < superIO.Controls.Length; i++)
968 c.Add(new Ctrl("Fan #" + (i + 1), i));
970 case Model.P9X79: // NCT6776F
971 v.Add(new Voltage("CPU VCore", 0));
972 v.Add(new Voltage("+12V", 1, 11, 1));
973 v.Add(new Voltage("Analog +3.3V", 2, 34, 34));
974 v.Add(new Voltage("+3.3V", 3, 34, 34));
975 v.Add(new Voltage("+5V", 4, 12, 3));
976 v.Add(new Voltage("Standby +3.3V", 7, 34, 34));
977 v.Add(new Voltage("VBAT", 8, 34, 34));
978 t.Add(new Temperature("CPU", 0));
979 t.Add(new Temperature("Motherboard", 3));
980 for (int i = 0; i < superIO.Fans.Length; i++)
981 f.Add(new Fan("Fan #" + (i + 1), i));
984 v.Add(new Voltage("CPU VCore", 0));
985 v.Add(new Voltage("Voltage #2", 1, true));
986 v.Add(new Voltage("AVCC", 2, 34, 34));
987 v.Add(new Voltage("3VCC", 3, 34, 34));
988 v.Add(new Voltage("Voltage #5", 4, true));
989 v.Add(new Voltage("Voltage #6", 5, true));
990 v.Add(new Voltage("Voltage #7", 6, true));
991 v.Add(new Voltage("3VSB", 7, 34, 34));
992 v.Add(new Voltage("VBAT", 8, 34, 34));
993 t.Add(new Temperature("CPU Core", 0));
994 t.Add(new Temperature("Temperature #1", 1));
995 t.Add(new Temperature("Temperature #2", 2));
996 t.Add(new Temperature("Temperature #3", 3));
997 for (int i = 0; i < superIO.Fans.Length; i++)
998 f.Add(new Fan("Fan #" + (i + 1), i));
1003 v.Add(new Voltage("CPU VCore", 0));
1004 v.Add(new Voltage("Voltage #2", 1, true));
1005 v.Add(new Voltage("AVCC", 2, 34, 34));
1006 v.Add(new Voltage("3VCC", 3, 34, 34));
1007 v.Add(new Voltage("Voltage #5", 4, true));
1008 v.Add(new Voltage("Voltage #6", 5, true));
1009 v.Add(new Voltage("Voltage #7", 6, true));
1010 v.Add(new Voltage("3VSB", 7, 34, 34));
1011 v.Add(new Voltage("VBAT", 8, 34, 34));
1012 t.Add(new Temperature("CPU Core", 0));
1013 t.Add(new Temperature("Temperature #1", 1));
1014 t.Add(new Temperature("Temperature #2", 2));
1015 t.Add(new Temperature("Temperature #3", 3));
1016 for (int i = 0; i < superIO.Fans.Length; i++)
1017 f.Add(new Fan("Fan #" + (i + 1), i));
1022 switch (manufacturer) {
1023 case Manufacturer.ASUS:
1026 v.Add(new Voltage("CPU VCore", 0));
1027 v.Add(new Voltage("Voltage #2", 1, true));
1028 v.Add(new Voltage("AVCC", 2, 34, 34));
1029 v.Add(new Voltage("3VCC", 3, 34, 34));
1030 v.Add(new Voltage("Voltage #5", 4, true));
1031 v.Add(new Voltage("Voltage #6", 5, true));
1032 v.Add(new Voltage("Voltage #7", 6, true));
1033 v.Add(new Voltage("3VSB", 7, 34, 34));
1034 v.Add(new Voltage("VBAT", 8, 34, 34));
1035 v.Add(new Voltage("VTT", 9));
1036 v.Add(new Voltage("Voltage #11", 10, true));
1037 v.Add(new Voltage("Voltage #12", 11, true));
1038 v.Add(new Voltage("Voltage #13", 12, true));
1039 v.Add(new Voltage("Voltage #14", 13, true));
1040 v.Add(new Voltage("Voltage #15", 14, true));
1041 t.Add(new Temperature("CPU Core", 0));
1042 t.Add(new Temperature("Auxiliary", 1));
1043 t.Add(new Temperature("Motherboard", 2));
1044 f.Add(new Fan("Chassis Fan #1", 0));
1045 f.Add(new Fan("CPU Fan", 1));
1046 f.Add(new Fan("Chassis Fan #2", 2));
1047 f.Add(new Fan("Chassis Fan #3", 3));
1048 c.Add(new Ctrl("Chassis Fan #1", 0));
1049 c.Add(new Ctrl("CPU Fan", 1));
1050 c.Add(new Ctrl("Chassis Fan #2", 2));
1051 c.Add(new Ctrl("Chassis Fan #3", 3));
1054 v.Add(new Voltage("CPU VCore", 0));
1055 v.Add(new Voltage("Voltage #2", 1, true));
1056 v.Add(new Voltage("AVCC", 2, 34, 34));
1057 v.Add(new Voltage("3VCC", 3, 34, 34));
1058 v.Add(new Voltage("Voltage #5", 4, true));
1059 v.Add(new Voltage("Voltage #6", 5, true));
1060 v.Add(new Voltage("Voltage #7", 6, true));
1061 v.Add(new Voltage("3VSB", 7, 34, 34));
1062 v.Add(new Voltage("VBAT", 8, 34, 34));
1063 v.Add(new Voltage("VTT", 9));
1064 v.Add(new Voltage("Voltage #11", 10, true));
1065 v.Add(new Voltage("Voltage #12", 11, true));
1066 v.Add(new Voltage("Voltage #13", 12, true));
1067 v.Add(new Voltage("Voltage #14", 13, true));
1068 v.Add(new Voltage("Voltage #15", 14, true));
1069 t.Add(new Temperature("CPU Core", 0));
1070 t.Add(new Temperature("Temperature #1", 1));
1071 t.Add(new Temperature("Temperature #2", 2));
1072 t.Add(new Temperature("Temperature #3", 3));
1073 t.Add(new Temperature("Temperature #4", 4));
1074 t.Add(new Temperature("Temperature #5", 5));
1075 t.Add(new Temperature("Temperature #6", 6));
1076 for (int i = 0; i < superIO.Fans.Length; i++)
1077 f.Add(new Fan("Fan #" + (i + 1), i));
1078 for (int i = 0; i < superIO.Controls.Length; i++)
1079 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1084 v.Add(new Voltage("CPU VCore", 0));
1085 v.Add(new Voltage("Voltage #2", 1, true));
1086 v.Add(new Voltage("AVCC", 2, 34, 34));
1087 v.Add(new Voltage("3VCC", 3, 34, 34));
1088 v.Add(new Voltage("Voltage #5", 4, true));
1089 v.Add(new Voltage("Voltage #6", 5, true));
1090 v.Add(new Voltage("Voltage #7", 6, true));
1091 v.Add(new Voltage("3VSB", 7, 34, 34));
1092 v.Add(new Voltage("VBAT", 8, 34, 34));
1093 v.Add(new Voltage("VTT", 9));
1094 v.Add(new Voltage("Voltage #11", 10, true));
1095 v.Add(new Voltage("Voltage #12", 11, true));
1096 v.Add(new Voltage("Voltage #13", 12, true));
1097 v.Add(new Voltage("Voltage #14", 13, true));
1098 v.Add(new Voltage("Voltage #15", 14, true));
1099 t.Add(new Temperature("CPU Core", 0));
1100 t.Add(new Temperature("Temperature #1", 1));
1101 t.Add(new Temperature("Temperature #2", 2));
1102 t.Add(new Temperature("Temperature #3", 3));
1103 t.Add(new Temperature("Temperature #4", 4));
1104 t.Add(new Temperature("Temperature #5", 5));
1105 t.Add(new Temperature("Temperature #6", 6));
1106 for (int i = 0; i < superIO.Fans.Length; i++)
1107 f.Add(new Fan("Fan #" + (i + 1), i));
1108 for (int i = 0; i < superIO.Controls.Length; i++)
1109 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1114 for (int i = 0; i < superIO.Voltages.Length; i++)
1115 v.Add(new Voltage("Voltage #" + (i + 1), i, true));
1116 for (int i = 0; i < superIO.Temperatures.Length; i++)
1117 t.Add(new Temperature("Temperature #" + (i + 1), i));
1118 for (int i = 0; i < superIO.Fans.Length; i++)
1119 f.Add(new Fan("Fan #" + (i + 1), i));
1120 for (int i = 0; i < superIO.Controls.Length; i++)
1121 c.Add(new Ctrl("Fan Control #" + (i + 1), i));
1125 const string formula = "Voltage = value + (value - Vf) * Ri / Rf.";
1126 foreach (Voltage voltage in v)
1127 if (voltage.Index < superIO.Voltages.Length) {
1128 Sensor sensor = new Sensor(voltage.Name, voltage.Index,
1129 voltage.Hidden, SensorType.Voltage, this, new [] {
1130 new ParameterDescription("Ri [kΩ]", "Input resistance.\n" +
1131 formula, voltage.Ri),
1132 new ParameterDescription("Rf [kΩ]", "Reference resistance.\n" +
1133 formula, voltage.Rf),
1134 new ParameterDescription("Vf [V]", "Reference voltage.\n" +
1135 formula, voltage.Vf)
1137 voltages.Add(sensor);
1140 foreach (Temperature temperature in t)
1141 if (temperature.Index < superIO.Temperatures.Length) {
1142 Sensor sensor = new Sensor(temperature.Name, temperature.Index,
1143 SensorType.Temperature, this, new [] {
1144 new ParameterDescription("Offset [°C]", "Temperature offset.", 0)
1146 temperatures.Add(sensor);
1149 foreach (Fan fan in f)
1150 if (fan.Index < superIO.Fans.Length) {
1151 Sensor sensor = new Sensor(fan.Name, fan.Index, SensorType.Fan,
1156 foreach (Ctrl ctrl in c) {
1157 int index = ctrl.Index;
1158 if (index < superIO.Controls.Length) {
1159 Sensor sensor = new Sensor(ctrl.Name, index, SensorType.Control,
1161 Control control = new Control(sensor, settings, 0, 100);
1162 control.ControlModeChanged += (cc) => {
1163 if (cc.ControlMode == ControlMode.Default) {
1164 superIO.SetControl(index, null);
1166 superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
1169 control.SoftwareControlValueChanged += (cc) => {
1170 if (cc.ControlMode == ControlMode.Software)
1171 superIO.SetControl(index, (byte)(cc.SoftwareValue * 2.55));
1173 if (control.ControlMode == ControlMode.Software)
1174 superIO.SetControl(index, (byte)(control.SoftwareValue * 2.55));
1175 sensor.Control = control;
1176 controls.Add(sensor);
1181 public override HardwareType HardwareType {
1182 get { return HardwareType.SuperIO; }
1185 public override IHardware Parent {
1186 get { return mainboard; }
1190 public override string GetReport() {
1191 return superIO.GetReport();
1194 public override void Update() {
1197 foreach (Sensor sensor in voltages) {
1198 float? value = readVoltage(sensor.Index);
1199 if (value.HasValue) {
1200 sensor.Value = value + (value - sensor.Parameters[2].Value) *
1201 sensor.Parameters[0].Value / sensor.Parameters[1].Value;
1202 ActivateSensor(sensor);
1206 foreach (Sensor sensor in temperatures) {
1207 float? value = readTemperature(sensor.Index);
1208 if (value.HasValue) {
1209 sensor.Value = value + sensor.Parameters[0].Value;
1210 ActivateSensor(sensor);
1214 foreach (Sensor sensor in fans) {
1215 float? value = readFan(sensor.Index);
1216 if (value.HasValue) {
1217 sensor.Value = value;
1218 if (value.Value > 0)
1219 ActivateSensor(sensor);
1223 foreach (Sensor sensor in controls) {
1224 float? value = readControl(sensor.Index);
1225 if (value.HasValue) {
1226 sensor.Value = value;
1227 ActivateSensor(sensor);
1234 public override void Close() {
1235 foreach (Sensor sensor in controls) {
1236 // restore all controls back to default
1237 superIO.SetControl(sensor.Index, null);
1242 private class Voltage {
1243 public readonly string Name;
1244 public readonly int Index;
1245 public readonly float Ri;
1246 public readonly float Rf;
1247 public readonly float Vf;
1248 public readonly bool Hidden;
1250 public Voltage(string name, int index) :
1251 this(name, index, false) { }
1253 public Voltage(string name, int index, bool hidden) :
1254 this(name, index, 0, 1, 0, hidden) { }
1256 public Voltage(string name, int index, float ri, float rf) :
1257 this(name, index, ri, rf, 0, false) { }
1259 // float ri = 0, float rf = 1, float vf = 0, bool hidden = false)
1261 public Voltage(string name, int index,
1262 float ri, float rf, float vf, bool hidden)
1269 this.Hidden = hidden;
1273 private class Temperature {
1274 public readonly string Name;
1275 public readonly int Index;
1277 public Temperature(string name, int index) {
1284 public readonly string Name;
1285 public readonly int Index;
1287 public Fan(string name, int index) {
1293 private class Ctrl {
1294 public readonly string Name;
1295 public readonly int Index;
1297 public Ctrl(string name, int index) {