mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-09-03 07:45:35 +00:00
Improved the saving and restoring of default fan control settings for ATI GPUs.
This commit is contained in:
@@ -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");
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user