1.1 --- a/Hardware/Nvidia/NvidiaGPU.cs Sun Dec 28 22:42:36 2014 +0000
1.2 +++ b/Hardware/Nvidia/NvidiaGPU.cs Tue Dec 30 16:02:52 2014 +0000
1.3 @@ -4,7 +4,7 @@
1.4 License, v. 2.0. If a copy of the MPL was not distributed with this
1.5 file, You can obtain one at http://mozilla.org/MPL/2.0/.
1.6
1.7 - Copyright (C) 2009-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
1.8 + Copyright (C) 2009-2014 Michael Möller <mmoeller@openhardwaremonitor.org>
1.9 Copyright (C) 2011 Christian Vallières
1.10
1.11 */
1.12 @@ -28,9 +28,6 @@
1.13 private readonly Sensor memoryLoad;
1.14 private readonly Control fanControl;
1.15
1.16 - private bool restoreDefaultFanSpeedRequired;
1.17 - private NvLevel initialFanSpeedValue;
1.18 -
1.19 public NvidiaGPU(int adapterIndex, NvPhysicalGpuHandle handle,
1.20 NvDisplayHandle? displayHandle, ISettings settings)
1.21 : base(GetName(handle), new Identifier("nvidiagpu",
1.22 @@ -431,7 +428,6 @@
1.23 }
1.24
1.25 private void SoftwareControlValueChanged(IControl control) {
1.26 - SaveDefaultFanSpeed();
1.27 NvGPUCoolerLevels coolerLevels = new NvGPUCoolerLevels();
1.28 coolerLevels.Version = NVAPI.GPU_COOLER_LEVELS_VER;
1.29 coolerLevels.Levels = new NvLevel[NVAPI.MAX_COOLER_PER_GPU];
1.30 @@ -440,34 +436,39 @@
1.31 NVAPI.NvAPI_GPU_SetCoolerLevels(handle, 0, ref coolerLevels);
1.32 }
1.33
1.34 - private void SaveDefaultFanSpeed() {
1.35 - if (!restoreDefaultFanSpeedRequired) {
1.36 - NvGPUCoolerSettings coolerSettings = GetCoolerSettings();
1.37 - if (coolerSettings.Count > 0) {
1.38 - restoreDefaultFanSpeedRequired = true;
1.39 - initialFanSpeedValue.Level = coolerSettings.Cooler[0].CurrentLevel;
1.40 - initialFanSpeedValue.Policy = coolerSettings.Cooler[0].CurrentPolicy;
1.41 - }
1.42 + private void ControlModeChanged(IControl control) {
1.43 + switch (control.ControlMode) {
1.44 + case ControlMode.Undefined:
1.45 + return;
1.46 + case ControlMode.Default:
1.47 + SetDefaultFanSpeed();
1.48 + break;
1.49 + case ControlMode.Software:
1.50 + SoftwareControlValueChanged(control);
1.51 + break;
1.52 + default:
1.53 + return;
1.54 }
1.55 }
1.56
1.57 - private void ControlModeChanged(IControl control) {
1.58 - if (control.ControlMode == ControlMode.Default) {
1.59 - RestoreDefaultFanSpeed();
1.60 - } else {
1.61 - SoftwareControlValueChanged(control);
1.62 - }
1.63 + private void SetDefaultFanSpeed() {
1.64 + NvGPUCoolerLevels coolerLevels = new NvGPUCoolerLevels();
1.65 + coolerLevels.Version = NVAPI.GPU_COOLER_LEVELS_VER;
1.66 + coolerLevels.Levels = new NvLevel[NVAPI.MAX_COOLER_PER_GPU];
1.67 + coolerLevels.Levels[0].Policy = 0x20;
1.68 + NVAPI.NvAPI_GPU_SetCoolerLevels(handle, 0, ref coolerLevels);
1.69 }
1.70
1.71 - private void RestoreDefaultFanSpeed() {
1.72 - if (restoreDefaultFanSpeedRequired) {
1.73 - NvGPUCoolerLevels coolerLevels = new NvGPUCoolerLevels();
1.74 - coolerLevels.Version = NVAPI.GPU_COOLER_LEVELS_VER;
1.75 - coolerLevels.Levels = new NvLevel[NVAPI.MAX_COOLER_PER_GPU];
1.76 - coolerLevels.Levels[0] = initialFanSpeedValue;
1.77 - NVAPI.NvAPI_GPU_SetCoolerLevels(handle, 0, ref coolerLevels);
1.78 - restoreDefaultFanSpeedRequired = false;
1.79 + public override void Close() {
1.80 + if (this.fanControl != null) {
1.81 + this.fanControl.ControlModeChanged -= ControlModeChanged;
1.82 + this.fanControl.SoftwareControlValueChanged -=
1.83 + SoftwareControlValueChanged;
1.84 +
1.85 + if (this.fanControl.ControlMode != ControlMode.Undefined)
1.86 + SetDefaultFanSpeed();
1.87 }
1.88 + base.Close();
1.89 }
1.90 }
1.91 }