Hardware/ATI/ATIGroup.cs
author sl
Sun, 03 Feb 2013 18:01:50 +0100
changeset 391 ca4c0e7ae75d
parent 333 c34cbcc7df66
permissions -rw-r--r--
Converted project to VisualStudio 2012.
Adding SoundGraphDisplay and SensorFrontView classes.
They were respectively based on SystemTray and SensorNotifyIcon.
SoundGraphDisplay is now able to load iMONDisplay.dll providing it lives on your PATH.
Adding option to sensor context menu for adding it into FrontView.
moel@1
     1
/*
moel@1
     2
 
moel@344
     3
  This Source Code Form is subject to the terms of the Mozilla Public
moel@344
     4
  License, v. 2.0. If a copy of the MPL was not distributed with this
moel@344
     5
  file, You can obtain one at http://mozilla.org/MPL/2.0/.
moel@1
     6
 
moel@344
     7
  Copyright (C) 2009-2012 Michael Möller <mmoeller@openhardwaremonitor.org>
moel@344
     8
	
moel@1
     9
*/
moel@1
    10
moel@1
    11
using System;
moel@1
    12
using System.Collections.Generic;
moel@166
    13
using System.Globalization;
moel@1
    14
using System.Text;
moel@1
    15
moel@1
    16
namespace OpenHardwareMonitor.Hardware.ATI {
moel@165
    17
  internal class ATIGroup : IGroup {
moel@1
    18
moel@195
    19
    private readonly List<ATIGPU> hardware = new List<ATIGPU>();
moel@195
    20
    private readonly StringBuilder report = new StringBuilder();
moel@1
    21
moel@165
    22
    public ATIGroup(ISettings settings) {
moel@1
    23
      try {
moel@6
    24
        int status = ADL.ADL_Main_Control_Create(1);
moel@6
    25
moel@6
    26
        report.AppendLine("AMD Display Library");
moel@6
    27
        report.AppendLine();
moel@6
    28
        report.Append("Status: ");
moel@195
    29
        report.AppendLine(status == ADL.ADL_OK ? "OK" : 
moel@195
    30
          status.ToString(CultureInfo.InvariantCulture));
moel@6
    31
        report.AppendLine();
moel@6
    32
moel@6
    33
        if (status == ADL.ADL_OK) {
moel@1
    34
          int numberOfAdapters = 0;
moel@1
    35
          ADL.ADL_Adapter_NumberOfAdapters_Get(ref numberOfAdapters);
moel@6
    36
          
moel@35
    37
          report.Append("Number of adapters: "); 
moel@166
    38
          report.AppendLine(numberOfAdapters.ToString(CultureInfo.InvariantCulture));
moel@1
    39
          report.AppendLine();
moel@1
    40
moel@1
    41
          if (numberOfAdapters > 0) {
moel@1
    42
            ADLAdapterInfo[] adapterInfo = new ADLAdapterInfo[numberOfAdapters];
moel@6
    43
            if (ADL.ADL_Adapter_AdapterInfo_Get(adapterInfo) == ADL.ADL_OK)
moel@1
    44
              for (int i = 0; i < numberOfAdapters; i++) {
moel@1
    45
                int isActive;
moel@1
    46
                ADL.ADL_Adapter_Active_Get(adapterInfo[i].AdapterIndex,
moel@1
    47
                  out isActive);
moel@29
    48
                int adapterID;
moel@29
    49
                ADL.ADL_Adapter_ID_Get(adapterInfo[i].AdapterIndex,
moel@29
    50
                  out adapterID);
moel@1
    51
moel@1
    52
                report.Append("AdapterIndex: "); 
moel@166
    53
                report.AppendLine(i.ToString(CultureInfo.InvariantCulture));
moel@1
    54
                report.Append("isActive: "); 
moel@166
    55
                report.AppendLine(isActive.ToString(CultureInfo.InvariantCulture));
moel@1
    56
                report.Append("AdapterName: "); 
moel@1
    57
                report.AppendLine(adapterInfo[i].AdapterName);     
moel@1
    58
                report.Append("UDID: ");
moel@1
    59
                report.AppendLine(adapterInfo[i].UDID);
moel@3
    60
                report.Append("Present: ");
moel@166
    61
                report.AppendLine(adapterInfo[i].Present.ToString(
moel@166
    62
                  CultureInfo.InvariantCulture));
moel@333
    63
                report.Append("VendorID: 0x");
moel@333
    64
                report.AppendLine(adapterInfo[i].VendorID.ToString("X",
moel@166
    65
                  CultureInfo.InvariantCulture));
moel@3
    66
                report.Append("BusNumber: ");
moel@166
    67
                report.AppendLine(adapterInfo[i].BusNumber.ToString(
moel@166
    68
                  CultureInfo.InvariantCulture));
moel@3
    69
                report.Append("DeviceNumber: ");
moel@166
    70
                report.AppendLine(adapterInfo[i].DeviceNumber.ToString(
moel@166
    71
                 CultureInfo.InvariantCulture));
moel@3
    72
                report.Append("FunctionNumber: ");
moel@166
    73
                report.AppendLine(adapterInfo[i].FunctionNumber.ToString(
moel@166
    74
                  CultureInfo.InvariantCulture));
moel@29
    75
                report.Append("AdapterID: 0x");
moel@270
    76
                report.AppendLine(adapterID.ToString("X", 
moel@270
    77
                  CultureInfo.InvariantCulture));
moel@1
    78
moel@270
    79
                if (!string.IsNullOrEmpty(adapterInfo[i].UDID) &&
moel@333
    80
                  adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID) 
moel@333
    81
                {
moel@29
    82
                  bool found = false;
moel@29
    83
                  foreach (ATIGPU gpu in hardware)
moel@29
    84
                    if (gpu.BusNumber == adapterInfo[i].BusNumber &&
moel@29
    85
                      gpu.DeviceNumber == adapterInfo[i].DeviceNumber) {
moel@29
    86
                      found = true;
moel@29
    87
                      break;
moel@29
    88
                    }
moel@29
    89
                  if (!found)
moel@29
    90
                    hardware.Add(new ATIGPU(
moel@29
    91
                      adapterInfo[i].AdapterName.Trim(),
moel@29
    92
                      adapterInfo[i].AdapterIndex,
moel@29
    93
                      adapterInfo[i].BusNumber,
moel@165
    94
                      adapterInfo[i].DeviceNumber, settings));
moel@1
    95
                }
moel@11
    96
moel@11
    97
                report.AppendLine();
moel@1
    98
              }
moel@1
    99
          }
moel@1
   100
        }
moel@11
   101
      } catch (DllNotFoundException) { } 
moel@11
   102
        catch (EntryPointNotFoundException e) {
moel@11
   103
          report.AppendLine();
moel@11
   104
          report.AppendLine(e.ToString());
moel@11
   105
          report.AppendLine();        
moel@11
   106
        }
moel@1
   107
    }
moel@1
   108
moel@1
   109
    public IHardware[] Hardware {
moel@1
   110
      get {
moel@1
   111
        return hardware.ToArray();
moel@1
   112
      }
moel@1
   113
    }
moel@1
   114
moel@1
   115
    public string GetReport() {
moel@1
   116
      return report.ToString();
moel@1
   117
    }
moel@1
   118
moel@1
   119
    public void Close() {
moel@1
   120
      try {
moel@247
   121
        foreach (ATIGPU gpu in hardware)
moel@247
   122
          gpu.Close();
moel@1
   123
        ADL.ADL_Main_Control_Destroy();
moel@1
   124
      } catch (Exception) { }
moel@1
   125
    }
moel@1
   126
  }
moel@1
   127
}