Improved the code used to draw a line between the different OxyPlot subplots.
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-2013 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.F71869A, path)); break;
47 lmChips.Add(new LMChip(Chip.F71882, path)); break;
49 lmChips.Add(new LMChip(Chip.F71889AD, path)); break;
51 lmChips.Add(new LMChip(Chip.F71889ED, path)); break;
53 lmChips.Add(new LMChip(Chip.F71889F, path)); break;
55 lmChips.Add(new LMChip(Chip.F71808E, path)); break;
58 lmChips.Add(new LMChip(Chip.IT8705F, path)); break;
60 lmChips.Add(new LMChip(Chip.IT8712F, path)); break;
62 lmChips.Add(new LMChip(Chip.IT8716F, path)); break;
64 lmChips.Add(new LMChip(Chip.IT8718F, path)); break;
66 lmChips.Add(new LMChip(Chip.IT8720F, path)); break;
69 lmChips.Add(new LMChip(Chip.NCT6771F, path)); break;
71 lmChips.Add(new LMChip(Chip.NCT6776F, path)); break;
74 lmChips.Add(new LMChip(Chip.W83627EHF, path)); break;
76 lmChips.Add(new LMChip(Chip.W83627DHG, path)); break;
78 lmChips.Add(new LMChip(Chip.W83667HG, path)); break;
80 lmChips.Add(new LMChip(Chip.W83627HF, path)); break;
82 lmChips.Add(new LMChip(Chip.W83627THF, path)); break;
84 lmChips.Add(new LMChip(Chip.W83687THF, path)); break;
91 foreach (LMChip lmChip in lmChips)
95 public ISuperIO[] SuperIO {
97 return lmChips.ToArray();
101 private class LMChip : ISuperIO {
104 private readonly Chip chip;
106 private readonly float?[] voltages;
107 private readonly float?[] temperatures;
108 private readonly float?[] fans;
109 private readonly float?[] controls;
111 private readonly FileStream[] voltageStreams;
112 private readonly FileStream[] temperatureStreams;
113 private readonly FileStream[] fanStreams;
115 public Chip Chip { get { return chip; } }
116 public float?[] Voltages { get { return voltages; } }
117 public float?[] Temperatures { get { return temperatures; } }
118 public float?[] Fans { get { return fans; } }
119 public float?[] Controls { get { return controls; } }
121 public LMChip(Chip chip, string path) {
125 string[] voltagePaths = Directory.GetFiles(path, "in*_input");
126 this.voltages = new float?[voltagePaths.Length];
127 this.voltageStreams = new FileStream[voltagePaths.Length];
128 for (int i = 0; i < voltagePaths.Length; i++)
129 voltageStreams[i] = new FileStream(voltagePaths[i],
130 FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
132 string[] temperaturePaths = Directory.GetFiles(path, "temp*_input");
133 this.temperatures = new float?[temperaturePaths.Length];
134 this.temperatureStreams = new FileStream[temperaturePaths.Length];
135 for (int i = 0; i < temperaturePaths.Length; i++)
136 temperatureStreams[i] = new FileStream(temperaturePaths[i],
137 FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
139 string[] fanPaths = Directory.GetFiles(path, "fan*_input");
140 this.fans = new float?[fanPaths.Length];
141 this.fanStreams = new FileStream[fanPaths.Length];
142 for (int i = 0; i < fanPaths.Length; i++)
143 fanStreams[i] = new FileStream(fanPaths[i],
144 FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
146 this.controls = new float?[0];
149 public byte? ReadGPIO(int index) {
153 public void WriteGPIO(int index, byte value) { }
155 public string GetReport() {
159 public void SetControl(int index, byte? value) { }
161 private string ReadFirstLine(Stream stream) {
162 StringBuilder sb = new StringBuilder();
164 stream.Seek(0, SeekOrigin.Begin);
165 int b = stream.ReadByte();
166 while (b != -1 && b != 10) {
168 b = stream.ReadByte();
171 return sb.ToString();
174 public void Update() {
175 for (int i = 0; i < voltages.Length; i++) {
176 string s = ReadFirstLine(voltageStreams[i]);
178 voltages[i] = 0.001f *
179 long.Parse(s, CultureInfo.InvariantCulture);
185 for (int i = 0; i < temperatures.Length; i++) {
186 string s = ReadFirstLine(temperatureStreams[i]);
188 temperatures[i] = 0.001f *
189 long.Parse(s, CultureInfo.InvariantCulture);
191 temperatures[i] = null;
195 for (int i = 0; i < fans.Length; i++) {
196 string s = ReadFirstLine(fanStreams[i]);
198 fans[i] = long.Parse(s, CultureInfo.InvariantCulture);
205 public void Close() {
206 foreach (FileStream stream in voltageStreams)
208 foreach (FileStream stream in temperatureStreams)
210 foreach (FileStream stream in fanStreams)