Hardware/Hardware.cs
author moel.mich
Sat, 07 Sep 2013 08:07:11 +0000
changeset 423 47f5dcaf8e9f
parent 298 96263190189a
permissions -rw-r--r--
Fixed an issue with the Nuvoton NCT6791D (hardware monitor i/o space lock wasn't disabled before attempting to read data).
     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 }