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>
11 using System.Collections.Generic;
12 using System.Globalization;
16 namespace OpenHardwareMonitor.Hardware.LPC {
18 internal class LMSensors {
20 private readonly List<LMChip> lmChips = new List<LMChip>();
23 string[] basePaths = Directory.GetDirectories("/sys/class/hwmon/");
24 foreach (string basePath in basePaths) {
25 foreach (string devicePath in new[] { "/device", "" }) {
26 string path = basePath + devicePath;
30 using (StreamReader reader = new StreamReader(path + "/name"))
31 name = reader.ReadLine();
32 } catch (IOException) { }
36 lmChips.Add(new LMChip(Chip.ATK0110, path)); break;
39 lmChips.Add(new LMChip(Chip.F71858, path)); break;
41 lmChips.Add(new LMChip(Chip.F71862, path)); break;
43 lmChips.Add(new LMChip(Chip.F71869, path)); break;
45 lmChips.Add(new LMChip(Chip.F71882, path)); break;
47 lmChips.Add(new LMChip(Chip.F71889AD, path)); break;
49 lmChips.Add(new LMChip(Chip.F71889ED, path)); break;
51 lmChips.Add(new LMChip(Chip.F71889F, path)); break;
53 lmChips.Add(new LMChip(Chip.F71808E, path)); break;
56 lmChips.Add(new LMChip(Chip.IT8705F, path)); break;
58 lmChips.Add(new LMChip(Chip.IT8712F, path)); break;
60 lmChips.Add(new LMChip(Chip.IT8716F, path)); break;
62 lmChips.Add(new LMChip(Chip.IT8718F, path)); break;
64 lmChips.Add(new LMChip(Chip.IT8720F, path)); break;
67 lmChips.Add(new LMChip(Chip.W83627EHF, path)); break;
69 lmChips.Add(new LMChip(Chip.W83627DHG, path)); break;
71 lmChips.Add(new LMChip(Chip.W83667HG, path)); break;
73 lmChips.Add(new LMChip(Chip.W83627HF, path)); break;
75 lmChips.Add(new LMChip(Chip.W83627THF, path)); break;
77 lmChips.Add(new LMChip(Chip.W83687THF, path)); break;
84 foreach (LMChip lmChip in lmChips)
88 public ISuperIO[] SuperIO {
90 return lmChips.ToArray();
94 private class LMChip : ISuperIO {
97 private readonly Chip chip;
99 private readonly float?[] voltages;
100 private readonly float?[] temperatures;
101 private readonly float?[] fans;
102 private readonly float?[] controls;
104 private readonly FileStream[] voltageStreams;
105 private readonly FileStream[] temperatureStreams;
106 private readonly FileStream[] fanStreams;
108 public Chip Chip { get { return chip; } }
109 public float?[] Voltages { get { return voltages; } }
110 public float?[] Temperatures { get { return temperatures; } }
111 public float?[] Fans { get { return fans; } }
112 public float?[] Controls { get { return controls; } }
114 public LMChip(Chip chip, string path) {
118 string[] voltagePaths = Directory.GetFiles(path, "in*_input");
119 this.voltages = new float?[voltagePaths.Length];
120 this.voltageStreams = new FileStream[voltagePaths.Length];
121 for (int i = 0; i < voltagePaths.Length; i++)
122 voltageStreams[i] = new FileStream(voltagePaths[i],
123 FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
125 string[] temperaturePaths = Directory.GetFiles(path, "temp*_input");
126 this.temperatures = new float?[temperaturePaths.Length];
127 this.temperatureStreams = new FileStream[temperaturePaths.Length];
128 for (int i = 0; i < temperaturePaths.Length; i++)
129 temperatureStreams[i] = new FileStream(temperaturePaths[i],
130 FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
132 string[] fanPaths = Directory.GetFiles(path, "fan*_input");
133 this.fans = new float?[fanPaths.Length];
134 this.fanStreams = new FileStream[fanPaths.Length];
135 for (int i = 0; i < fanPaths.Length; i++)
136 fanStreams[i] = new FileStream(fanPaths[i],
137 FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
139 this.controls = new float?[0];
142 public byte? ReadGPIO(int index) {
146 public void WriteGPIO(int index, byte value) { }
148 public string GetReport() {
152 public void SetControl(int index, byte? value) { }
154 private string ReadFirstLine(Stream stream) {
155 StringBuilder sb = new StringBuilder();
157 stream.Seek(0, SeekOrigin.Begin);
158 int b = stream.ReadByte();
159 while (b != -1 && b != 10) {
161 b = stream.ReadByte();
164 return sb.ToString();
167 public void Update() {
168 for (int i = 0; i < voltages.Length; i++) {
169 string s = ReadFirstLine(voltageStreams[i]);
171 voltages[i] = 0.001f *
172 long.Parse(s, CultureInfo.InvariantCulture);
178 for (int i = 0; i < temperatures.Length; i++) {
179 string s = ReadFirstLine(temperatureStreams[i]);
181 temperatures[i] = 0.001f *
182 long.Parse(s, CultureInfo.InvariantCulture);
184 temperatures[i] = null;
188 for (int i = 0; i < fans.Length; i++) {
189 string s = ReadFirstLine(fanStreams[i]);
191 fans[i] = long.Parse(s, CultureInfo.InvariantCulture);
198 public void Close() {
199 foreach (FileStream stream in voltageStreams)
201 foreach (FileStream stream in temperatureStreams)
203 foreach (FileStream stream in fanStreams)