Hardware/Hardware.cs
author moel.mich
Sun, 23 Sep 2012 18:37:43 +0000
changeset 380 573f1fff48b2
parent 298 96263190189a
permissions -rw-r--r--
Fixed Issue 387. The new implementation does not try to start a ring 0 driver that already exists, but could not be opened. It tries to delete the driver and install it new. The driver is now stored temporarily in the application folder. The driver is not correctly removed on system shutdown.
     1 /*
     2  
     3   This Source Code Form is subject to the terms of the Mozilla Public
     4   License, v. 2.0. If a copy of the MPL was not distributed with this
     5   file, You can obtain one at http://mozilla.org/MPL/2.0/.
     6  
     7   Copyright (C) 2009-2011 Michael Möller <mmoeller@openhardwaremonitor.org>
     8 	
     9 */
    10 
    11 using System;
    12 using OpenHardwareMonitor.Collections;
    13 
    14 namespace OpenHardwareMonitor.Hardware {
    15   internal abstract class Hardware : IHardware {
    16 
    17     private readonly Identifier identifier;
    18     protected readonly string name;
    19     private string customName;
    20     protected readonly ISettings settings;
    21     protected readonly ListSet<ISensor> active = new ListSet<ISensor>();
    22 
    23     public Hardware(string name, Identifier identifier, ISettings settings) {
    24       this.settings = settings;
    25       this.identifier = identifier;
    26       this.name = name;
    27       this.customName = settings.GetValue(
    28         new Identifier(Identifier, "name").ToString(), name);
    29     }
    30 
    31     public IHardware[] SubHardware {
    32       get { return new IHardware[0]; }
    33     }
    34 
    35     public virtual IHardware Parent {
    36       get { return null; }
    37     }
    38 
    39     public virtual ISensor[] Sensors {
    40       get { return active.ToArray(); }
    41     }
    42 
    43     protected virtual void ActivateSensor(ISensor sensor) {
    44       if (active.Add(sensor)) 
    45         if (SensorAdded != null)
    46           SensorAdded(sensor);
    47     }
    48 
    49     protected virtual void DeactivateSensor(ISensor sensor) {
    50       if (active.Remove(sensor))
    51         if (SensorRemoved != null)
    52           SensorRemoved(sensor);     
    53     }
    54 
    55     public string Name {
    56       get {
    57         return customName;
    58       }
    59       set {
    60         if (!string.IsNullOrEmpty(value))
    61           customName = value;
    62         else
    63           customName = name;
    64         settings.SetValue(new Identifier(Identifier, "name").ToString(), 
    65           customName);
    66       }
    67     }
    68 
    69     public Identifier Identifier {
    70       get {
    71         return identifier;
    72       }
    73     }
    74 
    75     #pragma warning disable 67
    76     public event SensorEventHandler SensorAdded;
    77     public event SensorEventHandler SensorRemoved;
    78     #pragma warning restore 67
    79   
    80     
    81     public abstract HardwareType HardwareType { get; }
    82 
    83     public virtual string GetReport() {
    84       return null;
    85     }
    86 
    87     public abstract void Update();
    88 
    89     public event HardwareEventHandler Closing;
    90 
    91     public virtual void Close() {
    92       if (Closing != null)
    93         Closing(this);
    94     }
    95 
    96     public void Accept(IVisitor visitor) {
    97       if (visitor == null)
    98         throw new ArgumentNullException("visitor");
    99       visitor.VisitHardware(this);
   100     }
   101 
   102     public virtual void Traverse(IVisitor visitor) {
   103       foreach (ISensor sensor in active)
   104         sensor.Accept(visitor);
   105     }
   106   }
   107 }