117 lines
3.2 KiB
C#
Raw Permalink Normal View History

/*
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
Copyright (C) 2010-2014 Michael Möller <mmoeller@openhardwaremonitor.org>
*/
using System;
using System.Globalization;
namespace OpenHardwareMonitor.Hardware {
internal delegate void ControlEventHandler(Control control);
internal class Control : IControl {
private readonly Identifier identifier;
private readonly ISettings settings;
private ControlMode mode;
private float softwareValue;
private float minSoftwareValue;
private float maxSoftwareValue;
public Control(ISensor sensor, ISettings settings, float minSoftwareValue,
float maxSoftwareValue)
{
this.identifier = new Identifier(sensor.Identifier, "control");
this.settings = settings;
this.minSoftwareValue = minSoftwareValue;
this.maxSoftwareValue = maxSoftwareValue;
if (!float.TryParse(settings.GetValue(
new Identifier(identifier, "value").ToString(), "0"),
NumberStyles.Float, CultureInfo.InvariantCulture,
out this.softwareValue))
{
this.softwareValue = 0;
}
int mode;
if (!int.TryParse(settings.GetValue(
new Identifier(identifier, "mode").ToString(),
((int)ControlMode.Undefined).ToString(CultureInfo.InvariantCulture)),
NumberStyles.Integer, CultureInfo.InvariantCulture,
out mode))
{
this.mode = ControlMode.Undefined;
} else {
this.mode = (ControlMode)mode;
}
}
public Identifier Identifier {
get {
return identifier;
}
}
public ControlMode ControlMode {
get {
return mode;
}
private set {
if (mode != value) {
mode = value;
if (ControlModeChanged != null)
ControlModeChanged(this);
this.settings.SetValue(new Identifier(identifier, "mode").ToString(),
((int)mode).ToString(CultureInfo.InvariantCulture));
}
}
}
public float SoftwareValue {
get {
return softwareValue;
}
private set {
if (softwareValue != value) {
softwareValue = value;
if (SoftwareControlValueChanged != null)
SoftwareControlValueChanged(this);
this.settings.SetValue(new Identifier(identifier,
"value").ToString(),
value.ToString(CultureInfo.InvariantCulture));
}
}
}
public void SetDefault() {
ControlMode = ControlMode.Default;
}
public float MinSoftwareValue {
get {
return minSoftwareValue;
}
}
public float MaxSoftwareValue {
get {
return maxSoftwareValue;
}
}
public void SetSoftware(float value) {
ControlMode = ControlMode.Software;
SoftwareValue = value;
}
internal event ControlEventHandler ControlModeChanged;
internal event ControlEventHandler SoftwareControlValueChanged;
}
}