Improved the saving and restoring of default fan control settings for ATI GPUs.

This commit is contained in:
Michael Möller
2011-01-20 21:48:26 +00:00
parent 86dbc6f06b
commit 60c28cc250
2 changed files with 26 additions and 16 deletions

View File

@@ -462,6 +462,7 @@ namespace OpenHardwareMonitor.GUI {
sensorContextMenu.MenuItems.Add(item);
}
if (node.Sensor.Control != null) {
sensorContextMenu.MenuItems.Add(new MenuItem("-"));
IControl control = node.Sensor.Control;
MenuItem controlItem = new MenuItem("Control");
MenuItem defaultItem = new MenuItem("Default");

View File

@@ -54,6 +54,7 @@ namespace OpenHardwareMonitor.Hardware.ATI {
private readonly Sensor controlSensor;
private readonly Control fanControl;
private bool restoreDefaultFanSpeedRequired = false;
private ADLFanSpeedValue initialFanSpeedValue;
public ATIGPU(string name, int adapterIndex, int busNumber,
@@ -64,12 +65,6 @@ namespace OpenHardwareMonitor.Hardware.ATI {
this.busNumber = busNumber;
this.deviceNumber = deviceNumber;
this.initialFanSpeedValue = new ADLFanSpeedValue();
this.initialFanSpeedValue.SpeedType =
ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0,
ref this.initialFanSpeedValue);
this.temperature = new Sensor("GPU Core", 0, SensorType.Temperature, this, settings);
this.fan = new Sensor("GPU Fan", 0, SensorType.Fan, this, settings);
this.coreClock = new Sensor("GPU Core", 0, SensorType.Clock, this, settings);
@@ -96,8 +91,28 @@ namespace OpenHardwareMonitor.Hardware.ATI {
Update();
}
private void SaveDefaultFanSpeed() {
if (!restoreDefaultFanSpeedRequired) {
initialFanSpeedValue = new ADLFanSpeedValue();
initialFanSpeedValue.SpeedType =
ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
restoreDefaultFanSpeedRequired =
ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0,
ref initialFanSpeedValue) == ADL.ADL_OK;
}
}
private void RestoreDefaultFanSpeed() {
if (restoreDefaultFanSpeedRequired) {
ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
ref this.initialFanSpeedValue);
restoreDefaultFanSpeedRequired = false;
}
}
private void SoftwareControlValueChanged(IControl control) {
if (control.ControlMode == ControlMode.Software) {
SaveDefaultFanSpeed();
ADLFanSpeedValue adlf = new ADLFanSpeedValue();
adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
adlf.Flags = ADL.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED;
@@ -108,14 +123,9 @@ namespace OpenHardwareMonitor.Hardware.ATI {
private void ControlModeChanged(IControl control) {
if (control.ControlMode == ControlMode.Default) {
ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
ref this.initialFanSpeedValue);
RestoreDefaultFanSpeed();
} else {
ADLFanSpeedValue adlf = new ADLFanSpeedValue();
adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
adlf.Flags = ADL.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED;
adlf.FanSpeed = (int)control.SoftwareValue;
ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0, ref adlf);
SoftwareControlValueChanged(control);
}
}
@@ -204,8 +214,7 @@ namespace OpenHardwareMonitor.Hardware.ATI {
this.fanControl.SoftwareControlValueChanged -=
SoftwareControlValueChanged;
ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
ref this.initialFanSpeedValue);
RestoreDefaultFanSpeed();
}
}
}