Hardware/ATI/ATIGroup.cs
author moel.mich
Thu, 11 Nov 2010 21:22:24 +0000
changeset 241 52007c404f32
parent 167 b7cc9d09aefe
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@1
    39
using System.Collections.Generic;
moel@166
    40
using System.Globalization;
moel@1
    41
using System.Text;
moel@1
    42
moel@1
    43
namespace OpenHardwareMonitor.Hardware.ATI {
moel@165
    44
  internal class ATIGroup : IGroup {
moel@1
    45
moel@195
    46
    private readonly List<ATIGPU> hardware = new List<ATIGPU>();
moel@195
    47
    private readonly StringBuilder report = new StringBuilder();
moel@1
    48
moel@165
    49
    public ATIGroup(ISettings settings) {
moel@1
    50
      try {
moel@6
    51
        int status = ADL.ADL_Main_Control_Create(1);
moel@6
    52
moel@6
    53
        report.AppendLine("AMD Display Library");
moel@6
    54
        report.AppendLine();
moel@6
    55
        report.Append("Status: ");
moel@195
    56
        report.AppendLine(status == ADL.ADL_OK ? "OK" : 
moel@195
    57
          status.ToString(CultureInfo.InvariantCulture));
moel@6
    58
        report.AppendLine();
moel@6
    59
moel@6
    60
        if (status == ADL.ADL_OK) {
moel@1
    61
          int numberOfAdapters = 0;
moel@1
    62
          ADL.ADL_Adapter_NumberOfAdapters_Get(ref numberOfAdapters);
moel@6
    63
          
moel@35
    64
          report.Append("Number of adapters: "); 
moel@166
    65
          report.AppendLine(numberOfAdapters.ToString(CultureInfo.InvariantCulture));
moel@1
    66
          report.AppendLine();
moel@1
    67
moel@1
    68
          if (numberOfAdapters > 0) {
moel@1
    69
            ADLAdapterInfo[] adapterInfo = new ADLAdapterInfo[numberOfAdapters];
moel@6
    70
            if (ADL.ADL_Adapter_AdapterInfo_Get(adapterInfo) == ADL.ADL_OK)
moel@1
    71
              for (int i = 0; i < numberOfAdapters; i++) {
moel@1
    72
                int isActive;
moel@1
    73
                ADL.ADL_Adapter_Active_Get(adapterInfo[i].AdapterIndex,
moel@1
    74
                  out isActive);
moel@29
    75
                int adapterID;
moel@29
    76
                ADL.ADL_Adapter_ID_Get(adapterInfo[i].AdapterIndex,
moel@29
    77
                  out adapterID);
moel@1
    78
moel@1
    79
                report.Append("AdapterIndex: "); 
moel@166
    80
                report.AppendLine(i.ToString(CultureInfo.InvariantCulture));
moel@1
    81
                report.Append("isActive: "); 
moel@166
    82
                report.AppendLine(isActive.ToString(CultureInfo.InvariantCulture));
moel@1
    83
                report.Append("AdapterName: "); 
moel@1
    84
                report.AppendLine(adapterInfo[i].AdapterName);     
moel@1
    85
                report.Append("UDID: ");
moel@1
    86
                report.AppendLine(adapterInfo[i].UDID);
moel@3
    87
                report.Append("Present: ");
moel@166
    88
                report.AppendLine(adapterInfo[i].Present.ToString(
moel@166
    89
                  CultureInfo.InvariantCulture));
moel@3
    90
                report.Append("VendorID: ");
moel@166
    91
                report.AppendLine(adapterInfo[i].VendorID.ToString(
moel@166
    92
                  CultureInfo.InvariantCulture));
moel@3
    93
                report.Append("BusNumber: ");
moel@166
    94
                report.AppendLine(adapterInfo[i].BusNumber.ToString(
moel@166
    95
                  CultureInfo.InvariantCulture));
moel@3
    96
                report.Append("DeviceNumber: ");
moel@166
    97
                report.AppendLine(adapterInfo[i].DeviceNumber.ToString(
moel@166
    98
                 CultureInfo.InvariantCulture));
moel@3
    99
                report.Append("FunctionNumber: ");
moel@166
   100
                report.AppendLine(adapterInfo[i].FunctionNumber.ToString(
moel@166
   101
                  CultureInfo.InvariantCulture));
moel@29
   102
                report.Append("AdapterID: 0x");
moel@166
   103
                report.AppendLine(adapterID.ToString("X", CultureInfo.InvariantCulture));
moel@1
   104
moel@167
   105
                if (adapterID != 0 && !string.IsNullOrEmpty(adapterInfo[i].UDID) &&
moel@29
   106
                  (adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID1 ||
moel@29
   107
                   adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID2)) {
moel@29
   108
                  bool found = false;
moel@29
   109
                  foreach (ATIGPU gpu in hardware)
moel@29
   110
                    if (gpu.BusNumber == adapterInfo[i].BusNumber &&
moel@29
   111
                      gpu.DeviceNumber == adapterInfo[i].DeviceNumber) {
moel@29
   112
                      found = true;
moel@29
   113
                      break;
moel@29
   114
                    }
moel@29
   115
                  if (!found)
moel@29
   116
                    hardware.Add(new ATIGPU(
moel@29
   117
                      adapterInfo[i].AdapterName.Trim(),
moel@29
   118
                      adapterInfo[i].AdapterIndex,
moel@29
   119
                      adapterInfo[i].BusNumber,
moel@165
   120
                      adapterInfo[i].DeviceNumber, settings));
moel@1
   121
                }
moel@11
   122
moel@11
   123
                report.AppendLine();
moel@1
   124
              }
moel@1
   125
          }
moel@1
   126
        }
moel@11
   127
      } catch (DllNotFoundException) { } 
moel@11
   128
        catch (EntryPointNotFoundException e) {
moel@11
   129
          report.AppendLine();
moel@11
   130
          report.AppendLine(e.ToString());
moel@11
   131
          report.AppendLine();        
moel@11
   132
        }
moel@1
   133
    }
moel@1
   134
moel@1
   135
    public IHardware[] Hardware {
moel@1
   136
      get {
moel@1
   137
        return hardware.ToArray();
moel@1
   138
      }
moel@1
   139
    }
moel@1
   140
moel@1
   141
    public string GetReport() {
moel@1
   142
      return report.ToString();
moel@1
   143
    }
moel@1
   144
moel@1
   145
    public void Close() {
moel@1
   146
      try {
moel@1
   147
        ADL.ADL_Main_Control_Destroy();
moel@1
   148
      } catch (Exception) { }
moel@1
   149
    }
moel@1
   150
  }
moel@1
   151
}