public static void ChangeFan(FanOperation operation) { ISensor fanSensor; var outputValue = string.Empty; if (DisplayController.CurrentScreen == Screen.FrontFans) { var mb = _computer.Hardware.First(x => x.HardwareType == HardwareType.Mainboard); mb.Update(); var fans = mb.SubHardware[0].Sensors .Where(x => x.Identifier.ToString() == HardwareIdentifiers.FRONT1_FAN_PERCENTAGE || x.Identifier.ToString() == HardwareIdentifiers.FRONT2_FAN_PERCENTAGE || x.Identifier.ToString() == HardwareIdentifiers.FRONT3_FAN_PERCENTAGE) .ToList(); var minValue = fans.Min(x => x.Value) ?? 50; fans.ForEach(x => outputValue = ChangeFan(x, minValue, operation)); DisplayController.Display("Fan control", $"{outputValue}", true); return; } FanType fan; try { fan = DisplayController.CurrentScreen.GetFanType(); } catch (Exception e) { DisplayController.Display("Error", e.Message, true); return; } if (fan == FanType.GPU) { var gpu = _computer.Hardware.First(x => x.HardwareType == HardwareType.GpuNvidia); gpu.Update(); fanSensor = gpu.Sensors.First(x => x.Identifier.ToString() == HardwareIdentifiers.GPU_FAN_PERCENTAGE); } else { var mb = _computer.Hardware.First(x => x.HardwareType == HardwareType.Mainboard); mb.Update(); fanSensor = mb.SubHardware[0].Sensors.First(x => x.Identifier.ToString() == Fans[fan]); } var value = fanSensor.Value.GetValueOrDefault(50); outputValue = ChangeFan(fanSensor, value, operation); DisplayController.Display("Fan control", $"{outputValue}", true); }
private static string ChangeFan(ISensor fan, float value, FanOperation operation) { var resultValue = value; string outputValue; switch (operation) { case FanOperation.Up: resultValue += FAN_STEP; if (resultValue > 100) { resultValue = 100; } outputValue = resultValue.ToString("##0") + "%"; fan.Control.SetSoftware(resultValue); break; case FanOperation.Down: resultValue -= FAN_STEP; if (resultValue < 0) { resultValue = 0; } outputValue = resultValue.ToString("##0") + "%"; fan.Control.SetSoftware(resultValue); break; case FanOperation.Default: outputValue = "Default"; fan.Control.SetDefault(); break; default: throw new ArgumentOutOfRangeException(nameof(operation), operation, null); } return(outputValue); }