Exemple #1
0
            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);
            }
Exemple #2
0
            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();
            }
Exemple #3
0
            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();
                }
            }
Exemple #4
0
            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);
            }
Exemple #5
0
            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();
            }
Exemple #6
0
            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);
            }
Exemple #7
0
            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();
            }
Exemple #8
0
        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);
        }