public FanSpeedManager(FanConfiguration config, int criticalTemperature) { this.fanConfig = config; this.criticalTemperature = criticalTemperature; this.overriddenPercentages = new Dictionary<float, int>(); this.overriddenValues = new Dictionary<int, float>(); if (config.TemperatureThresholds != null && config.TemperatureThresholds.Count > 0) { this.threshMan = new TemperatureThresholdManager(config.TemperatureThresholds); } else { this.threshMan = new TemperatureThresholdManager(FanConfiguration.DefaultTemperatureThresholds); } foreach (FanSpeedPercentageOverride o in config.FanSpeedPercentageOverrides) { if (!this.overriddenPercentages.ContainsKey(o.FanSpeedPercentage)) { this.overriddenPercentages.Add(o.FanSpeedPercentage, o.FanSpeedValue); } if (!this.overriddenValues.ContainsKey(o.FanSpeedValue)) { this.overriddenValues.Add(o.FanSpeedValue, o.FanSpeedPercentage); } } }
public FanSpeedManager(FanConfiguration config, int criticalTemperature) { this.fanConfig = config; this.criticalTemperature = criticalTemperature; this.overriddenPercentages = new Dictionary<float, FanSpeedPercentageOverride>(); this.overriddenValues = new Dictionary<int, FanSpeedPercentageOverride>(); this.MinSpeedValueWrite = config.MinSpeedValue; this.MaxSpeedValueWrite = config.MaxSpeedValue; if (config.IndependentReadMinMaxValues) { this.MinSpeedValueRead = config.MinSpeedValueRead; this.MaxSpeedValueRead = config.MaxSpeedValueRead; } else { this.MinSpeedValueRead = this.MinSpeedValueWrite; this.MaxSpeedValueRead = this.MaxSpeedValueWrite; } this.MinSpeedValueReadAbs = Math.Min(this.MinSpeedValueRead, this.MaxSpeedValueRead); this.MinSpeedValueReadAbs = Math.Max(this.MinSpeedValueRead, this.MaxSpeedValueRead); if (config.TemperatureThresholds != null && config.TemperatureThresholds.Count > 0) { this.threshMan = new TemperatureThresholdManager(config.TemperatureThresholds); } else { this.threshMan = new TemperatureThresholdManager(FanConfiguration.DefaultTemperatureThresholds); } foreach (FanSpeedPercentageOverride o in config.FanSpeedPercentageOverrides) { if (o.TargetOperation.HasFlag(OverrideTargetOperation.Write) && !this.overriddenPercentages.ContainsKey(o.FanSpeedPercentage)) { this.overriddenPercentages.Add(o.FanSpeedPercentage, o); } if (o.TargetOperation.HasFlag(OverrideTargetOperation.Read) && !this.overriddenValues.ContainsKey(o.FanSpeedValue)) { this.overriddenValues.Add(o.FanSpeedValue, o); } } }
private int GetFanSpeedValue(FanConfiguration cfg, bool readWriteWords) { int fanSpeed = 0; int min = Math.Min(cfg.MinSpeedValue, cfg.MaxSpeedValue); int max = Math.Max(cfg.MinSpeedValue, cfg.MaxSpeedValue); // If the value is out of range 3 or more times, // minFanSpeed and/or maxFanSpeed are probably wrong. for (int i = 0; i <= 2; i++) { fanSpeed = ReadValue(cfg.ReadRegister, readWriteWords); if ((fanSpeed >= min) && (fanSpeed <= max)) { break; } } return fanSpeed; }
private static List<FanConfiguration> ConvertViewModelsToFanConfigs( IEnumerable<FanConfigViewModel> viewModels) { List<FanConfiguration> configs = new List<FanConfiguration>(); foreach (FanConfigViewModel vm in viewModels) { var cfg = new FanConfiguration() { FanDisplayName = vm.FanDisplayName, ReadRegister = vm.ReadRegister, WriteRegister = vm.WriteRegister, MinSpeedValue = vm.MinSpeedValue, MaxSpeedValue = vm.MaxSpeedValue, IndependentReadMinMaxValues = vm.IndependentReadMinMaxValues, MinSpeedValueRead = vm.MinSpeedValueRead, MaxSpeedValueRead = vm.MaxSpeedValueRead, ResetRequired = vm.ResetRequired, FanSpeedResetValue = vm.ResetValue }; if (vm.FanSpeedOverrides != null) { cfg.FanSpeedPercentageOverrides = vm.FanSpeedOverrides.Select( x => new FanSpeedPercentageOverride() { FanSpeedPercentage = x.FanSpeedPercentage, FanSpeedValue = x.FanSpeedValue, TargetOperation = x.TargetOperation }).ToList(); } if (vm.TemperatureThresholds != null) { cfg.TemperatureThresholds = vm.TemperatureThresholds.Select( x => new TemperatureThreshold() { DownThreshold = x.DownThreshold, UpThreshold = x.UpThreshold, FanSpeed = x.FanSpeedPercentage }).ToList(); } configs.Add(cfg); } return configs; }