Hardware/ATI/ATIGPU.cs
changeset 248 045eb5c1ec32
parent 247 6dc755f1970e
child 270 ef89cbe45b7c
     1.1 --- a/Hardware/ATI/ATIGPU.cs	Thu Jan 20 21:31:54 2011 +0000
     1.2 +++ b/Hardware/ATI/ATIGPU.cs	Thu Jan 20 21:48:26 2011 +0000
     1.3 @@ -54,7 +54,8 @@
     1.4      private readonly Sensor controlSensor;
     1.5      private readonly Control fanControl;
     1.6  
     1.7 -    private ADLFanSpeedValue initialFanSpeedValue;
     1.8 +    private bool restoreDefaultFanSpeedRequired = false;
     1.9 +    private ADLFanSpeedValue initialFanSpeedValue;    
    1.10  
    1.11      public ATIGPU(string name, int adapterIndex, int busNumber, 
    1.12        int deviceNumber, ISettings settings) 
    1.13 @@ -64,12 +65,6 @@
    1.14        this.busNumber = busNumber;
    1.15        this.deviceNumber = deviceNumber;
    1.16  
    1.17 -      this.initialFanSpeedValue = new ADLFanSpeedValue();
    1.18 -      this.initialFanSpeedValue.SpeedType = 
    1.19 -        ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
    1.20 -      ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, 
    1.21 -        ref this.initialFanSpeedValue);
    1.22 -
    1.23        this.temperature = new Sensor("GPU Core", 0, SensorType.Temperature, this, settings);
    1.24        this.fan = new Sensor("GPU Fan", 0, SensorType.Fan, this, settings);
    1.25        this.coreClock = new Sensor("GPU Core", 0, SensorType.Clock, this, settings);
    1.26 @@ -96,8 +91,28 @@
    1.27        Update();                   
    1.28      }
    1.29  
    1.30 +    private void SaveDefaultFanSpeed() {
    1.31 +      if (!restoreDefaultFanSpeedRequired) {        
    1.32 +        initialFanSpeedValue = new ADLFanSpeedValue();
    1.33 +        initialFanSpeedValue.SpeedType =
    1.34 +          ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
    1.35 +        restoreDefaultFanSpeedRequired = 
    1.36 +          ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0,
    1.37 +          ref initialFanSpeedValue) == ADL.ADL_OK;
    1.38 +      }
    1.39 +    }
    1.40 +
    1.41 +    private void RestoreDefaultFanSpeed() {
    1.42 +      if (restoreDefaultFanSpeedRequired) {        
    1.43 +        ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
    1.44 +          ref this.initialFanSpeedValue);
    1.45 +        restoreDefaultFanSpeedRequired = false;
    1.46 +      }
    1.47 +    }
    1.48 +
    1.49      private void SoftwareControlValueChanged(IControl control) {
    1.50        if (control.ControlMode == ControlMode.Software) {
    1.51 +        SaveDefaultFanSpeed();
    1.52          ADLFanSpeedValue adlf = new ADLFanSpeedValue();
    1.53          adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
    1.54          adlf.Flags = ADL.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED;
    1.55 @@ -108,14 +123,9 @@
    1.56  
    1.57      private void ControlModeChanged(IControl control) {
    1.58        if (control.ControlMode == ControlMode.Default) {
    1.59 -        ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
    1.60 -          ref this.initialFanSpeedValue);
    1.61 +        RestoreDefaultFanSpeed();     
    1.62        } else {
    1.63 -        ADLFanSpeedValue adlf = new ADLFanSpeedValue();
    1.64 -        adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
    1.65 -        adlf.Flags = ADL.ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED;
    1.66 -        adlf.FanSpeed = (int)control.SoftwareValue;
    1.67 -        ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0, ref adlf);
    1.68 +        SoftwareControlValueChanged(control);
    1.69        }
    1.70      }
    1.71  
    1.72 @@ -204,8 +214,7 @@
    1.73        this.fanControl.SoftwareControlValueChanged -=
    1.74          SoftwareControlValueChanged;
    1.75  
    1.76 -      ADL.ADL_Overdrive5_FanSpeed_Set(adapterIndex, 0,
    1.77 -        ref this.initialFanSpeedValue);
    1.78 +      RestoreDefaultFanSpeed();
    1.79      }
    1.80    }
    1.81  }