1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/Hardware/Nvidia/NvidiaGPU.cs Tue Jan 26 22:37:48 2010 +0000
1.3 @@ -0,0 +1,126 @@
1.4 +/*
1.5 +
1.6 + Version: MPL 1.1/GPL 2.0/LGPL 2.1
1.7 +
1.8 + The contents of this file are subject to the Mozilla Public License Version
1.9 + 1.1 (the "License"); you may not use this file except in compliance with
1.10 + the License. You may obtain a copy of the License at
1.11 +
1.12 + http://www.mozilla.org/MPL/
1.13 +
1.14 + Software distributed under the License is distributed on an "AS IS" basis,
1.15 + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
1.16 + for the specific language governing rights and limitations under the License.
1.17 +
1.18 + The Original Code is the Open Hardware Monitor code.
1.19 +
1.20 + The Initial Developer of the Original Code is
1.21 + Michael Möller <m.moeller@gmx.ch>.
1.22 + Portions created by the Initial Developer are Copyright (C) 2009-2010
1.23 + the Initial Developer. All Rights Reserved.
1.24 +
1.25 + Contributor(s):
1.26 +
1.27 + Alternatively, the contents of this file may be used under the terms of
1.28 + either the GNU General Public License Version 2 or later (the "GPL"), or
1.29 + the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
1.30 + in which case the provisions of the GPL or the LGPL are applicable instead
1.31 + of those above. If you wish to allow use of your version of this file only
1.32 + under the terms of either the GPL or the LGPL, and not to allow others to
1.33 + use your version of this file under the terms of the MPL, indicate your
1.34 + decision by deleting the provisions above and replace them with the notice
1.35 + and other provisions required by the GPL or the LGPL. If you do not delete
1.36 + the provisions above, a recipient may use your version of this file under
1.37 + the terms of any one of the MPL, the GPL or the LGPL.
1.38 +
1.39 +*/
1.40 +
1.41 +using System;
1.42 +using System.Collections.Generic;
1.43 +using System.Drawing;
1.44 +
1.45 +namespace OpenHardwareMonitor.Hardware.Nvidia {
1.46 + public class NvidiaGPU : IHardware {
1.47 +
1.48 + private string name;
1.49 + private Image icon;
1.50 + private int adapterIndex;
1.51 + private NvPhysicalGpuHandle handle;
1.52 +
1.53 + private Sensor[] temperatures;
1.54 +
1.55 + public NvidiaGPU(int adapterIndex, NvPhysicalGpuHandle handle) {
1.56 + try {
1.57 + string gpuName;
1.58 + NVAPI.NvAPI_GPU_GetFullName(handle, out gpuName);
1.59 + this.name = "NVIDIA " + gpuName;
1.60 + this.icon = Utilities.EmbeddedResources.GetImage("nvidia.png");
1.61 + this.adapterIndex = adapterIndex;
1.62 + this.handle = handle;
1.63 +
1.64 + NvGPUThermalSettings settings = GetThermalSettings();
1.65 + temperatures = new Sensor[settings.Count];
1.66 + for (int i = 0; i < temperatures.Length; i++) {
1.67 + NvSensor sensor = settings.Sensor[i];
1.68 + string name;
1.69 + switch (sensor.Target) {
1.70 + case NvThermalTarget.BOARD: name = "GPU Board"; break;
1.71 + case NvThermalTarget.GPU: name = "GPU Core"; break;
1.72 + case NvThermalTarget.MEMORY: name = "GPU Memory"; break;
1.73 + case NvThermalTarget.POWER_SUPPLY: name = "GPU Power Supply"; break;
1.74 + case NvThermalTarget.UNKNOWN: name = "GPU Unknown"; break;
1.75 + default: name = "GPU"; break;
1.76 + }
1.77 + temperatures[i] = new Sensor(name, i, sensor.DefaultMaxTemp,
1.78 + SensorType.Temperature, this);
1.79 + }
1.80 + } catch (Exception e) {
1.81 + System.Windows.Forms.MessageBox.Show(e.Message + "\n" + e.StackTrace);
1.82 + }
1.83 + }
1.84 +
1.85 + public string Name {
1.86 + get { return name; }
1.87 + }
1.88 +
1.89 + public string Identifier {
1.90 + get { return "/nvidiagpu/" + adapterIndex; }
1.91 + }
1.92 +
1.93 + public Image Icon {
1.94 + get { return icon; }
1.95 + }
1.96 +
1.97 + public ISensor[] Sensors {
1.98 + get {
1.99 + return temperatures;
1.100 + }
1.101 + }
1.102 +
1.103 + public string GetReport() {
1.104 + return null;
1.105 + }
1.106 +
1.107 + private NvGPUThermalSettings GetThermalSettings() {
1.108 + NvGPUThermalSettings settings = new NvGPUThermalSettings();
1.109 + settings.Version = NVAPI.GPU_THERMAL_SETTINGS_VER;
1.110 + settings.Count = NVAPI.MAX_THERMAL_SENSORS_PER_GPU;
1.111 + settings.Sensor = new NvSensor[NVAPI.MAX_THERMAL_SENSORS_PER_GPU];
1.112 + NVAPI.NvAPI_GPU_GetThermalSettings(handle, (int)NvThermalTarget.ALL,
1.113 + ref settings);
1.114 + return settings;
1.115 + }
1.116 +
1.117 + public void Update() {
1.118 + NvGPUThermalSettings settings = GetThermalSettings();
1.119 + foreach (Sensor sensor in temperatures)
1.120 + sensor.Value = settings.Sensor[sensor.Index].CurrentTemp;
1.121 + }
1.122 +
1.123 + #pragma warning disable 67
1.124 + public event SensorEventHandler SensorAdded;
1.125 + public event SensorEventHandler SensorRemoved;
1.126 + #pragma warning restore 67
1.127 +
1.128 + }
1.129 +}