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); sensorContextMenu.MenuItems.Add(item);
} }
if (node.Sensor.Control != null) { if (node.Sensor.Control != null) {
sensorContextMenu.MenuItems.Add(new MenuItem("-"));
IControl control = node.Sensor.Control; IControl control = node.Sensor.Control;
MenuItem controlItem = new MenuItem("Control"); MenuItem controlItem = new MenuItem("Control");
MenuItem defaultItem = new MenuItem("Default"); MenuItem defaultItem = new MenuItem("Default");

View File

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