Hardware/ATI/ATIGroup.cs
author moel.mich
Tue, 24 Aug 2010 20:14:54 +0000
changeset 174 51d62ed28ff5
parent 166 fa9dfbfc4145
child 195 0ee888c485d5
permissions -rw-r--r--
Fixed Issue 105 and Issue 106.
     1 /*
     2   
     3   Version: MPL 1.1/GPL 2.0/LGPL 2.1
     4 
     5   The contents of this file are subject to the Mozilla Public License Version
     6   1.1 (the "License"); you may not use this file except in compliance with
     7   the License. You may obtain a copy of the License at
     8  
     9   http://www.mozilla.org/MPL/
    10 
    11   Software distributed under the License is distributed on an "AS IS" basis,
    12   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
    13   for the specific language governing rights and limitations under the License.
    14 
    15   The Original Code is the Open Hardware Monitor code.
    16 
    17   The Initial Developer of the Original Code is 
    18   Michael Möller <m.moeller@gmx.ch>.
    19   Portions created by the Initial Developer are Copyright (C) 2009-2010
    20   the Initial Developer. All Rights Reserved.
    21 
    22   Contributor(s):
    23 
    24   Alternatively, the contents of this file may be used under the terms of
    25   either the GNU General Public License Version 2 or later (the "GPL"), or
    26   the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
    27   in which case the provisions of the GPL or the LGPL are applicable instead
    28   of those above. If you wish to allow use of your version of this file only
    29   under the terms of either the GPL or the LGPL, and not to allow others to
    30   use your version of this file under the terms of the MPL, indicate your
    31   decision by deleting the provisions above and replace them with the notice
    32   and other provisions required by the GPL or the LGPL. If you do not delete
    33   the provisions above, a recipient may use your version of this file under
    34   the terms of any one of the MPL, the GPL or the LGPL.
    35  
    36 */
    37 
    38 using System;
    39 using System.Collections.Generic;
    40 using System.Globalization;
    41 using System.Text;
    42 
    43 namespace OpenHardwareMonitor.Hardware.ATI {
    44   internal class ATIGroup : IGroup {
    45 
    46     private List<ATIGPU> hardware = new List<ATIGPU>();
    47     private StringBuilder report = new StringBuilder();
    48 
    49     public ATIGroup(ISettings settings) {
    50       try {
    51         int status = ADL.ADL_Main_Control_Create(1);
    52 
    53         report.AppendLine("AMD Display Library");
    54         report.AppendLine();
    55         report.Append("Status: ");
    56         if (status == ADL.ADL_OK)
    57           report.AppendLine("OK");
    58         else
    59           report.AppendLine(status.ToString(CultureInfo.InvariantCulture));
    60         report.AppendLine();
    61 
    62         if (status == ADL.ADL_OK) {
    63           int numberOfAdapters = 0;
    64           ADL.ADL_Adapter_NumberOfAdapters_Get(ref numberOfAdapters);
    65           
    66           report.Append("Number of adapters: "); 
    67           report.AppendLine(numberOfAdapters.ToString(CultureInfo.InvariantCulture));
    68           report.AppendLine();
    69 
    70           if (numberOfAdapters > 0) {
    71             ADLAdapterInfo[] adapterInfo = new ADLAdapterInfo[numberOfAdapters];
    72             if (ADL.ADL_Adapter_AdapterInfo_Get(adapterInfo) == ADL.ADL_OK)
    73               for (int i = 0; i < numberOfAdapters; i++) {
    74                 int isActive;
    75                 ADL.ADL_Adapter_Active_Get(adapterInfo[i].AdapterIndex,
    76                   out isActive);
    77                 int adapterID;
    78                 ADL.ADL_Adapter_ID_Get(adapterInfo[i].AdapterIndex,
    79                   out adapterID);
    80 
    81                 report.Append("AdapterIndex: "); 
    82                 report.AppendLine(i.ToString(CultureInfo.InvariantCulture));
    83                 report.Append("isActive: "); 
    84                 report.AppendLine(isActive.ToString(CultureInfo.InvariantCulture));
    85                 report.Append("AdapterName: "); 
    86                 report.AppendLine(adapterInfo[i].AdapterName);     
    87                 report.Append("UDID: ");
    88                 report.AppendLine(adapterInfo[i].UDID);
    89                 report.Append("Present: ");
    90                 report.AppendLine(adapterInfo[i].Present.ToString(
    91                   CultureInfo.InvariantCulture));
    92                 report.Append("VendorID: ");
    93                 report.AppendLine(adapterInfo[i].VendorID.ToString(
    94                   CultureInfo.InvariantCulture));
    95                 report.Append("BusNumber: ");
    96                 report.AppendLine(adapterInfo[i].BusNumber.ToString(
    97                   CultureInfo.InvariantCulture));
    98                 report.Append("DeviceNumber: ");
    99                 report.AppendLine(adapterInfo[i].DeviceNumber.ToString(
   100                  CultureInfo.InvariantCulture));
   101                 report.Append("FunctionNumber: ");
   102                 report.AppendLine(adapterInfo[i].FunctionNumber.ToString(
   103                   CultureInfo.InvariantCulture));
   104                 report.Append("AdapterID: 0x");
   105                 report.AppendLine(adapterID.ToString("X", CultureInfo.InvariantCulture));
   106 
   107                 if (adapterID != 0 && !string.IsNullOrEmpty(adapterInfo[i].UDID) &&
   108                   (adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID1 ||
   109                    adapterInfo[i].VendorID == ADL.ATI_VENDOR_ID2)) {
   110                   bool found = false;
   111                   foreach (ATIGPU gpu in hardware)
   112                     if (gpu.BusNumber == adapterInfo[i].BusNumber &&
   113                       gpu.DeviceNumber == adapterInfo[i].DeviceNumber) {
   114                       found = true;
   115                       break;
   116                     }
   117                   if (!found)
   118                     hardware.Add(new ATIGPU(
   119                       adapterInfo[i].AdapterName.Trim(),
   120                       adapterInfo[i].AdapterIndex,
   121                       adapterInfo[i].BusNumber,
   122                       adapterInfo[i].DeviceNumber, settings));
   123                 }
   124 
   125                 report.AppendLine();
   126               }
   127           }
   128         }
   129       } catch (DllNotFoundException) { } 
   130         catch (EntryPointNotFoundException e) {
   131           report.AppendLine();
   132           report.AppendLine(e.ToString());
   133           report.AppendLine();        
   134         }
   135     }
   136 
   137     public IHardware[] Hardware {
   138       get {
   139         return hardware.ToArray();
   140       }
   141     }
   142 
   143     public string GetReport() {
   144       return report.ToString();
   145     }
   146 
   147     public void Close() {
   148       try {
   149         ADL.ADL_Main_Control_Destroy();
   150       } catch (Exception) { }
   151     }
   152   }
   153 }