diff --git a/Gpu/NvidiaGpuTemperatureProvider.cs b/Gpu/NvidiaGpuTemperatureProvider.cs index 07106a09..91e3ff7d 100644 --- a/Gpu/NvidiaGpuTemperatureProvider.cs +++ b/Gpu/NvidiaGpuTemperatureProvider.cs @@ -37,7 +37,7 @@ public class NvidiaGpuTemperatureProvider : IGpuTemperatureProvider { return PhysicalGPU .GetPhysicalGPUs() .FirstOrDefault(gpu => gpu.SystemType == SystemType.Laptop); - } catch (NVIDIAApiException) { + } catch { return null; } } diff --git a/HardwareMonitor.cs b/HardwareMonitor.cs new file mode 100644 index 00000000..4c8f25c8 --- /dev/null +++ b/HardwareMonitor.cs @@ -0,0 +1,63 @@ +using System.Diagnostics; +using GHelper.Gpu; + +public class HardwareMonitor +{ + private static IGpuTemperatureProvider? GpuTemperatureProvider; + + public static float? cpuTemp = -1; + public static float? batteryDischarge = -1; + public static int? gpuTemp = null; + + public static void ReadSensors() + { + cpuTemp = -1; + batteryDischarge = -1; + + try + { + var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true); + cpuTemp = ct.NextValue() - 273; + ct.Dispose(); + + var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true); + batteryDischarge = cb.NextValue() / 1000; + cb.Dispose(); + + gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature(); + } + catch + { + Logger.WriteLine("Failed reading sensors"); + } + } + + public static void RecreateGpuTemperatureProvider() { + try { + if (GpuTemperatureProvider != null) { + GpuTemperatureProvider.Dispose(); + } + + // Detect valid GPU temperature provider. + // We start with NVIDIA because there's always at least an integrated AMD GPU + IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider(); + if (gpuTemperatureProvider.IsValid) { + GpuTemperatureProvider = gpuTemperatureProvider; + return; + } + + gpuTemperatureProvider.Dispose(); + gpuTemperatureProvider = new AmdGpuTemperatureProvider(); + if (gpuTemperatureProvider.IsValid) { + GpuTemperatureProvider = gpuTemperatureProvider; + return; + } + + gpuTemperatureProvider.Dispose(); + + GpuTemperatureProvider = null; + } finally { + Debug.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}"); + } + } +} diff --git a/NativeMethods.cs b/NativeMethods.cs index b7af3aad..8553f3d8 100644 --- a/NativeMethods.cs +++ b/NativeMethods.cs @@ -550,7 +550,7 @@ public class NativeMethods displayNum = count; } count++; - Debug.WriteLine(device.outputTechnology); + //Debug.WriteLine(device.outputTechnology); //Debug.WriteLine(device.monitorFriendlyDeviceName); } @@ -569,7 +569,7 @@ public class NativeMethods { laptopScreen = screen.DeviceName; } - Debug.WriteLine(screen.DeviceName); + //Debug.WriteLine(screen.DeviceName); count++; } } diff --git a/Program.cs b/Program.cs index fa41aef7..1a10dc4e 100644 --- a/Program.cs +++ b/Program.cs @@ -4,68 +4,6 @@ using System.Management; using System.Reflection; using System.Runtime.InteropServices; using System.Text.Json; -using GHelper.Gpu; - -public class HardwareMonitor -{ - private static IGpuTemperatureProvider? GpuTemperatureProvider; - - public static float? cpuTemp = -1; - public static float? batteryDischarge = -1; - public static int? gpuTemp = null; - - public static void ReadSensors() - { - cpuTemp = -1; - batteryDischarge = -1; - - try - { - var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true); - cpuTemp = ct.NextValue() - 273; - ct.Dispose(); - - var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true); - batteryDischarge = cb.NextValue() / 1000; - cb.Dispose(); - - gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature(); - } - catch - { - Logger.WriteLine("Failed reading sensors"); - } - } - - public static void RecreateGpuTemperatureProvider() { - try { - if (GpuTemperatureProvider != null) { - GpuTemperatureProvider.Dispose(); - } - - // Detect valid GPU temperature provider. - // We start with NVIDIA because there's always at least an integrated AMD GPU - IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider(); - if (gpuTemperatureProvider.IsValid) { - GpuTemperatureProvider = gpuTemperatureProvider; - return; - } - - gpuTemperatureProvider.Dispose(); - gpuTemperatureProvider = new AmdGpuTemperatureProvider(); - if (gpuTemperatureProvider.IsValid) { - GpuTemperatureProvider = gpuTemperatureProvider; - return; - } - - gpuTemperatureProvider.Dispose(); - - GpuTemperatureProvider = null; - } finally { - Debug.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}"); - } - } -} public static class Logger { public static void WriteLine(string logMessage)