Hardware/ATI/ATIGPU.cs
author moel.mich
Thu, 11 Nov 2010 21:22:24 +0000
changeset 241 52007c404f32
parent 182 4801e9eaf979
child 247 6dc755f1970e
permissions -rw-r--r--
Fixed a problem, where the MainForm location and size was lost when the application is started minimized and exited without ever showing the form. This caused MainForm_Load to be never called (location and size was not loaded), but the default size and location were still saved. The new implementation only saves the location and size when one of the two is changed.
moel@1
     1
/*
moel@1
     2
  
moel@1
     3
  Version: MPL 1.1/GPL 2.0/LGPL 2.1
moel@1
     4
moel@1
     5
  The contents of this file are subject to the Mozilla Public License Version
moel@1
     6
  1.1 (the "License"); you may not use this file except in compliance with
moel@1
     7
  the License. You may obtain a copy of the License at
moel@1
     8
 
moel@1
     9
  http://www.mozilla.org/MPL/
moel@1
    10
moel@1
    11
  Software distributed under the License is distributed on an "AS IS" basis,
moel@1
    12
  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
moel@1
    13
  for the specific language governing rights and limitations under the License.
moel@1
    14
moel@1
    15
  The Original Code is the Open Hardware Monitor code.
moel@1
    16
moel@1
    17
  The Initial Developer of the Original Code is 
moel@1
    18
  Michael Möller <m.moeller@gmx.ch>.
moel@1
    19
  Portions created by the Initial Developer are Copyright (C) 2009-2010
moel@1
    20
  the Initial Developer. All Rights Reserved.
moel@1
    21
moel@1
    22
  Contributor(s):
moel@1
    23
moel@1
    24
  Alternatively, the contents of this file may be used under the terms of
moel@1
    25
  either the GNU General Public License Version 2 or later (the "GPL"), or
moel@1
    26
  the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
moel@1
    27
  in which case the provisions of the GPL or the LGPL are applicable instead
moel@1
    28
  of those above. If you wish to allow use of your version of this file only
moel@1
    29
  under the terms of either the GPL or the LGPL, and not to allow others to
moel@1
    30
  use your version of this file under the terms of the MPL, indicate your
moel@1
    31
  decision by deleting the provisions above and replace them with the notice
moel@1
    32
  and other provisions required by the GPL or the LGPL. If you do not delete
moel@1
    33
  the provisions above, a recipient may use your version of this file under
moel@1
    34
  the terms of any one of the MPL, the GPL or the LGPL.
moel@1
    35
 
moel@1
    36
*/
moel@1
    37
moel@1
    38
using System;
moel@166
    39
using System.Globalization;
moel@1
    40
moel@1
    41
namespace OpenHardwareMonitor.Hardware.ATI {
moel@166
    42
  internal sealed class ATIGPU : Hardware {
moel@1
    43
moel@195
    44
    private readonly string name;
moel@195
    45
    private readonly int adapterIndex;
moel@195
    46
    private readonly int busNumber;
moel@195
    47
    private readonly int deviceNumber;
moel@195
    48
    private readonly Sensor temperature;
moel@195
    49
    private readonly Sensor fan;
moel@195
    50
    private readonly Sensor coreClock;
moel@195
    51
    private readonly Sensor memoryClock;
moel@195
    52
    private readonly Sensor coreVoltage;
moel@195
    53
    private readonly Sensor coreLoad;
moel@195
    54
    private readonly Sensor fanControl;
moel@1
    55
moel@3
    56
    public ATIGPU(string name, int adapterIndex, int busNumber, 
moel@165
    57
      int deviceNumber, ISettings settings) 
moel@3
    58
    {
moel@1
    59
      this.name = name;
moel@1
    60
      this.adapterIndex = adapterIndex;
moel@3
    61
      this.busNumber = busNumber;
moel@3
    62
      this.deviceNumber = deviceNumber;
moel@1
    63
moel@165
    64
      this.temperature = new Sensor("GPU Core", 0, SensorType.Temperature, this, settings);
moel@165
    65
      this.fan = new Sensor("GPU Fan", 0, SensorType.Fan, this, settings);
moel@165
    66
      this.coreClock = new Sensor("GPU Core", 0, SensorType.Clock, this, settings);
moel@165
    67
      this.memoryClock = new Sensor("GPU Memory", 1, SensorType.Clock, this, settings);
moel@165
    68
      this.coreVoltage = new Sensor("GPU Core", 0, SensorType.Voltage, this, settings);
moel@165
    69
      this.coreLoad = new Sensor("GPU Core", 0, SensorType.Load, this, settings);
moel@165
    70
      this.fanControl = new Sensor("GPU Fan", 0, SensorType.Control, this, settings);
moel@1
    71
      Update();                   
moel@1
    72
    }
moel@1
    73
moel@3
    74
    public int BusNumber { get { return busNumber; } }
moel@3
    75
moel@3
    76
    public int DeviceNumber { get { return deviceNumber; } }
moel@3
    77
moel@110
    78
    public override string Name {
moel@1
    79
      get { return name; }
moel@1
    80
    }
moel@1
    81
moel@110
    82
    public override Identifier Identifier {
moel@166
    83
      get { 
moel@166
    84
        return new Identifier("atigpu", 
moel@166
    85
          adapterIndex.ToString(CultureInfo.InvariantCulture)); 
moel@166
    86
      }
moel@1
    87
    }
moel@1
    88
moel@165
    89
    public override HardwareType HardwareType {
moel@176
    90
      get { return HardwareType.GpuAti; }
moel@1
    91
    }
moel@1
    92
moel@110
    93
    public override void Update() {
moel@1
    94
      ADLTemperature adlt = new ADLTemperature();
moel@15
    95
      if (ADL.ADL_Overdrive5_Temperature_Get(adapterIndex, 0, ref adlt)
moel@15
    96
        == ADL.ADL_OK) 
moel@15
    97
      {
moel@15
    98
        temperature.Value = 0.001f * adlt.Temperature;
moel@15
    99
        ActivateSensor(temperature);
moel@15
   100
      } else {
moel@164
   101
        temperature.Value = null;
moel@15
   102
      }
moel@1
   103
moel@1
   104
      ADLFanSpeedValue adlf = new ADLFanSpeedValue();
moel@1
   105
      adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_RPM;
moel@15
   106
      if (ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, ref adlf)
moel@15
   107
        == ADL.ADL_OK) 
moel@15
   108
      {
moel@15
   109
        fan.Value = adlf.FanSpeed;
moel@15
   110
        ActivateSensor(fan);
moel@15
   111
      } else {
moel@164
   112
        fan.Value = null;
moel@164
   113
      }
moel@164
   114
moel@164
   115
      adlf = new ADLFanSpeedValue();
moel@164
   116
      adlf.SpeedType = ADL.ADL_DL_FANCTRL_SPEED_TYPE_PERCENT;
moel@164
   117
      if (ADL.ADL_Overdrive5_FanSpeed_Get(adapterIndex, 0, ref adlf)
moel@164
   118
        == ADL.ADL_OK) {
moel@164
   119
        fanControl.Value = adlf.FanSpeed;
moel@164
   120
        ActivateSensor(fanControl);
moel@164
   121
      } else {
moel@164
   122
        fanControl.Value = null;
moel@15
   123
      }
moel@1
   124
moel@1
   125
      ADLPMActivity adlp = new ADLPMActivity();
moel@15
   126
      if (ADL.ADL_Overdrive5_CurrentActivity_Get(adapterIndex, ref adlp)
moel@15
   127
        == ADL.ADL_OK) 
moel@15
   128
      {
moel@80
   129
        if (adlp.EngineClock > 0) {
moel@80
   130
          coreClock.Value = 0.01f * adlp.EngineClock;
moel@80
   131
          ActivateSensor(coreClock);
moel@80
   132
        }
moel@80
   133
moel@80
   134
        if (adlp.MemoryClock > 0) {
moel@80
   135
          memoryClock.Value = 0.01f * adlp.MemoryClock;
moel@80
   136
          ActivateSensor(memoryClock);
moel@80
   137
        }
moel@80
   138
moel@80
   139
        if (adlp.Vddc > 0) {
moel@80
   140
          coreVoltage.Value = 0.001f * adlp.Vddc;
moel@80
   141
          ActivateSensor(coreVoltage);
moel@80
   142
        }
moel@80
   143
moel@126
   144
        coreLoad.Value = Math.Min(adlp.ActivityPercent, 100);                        
moel@24
   145
        ActivateSensor(coreLoad);
moel@15
   146
      } else {
moel@164
   147
        coreClock.Value = null;
moel@164
   148
        memoryClock.Value = null;
moel@164
   149
        coreVoltage.Value = null;
moel@164
   150
        coreLoad.Value = null;
moel@15
   151
      }
moel@1
   152
    }
moel@1
   153
  }
moel@1
   154
}