Hardware/ATI/ATIGroup.cs
author moel.mich
Wed, 11 Jul 2012 22:28:39 +0000
changeset 361 0a386ef7d5bb
parent 333 c34cbcc7df66
permissions -rw-r--r--
Fixed Issue 274. Fixed Issue 107.
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
}