mirror of
https://github.com/openhardwaremonitor/openhardwaremonitor
synced 2025-09-03 15:55:26 +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);
|
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");
|
||||||
|
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user