Hardware/Nvidia/NvidiaGPU.cs
changeset 56 5cb7eb5bf628
parent 38 0e09d845eb00
child 109 70d0c3102424
     1.1 --- a/Hardware/Nvidia/NvidiaGPU.cs	Fri Feb 19 19:50:07 2010 +0000
     1.2 +++ b/Hardware/Nvidia/NvidiaGPU.cs	Sat Feb 20 19:51:10 2010 +0000
     1.3 @@ -50,57 +50,45 @@
     1.4      private Sensor[] temperatures;
     1.5      private Sensor fan = null;
     1.6  
     1.7 -    private bool available;
     1.8 +    public NvidiaGPU(int adapterIndex, NvPhysicalGpuHandle handle) {
     1.9 +      string gpuName;
    1.10 +      if (NVAPI.NvAPI_GPU_GetFullName(handle, out gpuName) == NvStatus.OK) {
    1.11 +        this.name = "NVIDIA " + gpuName.Trim();
    1.12 +      } else {
    1.13 +        this.name = "NVIDIA";
    1.14 +      }
    1.15 +      this.icon = Utilities.EmbeddedResources.GetImage("nvidia.png");
    1.16 +      this.adapterIndex = adapterIndex;
    1.17 +      this.handle = handle;
    1.18  
    1.19 -    public NvidiaGPU(int adapterIndex, NvPhysicalGpuHandle handle) {
    1.20 -      try {
    1.21 -        string gpuName;
    1.22 -        if (NVAPI.NvAPI_GPU_GetFullName(handle, out gpuName) == NvStatus.OK) {
    1.23 -          this.name = "NVIDIA " + gpuName.Trim();
    1.24 -        } else {
    1.25 -          this.name = "NVIDIA";
    1.26 +      NvGPUThermalSettings settings = GetThermalSettings();
    1.27 +      temperatures = new Sensor[settings.Count];
    1.28 +      for (int i = 0; i < temperatures.Length; i++) {
    1.29 +        NvSensor sensor = settings.Sensor[i];
    1.30 +        string name;
    1.31 +        switch (sensor.Target) {
    1.32 +          case NvThermalTarget.BOARD: name = "GPU Board"; break;
    1.33 +          case NvThermalTarget.GPU: name = "GPU Core"; break;
    1.34 +          case NvThermalTarget.MEMORY: name = "GPU Memory"; break;
    1.35 +          case NvThermalTarget.POWER_SUPPLY: name = "GPU Power Supply"; break;
    1.36 +          case NvThermalTarget.UNKNOWN: name = "GPU Unknown"; break;
    1.37 +          default: name = "GPU"; break;
    1.38          }
    1.39 -        this.icon = Utilities.EmbeddedResources.GetImage("nvidia.png");
    1.40 -        this.adapterIndex = adapterIndex;
    1.41 -        this.handle = handle;
    1.42 +        temperatures[i] = new Sensor(name, i, sensor.DefaultMaxTemp,
    1.43 +          SensorType.Temperature, this);
    1.44 +        ActivateSensor(temperatures[i]);
    1.45 +      }
    1.46  
    1.47 -        NvGPUThermalSettings settings = GetThermalSettings();
    1.48 -        temperatures = new Sensor[settings.Count];
    1.49 -        for (int i = 0; i < temperatures.Length; i++) {
    1.50 -          NvSensor sensor = settings.Sensor[i];
    1.51 -          string name;
    1.52 -          switch (sensor.Target) {
    1.53 -            case NvThermalTarget.BOARD: name = "GPU Board"; break;
    1.54 -            case NvThermalTarget.GPU: name = "GPU Core"; break;
    1.55 -            case NvThermalTarget.MEMORY: name = "GPU Memory"; break;
    1.56 -            case NvThermalTarget.POWER_SUPPLY: name = "GPU Power Supply"; break;
    1.57 -            case NvThermalTarget.UNKNOWN: name = "GPU Unknown"; break;
    1.58 -            default: name = "GPU"; break;
    1.59 -          }
    1.60 -          temperatures[i] = new Sensor(name, i, sensor.DefaultMaxTemp, 
    1.61 -            SensorType.Temperature, this);
    1.62 -          ActivateSensor(temperatures[i]);
    1.63 +      int value;
    1.64 +      if (NVAPI.NvAPI_GPU_GetTachReading != null &&
    1.65 +        NVAPI.NvAPI_GPU_GetTachReading(handle, out value) == NvStatus.OK) {
    1.66 +        if (value > 0) {
    1.67 +          fan = new Sensor("GPU", 0, SensorType.Fan, this);
    1.68 +          ActivateSensor(fan);
    1.69          }
    1.70 -        
    1.71 -        int value;
    1.72 -        if (NVAPI.NvAPI_GPU_GetTachReading != null &&
    1.73 -          NVAPI.NvAPI_GPU_GetTachReading(handle, out value) == NvStatus.OK) {
    1.74 -          if (value > 0) {
    1.75 -            fan = new Sensor("GPU", 0, SensorType.Fan, this);
    1.76 -            ActivateSensor(fan);
    1.77 -          }
    1.78 -        }
    1.79 -
    1.80 -        available = temperatures.Length > 0 || fan != null;
    1.81 -      } catch (Exception e) {
    1.82 -        System.Windows.Forms.MessageBox.Show(e.Message + "\n" + e.StackTrace);
    1.83        }
    1.84      }
    1.85  
    1.86 -    public bool IsAvailable {
    1.87 -      get { return available; }
    1.88 -    }
    1.89 -
    1.90      public string Name {
    1.91        get { return name; }
    1.92      }