public void CallsWriteWord(float speed) { var ec = A.Fake <IEmbeddedController>(); var cfg = new FanConfiguration() { WriteRegister = 123, MinSpeedValue = 0, MaxSpeedValue = 20000 }; var fan = new Fan(ec, cfg, 100, true); fan.SetTargetSpeed(speed, 50, false); ushort expectedValue = (ushort)Math.Round((cfg.MaxSpeedValue * speed) / 100); A.CallTo(() => ec.WriteWord((byte)cfg.WriteRegister, expectedValue)) .MustHaveHappened(); Assert.Equal(speed, fan.TargetSpeed, 10); }
public void CallsWriteWord() { var ec = A.Fake <IEmbeddedController>(); A.CallTo(() => ec.AcquireLock(A <int> .Ignored)).Returns(true); var cfg = new FanConfiguration() { WriteRegister = 123, ResetRequired = true, FanSpeedResetValue = ushort.MaxValue }; var fan = new Fan(ec, cfg, 100, true); fan.Reset(); A.CallTo(() => ec.WriteWord((byte)cfg.WriteRegister, (ushort)cfg.FanSpeedResetValue)) .MustHaveHappened(); }
public void ResetsRegisterWriteConfigurations() { var fanCfg = new FanConfiguration(); var regWriteCfg = new RegisterWriteConfiguration() { Register = 123, Value = 12, ResetRequired = true, ResetValue = 24 }; var cfg = new FanControlConfigV2() { EcPollInterval = 100, FanConfigurations = { fanCfg }, RegisterWriteConfigurations = { regWriteCfg } }; var filter = A.Fake <ITemperatureFilter>(); A.CallTo(() => filter.FilterTemperature(A <double> .Ignored)).ReturnsLazily((double x) => x); var ec = A.Fake <IEmbeddedController>(); A.CallTo(() => ec.IsInitialized).Returns(true); A.CallTo(() => ec.AcquireLock(A <int> .Ignored)).Returns(true); A.CallTo(() => ec.ReadByte(A <byte> .Ignored)).Returns((byte)0); var tempMon = A.Fake <ITemperatureMonitor>(); A.CallTo(() => tempMon.IsInitialized).Returns(true); using (var fanControl = new FanControl(cfg, filter, ec, tempMon)) { fanControl.Start(false); fanControl.Stop(); A.CallTo(() => ec.WriteByte((byte)regWriteCfg.Register, (byte)regWriteCfg.ResetValue)) .MustHaveHappened(); } }
public static void CallsReadWord() { var cfg = new FanConfiguration() { ReadRegister = 123, MinSpeedValue = 0, MaxSpeedValue = 20000 }; var ec = A.Fake <IEmbeddedController>(); A.CallTo(() => ec.AcquireLock(A <int> .Ignored)).Returns(true); A.CallTo(() => ec.ReadWord((byte)cfg.ReadRegister)).Returns((ushort)cfg.MaxSpeedValue); var fan = new Fan(ec, cfg, 100, true); fan.GetCurrentSpeed(); A.CallTo(() => ec.ReadWord((byte)cfg.ReadRegister)).MustHaveHappened(); Assert.Equal(100, fan.CurrentSpeed); }
public void TriesToForceResetFans() { var fanCfg = new FanConfiguration() { ResetRequired = true }; var cfg = new FanControlConfigV2() { EcPollInterval = 100, FanConfigurations = { fanCfg } }; var filter = A.Fake <ITemperatureFilter>(); A.CallTo(() => filter.FilterTemperature(A <double> .Ignored)).ReturnsLazily((double x) => x); var ec = A.Fake <IEmbeddedController>(); A.CallTo(() => ec.IsInitialized).Returns(true); A.CallTo(() => ec.AcquireLock(A <int> .Ignored)).Returns(true); var tempMon = A.Fake <ITemperatureMonitor>(); A.CallTo(() => tempMon.IsInitialized).Returns(true); var fan = A.Fake <Fan>(opt => opt.WithArgumentsForConstructor( new object[] { ec, fanCfg, 70, false })); A.CallTo(() => fan.GetCurrentSpeed()).Returns(0); using (var fanControl = new FanControl(cfg, filter, ec, tempMon, new[] { fan })) { fanControl.Start(false); A.CallTo(() => ec.AcquireLock(A <int> .Ignored)).Returns(false); } A.CallTo(() => fan.Reset()).MustHaveHappened(); }
public static void HandlesCriticalTemperature() { var ec = A.Fake <IEmbeddedController>(); var cfg = new FanConfiguration() { WriteRegister = 123, MinSpeedValue = 0, MaxSpeedValue = 200 }; int criticalTemperature = 70; var fan = new Fan(ec, cfg, criticalTemperature, false); fan.SetTargetSpeed(50, criticalTemperature + 1, false); A.CallTo(() => ec.WriteByte((byte)cfg.WriteRegister, (byte)cfg.MaxSpeedValue)) .MustHaveHappened(); Assert.True(fan.CriticalModeEnabled, nameof(fan.CriticalModeEnabled)); Assert.Equal(100, fan.TargetSpeed, 10); }
public static void DoesRespectReadOnlyArg() { var ec = A.Fake <IEmbeddedController>(); var cfg = new FanConfiguration() { WriteRegister = 123, MinSpeedValue = 0, MaxSpeedValue = 200 }; var fan1 = new Fan(ec, cfg, 100, false); fan1.SetTargetSpeed(100, 50, true); var fan2 = new Fan(ec, cfg, 100, true); fan2.SetTargetSpeed(100, 50, true); A.CallTo(() => ec.WriteByte((byte)cfg.WriteRegister, (byte)cfg.MaxSpeedValue)) .MustNotHaveHappened(); A.CallTo(() => ec.WriteWord((byte)cfg.WriteRegister, (byte)cfg.MaxSpeedValue)) .MustNotHaveHappened(); }
private void UpdateFanInformation() { for (int i = 0; i < this.fanSpeedManagers.Length; i++) { FanSpeedManager speedMan = this.fanSpeedManagers[i]; FanConfiguration fanCfg = this.config.FanConfigurations[i]; int speedVal = GetFanSpeedValue( fanCfg.ReadRegister, speedMan.MinSpeedValueReadAbs, speedMan.MaxSpeedValueReadAbs, this.config.ReadWriteWords); this.fanInfoInternal[i] = new FanInformation( speedMan.FanSpeedPercentage, speedMan.FanSpeedToPercentage(speedVal), speedMan.AutoControlEnabled, speedMan.CriticalModeEnabled, fanCfg.FanDisplayName); } this.fanInfoInternal = Interlocked.Exchange(ref this.fanInfo, this.fanInfoInternal); }