Merge branch 'master' into pr/21

This commit is contained in:
Phyxion
2018-01-27 13:40:33 +01:00
committed by GitHub
21 changed files with 209 additions and 56 deletions
+22
View File
@@ -310,6 +310,28 @@ namespace OxyPlot
this.Subtitle = subtitle;
}
public PlotModel(double dpiXscale, double dpiYscale)
: this()
{
this.PlotMargins = new OxyThickness(this.PlotMargins.Left * dpiXscale,
this.PlotMargins.Top * dpiYscale,
this.PlotMargins.Right * dpiXscale,
this.PlotMargins.Bottom * dpiYscale
);
this.Padding = new OxyThickness(this.Padding.Left * dpiXscale,
this.Padding.Top * dpiYscale,
this.Padding.Right * dpiXscale,
this.Padding.Bottom * dpiYscale
);
this.TitlePadding *= dpiXscale;
this.LegendSymbolLength *= dpiXscale;
this.LegendSymbolMargin *= dpiXscale;
this.LegendPadding *= dpiXscale;
this.LegendColumnSpacing *= dpiXscale;
this.LegendItemSpacing *= dpiXscale;
this.LegendMargin *= dpiXscale;
}
/// <summary>
/// The synchronization root object.
/// </summary>
+30 -1
View File
@@ -35,11 +35,16 @@ namespace OpenHardwareMonitor.GUI {
private UserOption stackedAxes;
private DateTime now;
private float dpiX;
private float dpiY;
private double dpiXscale = 1;
private double dpiYscale = 1;
public PlotPanel(PersistentSettings settings, UnitManager unitManager) {
this.settings = settings;
this.unitManager = unitManager;
this.SetDPI();
this.model = CreatePlotModel();
this.plot = new Plot();
@@ -168,7 +173,7 @@ namespace OpenHardwareMonitor.GUI {
axes.Add(type, axis);
}
var model = new PlotModel();
var model = new PlotModel(this.dpiXscale, this.dpiYscale);
model.Axes.Add(timeAxis);
foreach (var axis in axes.Values)
model.Axes.Add(axis);
@@ -178,6 +183,30 @@ namespace OpenHardwareMonitor.GUI {
return model;
}
private void SetDPI() {
// https://msdn.microsoft.com/en-us/library/windows/desktop/dn469266(v=vs.85).aspx
const int _default_dpi = 96;
Graphics g = this.CreateGraphics();
try
{
this.dpiX = g.DpiX;
this.dpiY = g.DpiY;
}
finally
{
g.Dispose();
}
if (dpiX > 0)
{
this.dpiXscale = dpiX / _default_dpi;
}
if (dpiY > 0)
{
this.dpiYscale = dpiY / _default_dpi;
}
}
public void SetSensors(List<ISensor> sensors,
IDictionary<ISensor, Color> colors) {
this.model.Series.Clear();
+2 -3
View File
@@ -12,14 +12,13 @@ using System;
using System.Text;
namespace OpenHardwareMonitor.Hardware.CPU {
internal enum Vendor {
public enum Vendor {
Unknown,
Intel,
AMD,
}
internal class CPUID {
public class CPUID {
private readonly int thread;
+1 -1
View File
@@ -17,7 +17,7 @@ using System.Text;
using System.Threading;
namespace OpenHardwareMonitor.Hardware.CPU {
internal class GenericCPU : Hardware {
public class GenericCPU : Hardware {
protected readonly CPUID[][] cpuid;
+10 -3
View File
@@ -29,7 +29,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
Skylake,
Airmont,
KabyLake,
ApolloLake
ApolloLake,
CoffeeLake
}
private readonly Sensor[] coreTemperatures;
@@ -187,6 +188,10 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case 0x5C: // Intel ApolloLake
microarchitecture = Microarchitecture.ApolloLake;
tjMax = GetTjMaxFromMSR();
break;
case 0xAE: // Intel Core i5, i7 8xxxx (14nm++)
microarchitecture = Microarchitecture.CoffeeLake;
tjMax = GetTjMaxFromMSR();
break;
default:
microarchitecture = Microarchitecture.Unknown;
@@ -237,7 +242,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case Microarchitecture.Skylake:
case Microarchitecture.Airmont:
case Microarchitecture.ApolloLake:
case Microarchitecture.KabyLake: {
case Microarchitecture.KabyLake:
case Microarchitecture.CoffeeLake: {
uint eax, edx;
if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) {
timeStampCounterMultiplier = (eax >> 8) & 0xff;
@@ -421,7 +427,8 @@ namespace OpenHardwareMonitor.Hardware.CPU {
case Microarchitecture.Silvermont:
case Microarchitecture.Skylake:
case Microarchitecture.ApolloLake:
case Microarchitecture.KabyLake: {
case Microarchitecture.KabyLake:
case Microarchitecture.CoffeeLake: {
uint multiplier = (eax >> 8) & 0xff;
coreClocks[i].Value = (float)(multiplier * newBusClock);
} break;
+1 -1
View File
@@ -18,7 +18,7 @@ using System.Text;
using OpenHardwareMonitor.Collections;
namespace OpenHardwareMonitor.Hardware.HDD {
internal abstract class AbstractHarddrive : Hardware {
public abstract class AbstractHarddrive : Hardware {
private const int UPDATE_DIVIDER = 30; // update only every 30s
+1 -1
View File
@@ -15,7 +15,7 @@ using System.Runtime.InteropServices;
namespace OpenHardwareMonitor.Hardware.HDD {
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct DriveAttributeValue {
public struct DriveAttributeValue {
public byte Identifier;
public short StatusFlags;
public byte AttrValue;
+1 -1
View File
@@ -14,7 +14,7 @@ using System.Runtime.InteropServices;
namespace OpenHardwareMonitor.Hardware.HDD {
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct DriveThresholdValue {
public struct DriveThresholdValue {
public byte Identifier;
public byte Threshold;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
+1 -2
View File
@@ -13,8 +13,7 @@ using System.Collections.Generic;
namespace OpenHardwareMonitor.Hardware.HDD {
internal interface ISmart {
public interface ISmart {
IntPtr OpenDrive(int driveNumber);
+1 -1
View File
@@ -14,7 +14,7 @@ using System.Collections.Generic;
using OpenHardwareMonitor.Collections;
namespace OpenHardwareMonitor.Hardware.HDD {
internal class SmartAttribute {
public class SmartAttribute {
private RawValueConversion rawValueConversion;
+1 -1
View File
@@ -13,7 +13,7 @@ namespace OpenHardwareMonitor.Hardware.HDD {
/// <summary>
/// Localization class for SMART attribute names.
/// </summary>
internal static class SmartNames {
public static class SmartNames {
public static string AirflowTemperature {
get { return "Airflow Temperature"; }
+1 -1
View File
@@ -12,7 +12,7 @@ using System;
using OpenHardwareMonitor.Collections;
namespace OpenHardwareMonitor.Hardware {
internal abstract class Hardware : IHardware {
public abstract class Hardware : IHardware {
private readonly Identifier identifier;
protected readonly string name;
+2
View File
@@ -19,6 +19,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
F71862 = 0x0601,
F71869 = 0x0814,
F71869A = 0x1007,
F71878AD = 0x1106,
F71882 = 0x0541,
F71889AD = 0x1005,
F71889ED = 0x0909,
@@ -70,6 +71,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
case Chip.F71858: return "Fintek F71858";
case Chip.F71862: return "Fintek F71862";
case Chip.F71869: return "Fintek F71869";
case Chip.F71878AD: return "Fintek F71878AD";
case Chip.F71869A: return "Fintek F71869A";
case Chip.F71882: return "Fintek F71882";
case Chip.F71889AD: return "Fintek F71889AD";
+18 -3
View File
@@ -26,18 +26,27 @@ namespace OpenHardwareMonitor.Hardware.LPC {
private const byte ADDRESS_REGISTER_OFFSET = 0x05;
private const byte DATA_REGISTER_OFFSET = 0x06;
private const byte PWM_VALUES_OFFSET = 0x2D;
// Hardware Monitor Registers
private const byte VOLTAGE_BASE_REG = 0x20;
private const byte TEMPERATURE_CONFIG_REG = 0x69;
private const byte TEMPERATURE_BASE_REG = 0x70;
private readonly byte[] FAN_TACHOMETER_REG =
new byte[] { 0xA0, 0xB0, 0xC0, 0xD0 };
private readonly byte[] FAN_PWM_REG =
new byte[] { 0xA3, 0xB3, 0xC3, 0xD3 };
private byte ReadByte(byte register) {
Ring0.WriteIoPort(
(ushort)(address + ADDRESS_REGISTER_OFFSET), register);
return Ring0.ReadIoPort((ushort)(address + DATA_REGISTER_OFFSET));
}
private void WriteByte(byte register, byte value) {
Ring0.WriteIoPort(
(ushort)(address + ADDRESS_REGISTER_OFFSET), register);
Ring0.WriteIoPort((ushort)(address + DATA_REGISTER_OFFSET), value);
}
public byte? ReadGPIO(int index) {
return null;
@@ -45,7 +54,10 @@ namespace OpenHardwareMonitor.Hardware.LPC {
public void WriteGPIO(int index, byte value) { }
public void SetControl(int index, byte? value) { }
public void SetControl(int index, byte? value) {
if(index < controls.Length)
WriteByte(FAN_PWM_REG[index], value ?? 128);
}
public F718XX(Chip chip, ushort address) {
this.address = address;
@@ -54,7 +66,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
voltages = new float?[chip == Chip.F71858 ? 3 : 9];
temperatures = new float?[chip == Chip.F71808E ? 2 : 3];
fans = new float?[chip == Chip.F71882 || chip == Chip.F71858 ? 4 : 3];
controls = new float?[0];
controls = new float?[chip == Chip.F71878AD ? 3 : 0];
}
public Chip Chip { get { return chip; } }
@@ -145,7 +157,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
} break;
}
}
for (int i = 0; i < fans.Length; i++) {
int value = ReadByte(FAN_TACHOMETER_REG[i]) << 8;
value |= ReadByte((byte)(FAN_TACHOMETER_REG[i] + 1));
@@ -155,6 +167,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
else
fans[i] = null;
}
for (int i = 0; i < controls.Length; i++) {
controls[i] = (100*ReadByte((byte)(PWM_VALUES_OFFSET + i)))/256.0f;
}
Ring0.ReleaseIsaBusMutex();
}
+3 -1
View File
@@ -46,7 +46,9 @@ namespace OpenHardwareMonitor.Hardware.LPC {
case "f71882fg":
lmChips.Add(new LMChip(Chip.F71882, path)); break;
case "f71889a":
lmChips.Add(new LMChip(Chip.F71889AD, path)); break;
lmChips.Add(new LMChip(Chip.F71889AD, path)); break;
case "f71878ad":
lmChips.Add(new LMChip(Chip.F71878AD, path)); break;
case "f71889ed":
lmChips.Add(new LMChip(Chip.F71889ED, path)); break;
case "f71889fg":
+8
View File
@@ -115,6 +115,13 @@ namespace OpenHardwareMonitor.Hardware.LPC {
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
break;
} break;
case 0x11:
switch (revision) {
case 0x06:
chip = Chip.F71878AD;
logicalDeviceNumber = FINTEK_HARDWARE_MONITOR_LDN;
break;
} break;
case 0x52:
switch (revision) {
case 0x17:
@@ -306,6 +313,7 @@ namespace OpenHardwareMonitor.Hardware.LPC {
case Chip.F71858:
case Chip.F71862:
case Chip.F71869:
case Chip.F71878AD:
case Chip.F71869A:
case Chip.F71882:
case Chip.F71889AD:
+2
View File
@@ -181,6 +181,8 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
return Model.X38_DS5;
case "X58A-UD3R":
return Model.X58A_UD3R;
case "Z270 PC MATE":
return Model.Z270_PC_MATE;
case "X79-UD3":
return Model.X79_UD3;
case "Z68A-D3H-B3":
+4 -1
View File
@@ -40,6 +40,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
// ECS
A890GXM_A,
// MSI
Z270_PC_MATE,
// EVGA
X58_SLI_Classified,
@@ -87,6 +90,6 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
FH67,
// Unknown
Unknown
Unknown
}
}
+98 -32
View File
@@ -214,7 +214,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
case Chip.F71889ED:
case Chip.F71889F:
case Chip.F71808E:
GetFintekConfiguration(superIO, manufacturer, model, v, t, f);
GetFintekConfiguration(superIO, manufacturer, model, v, t, f, c);
break;
case Chip.W83627EHF:
@@ -969,7 +969,7 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
private static void GetFintekConfiguration(ISuperIO superIO,
Manufacturer manufacturer, Model model,
IList<Voltage> v, IList<Temperature> t, IList<Fan> f)
IList<Voltage> v, IList<Temperature> t, IList<Fan> f, IList<Ctrl> c)
{
switch (manufacturer) {
case Manufacturer.EVGA:
@@ -1023,6 +1023,9 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
t.Add(new Temperature("Temperature #" + (i + 1), i));
for (int i = 0; i < superIO.Fans.Length; i++)
f.Add(new Fan("Fan #" + (i + 1), i));
for (int i = 0; i < superIO.Controls.Length; i++)
c.Add(new Ctrl("Fan Control #" + (i + 1), i));
break;
}
}
@@ -1182,6 +1185,99 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
c.Add(new Ctrl("Chassis Fan #2", 2));
c.Add(new Ctrl("Chassis Fan #3", 3));
break;
default:
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("Voltage #2", 1, true));
v.Add(new Voltage("AVCC", 2, 34, 34));
v.Add(new Voltage("3VCC", 3, 34, 34));
v.Add(new Voltage("Voltage #5", 4, true));
v.Add(new Voltage("Voltage #6", 5, true));
v.Add(new Voltage("Voltage #7", 6, true));
v.Add(new Voltage("3VSB", 7, 34, 34));
v.Add(new Voltage("VBAT", 8, 34, 34));
v.Add(new Voltage("VTT", 9));
v.Add(new Voltage("Voltage #11", 10, true));
v.Add(new Voltage("Voltage #12", 11, true));
v.Add(new Voltage("Voltage #13", 12, true));
v.Add(new Voltage("Voltage #14", 13, true));
v.Add(new Voltage("Voltage #15", 14, true));
t.Add(new Temperature("CPU Core", 0));
t.Add(new Temperature("Temperature #1", 1));
t.Add(new Temperature("Temperature #2", 2));
t.Add(new Temperature("Temperature #3", 3));
t.Add(new Temperature("Temperature #4", 4));
t.Add(new Temperature("Temperature #5", 5));
t.Add(new Temperature("Temperature #6", 6));
for (int i = 0; i < superIO.Fans.Length; i++)
f.Add(new Fan("Fan #" + (i + 1), i));
for (int i = 0; i < superIO.Controls.Length; i++)
c.Add(new Ctrl("Fan Control #" + (i + 1), i));
break;
}
break;
case Manufacturer.MSI:
switch (model) {
case Model.Z270_PC_MATE: // NCT6795D
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("+5V", 1, 4, 1));
v.Add(new Voltage("AVCC", 2, 34, 34));
v.Add(new Voltage("3VCC", 3, 34, 34));
v.Add(new Voltage("+12V", 4, 11, 1));
v.Add(new Voltage("Voltage #6", 5, true));
v.Add(new Voltage("CPU I/O", 6));
v.Add(new Voltage("3VSB", 7, 34, 34));
v.Add(new Voltage("VTT", 9));
v.Add(new Voltage("CPU SA", 10));
v.Add(new Voltage("Voltage #12", 11, true));
v.Add(new Voltage("PCH", 12));
v.Add(new Voltage("DRAM", 13, 1, 1));
v.Add(new Voltage("Voltage #15", 14, true));
t.Add(new Temperature("CPU", 0));
t.Add(new Temperature("Auxiliary", 1));
t.Add(new Temperature("Motherboard", 2));
f.Add(new Fan("Pump Fan", 0));
f.Add(new Fan("CPU Fan", 1));
f.Add(new Fan("System Fan #1", 2));
f.Add(new Fan("System Fan #2", 3));
f.Add(new Fan("System Fan #3", 4));
f.Add(new Fan("System Fan #4", 5));
c.Add(new Ctrl("Pump Fan", 0));
c.Add(new Ctrl("CPU Fan", 1));
c.Add(new Ctrl("System Fan #1", 2));
c.Add(new Ctrl("System Fan #2", 3));
c.Add(new Ctrl("System Fan #3", 4));
c.Add(new Ctrl("System Fan #4", 5));
break;
default:
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("Voltage #2", 1, true));
v.Add(new Voltage("AVCC", 2, 34, 34));
v.Add(new Voltage("3VCC", 3, 34, 34));
v.Add(new Voltage("Voltage #5", 4, true));
v.Add(new Voltage("Voltage #6", 5, true));
v.Add(new Voltage("Voltage #7", 6, true));
v.Add(new Voltage("3VSB", 7, 34, 34));
v.Add(new Voltage("VBAT", 8, 34, 34));
v.Add(new Voltage("VTT", 9));
v.Add(new Voltage("Voltage #11", 10, true));
v.Add(new Voltage("Voltage #12", 11, true));
v.Add(new Voltage("Voltage #13", 12, true));
v.Add(new Voltage("Voltage #14", 13, true));
v.Add(new Voltage("Voltage #15", 14, true));
t.Add(new Temperature("CPU Core", 0));
t.Add(new Temperature("Temperature #1", 1));
t.Add(new Temperature("Temperature #2", 2));
t.Add(new Temperature("Temperature #3", 3));
t.Add(new Temperature("Temperature #4", 4));
t.Add(new Temperature("Temperature #5", 5));
t.Add(new Temperature("Temperature #6", 6));
for (int i = 0; i < superIO.Fans.Length; i++)
f.Add(new Fan("Fan #" + (i + 1), i));
for (int i = 0; i < superIO.Controls.Length; i++)
c.Add(new Ctrl("Fan Control #" + (i + 1), i));
break;
}
break;
default:
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("Voltage #2", 1, true));
@@ -1210,36 +1306,6 @@ namespace OpenHardwareMonitor.Hardware.Mainboard {
for (int i = 0; i < superIO.Controls.Length; i++)
c.Add(new Ctrl("Fan Control #" + (i + 1), i));
break;
}
break;
default:
v.Add(new Voltage("CPU VCore", 0));
v.Add(new Voltage("Voltage #2", 1, true));
v.Add(new Voltage("AVCC", 2, 34, 34));
v.Add(new Voltage("3VCC", 3, 34, 34));
v.Add(new Voltage("Voltage #5", 4, true));
v.Add(new Voltage("Voltage #6", 5, true));
v.Add(new Voltage("Voltage #7", 6, true));
v.Add(new Voltage("3VSB", 7, 34, 34));
v.Add(new Voltage("VBAT", 8, 34, 34));
v.Add(new Voltage("VTT", 9));
v.Add(new Voltage("Voltage #11", 10, true));
v.Add(new Voltage("Voltage #12", 11, true));
v.Add(new Voltage("Voltage #13", 12, true));
v.Add(new Voltage("Voltage #14", 13, true));
v.Add(new Voltage("Voltage #15", 14, true));
t.Add(new Temperature("CPU Core", 0));
t.Add(new Temperature("Temperature #1", 1));
t.Add(new Temperature("Temperature #2", 2));
t.Add(new Temperature("Temperature #3", 3));
t.Add(new Temperature("Temperature #4", 4));
t.Add(new Temperature("Temperature #5", 5));
t.Add(new Temperature("Temperature #6", 6));
for (int i = 0; i < superIO.Fans.Length; i++)
f.Add(new Fan("Fan #" + (i + 1), i));
for (int i = 0; i < superIO.Controls.Length; i++)
c.Add(new Ctrl("Fan Control #" + (i + 1), i));
break;
}
}
+1 -2
View File
@@ -12,8 +12,7 @@ using System;
using System.Globalization;
namespace OpenHardwareMonitor.Hardware {
internal struct ParameterDescription {
public struct ParameterDescription {
private readonly string name;
private readonly string description;
private readonly float defaultValue;
+1 -1
View File
@@ -16,7 +16,7 @@ using System.Text;
namespace OpenHardwareMonitor.Hardware {
internal class SMBIOS {
public class SMBIOS {
private readonly byte[] raw;
private readonly Structure[] table;