Skip to content

Commit 657e833

Browse files
committed
Do not ignore fan speed overrides when critical mode is enabled
1 parent 1592938 commit 657e833

File tree

3 files changed

+42
-10
lines changed

3 files changed

+42
-10
lines changed

Core/StagWare.FanControl/Fan.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,11 @@ public virtual void SetTargetSpeed(float speed, float temperature, bool readOnly
131131
this.targetFanSpeed = speed;
132132
}
133133

134-
int speedValue = CriticalModeEnabled
135-
? maxSpeedValueWrite
136-
: PercentageToFanSpeed(this.targetFanSpeed);
134+
speed = CriticalModeEnabled ? 100.0f : this.targetFanSpeed;
137135

138136
if (!readOnly)
139137
{
140-
ECWriteValue(speedValue);
138+
ECWriteValue(PercentageToFanSpeed(speed));
141139
}
142140
}
143141

@@ -188,8 +186,8 @@ private int PercentageToFanSpeed(float percentage)
188186
}
189187
else
190188
{
191-
return (int)Math.Round(minSpeedValueWrite +
192-
(((maxSpeedValueWrite - minSpeedValueWrite) * percentage) / 100.0));
189+
return (int)Math.Round(minSpeedValueWrite
190+
+ (((maxSpeedValueWrite - minSpeedValueWrite) * percentage) / 100.0));
193191
}
194192
}
195193

@@ -207,7 +205,7 @@ private float FanSpeedToPercentage(int fanSpeed)
207205
}
208206
else
209207
{
210-
return ((float)(fanSpeed - minSpeedValueRead)
208+
return ((float)(fanSpeed - minSpeedValueRead)
211209
/ (maxSpeedValueRead - minSpeedValueRead)) * 100;
212210
}
213211
}

Core/StagWare.FanControl/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
// You can specify all the values or you can default the Build and Revision Numbers
3434
// by using the '*' as shown below:
3535
// [assembly: AssemblyVersion("1.0.*")]
36-
[assembly: AssemblyVersion("2.5.0.0")]
37-
[assembly: AssemblyFileVersion("2.5.0.0")]
36+
[assembly: AssemblyVersion("2.5.1.0")]
37+
[assembly: AssemblyFileVersion("2.5.1.0")]
3838

3939
// Internals should be visible to unit test project.
4040
[assembly: InternalsVisibleTo("StagWare.FanControl.Tests")]

Tests/StagWare.FanControl.Tests/FanTests.cs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void HandlesCriticalTemperature()
8080

8181
Assert.True(fan.CriticalModeEnabled, nameof(fan.CriticalModeEnabled));
8282
Assert.Equal(100, fan.TargetSpeed, 10);
83-
}
83+
}
8484

8585
[Fact]
8686
public void DoesRespectReadOnlyArg()
@@ -154,6 +154,40 @@ public void AppliesFanSpeedOverrides()
154154
}
155155
}
156156

157+
[Fact]
158+
public void AppliesFanSpeedOverridesWhenTempIsCritical()
159+
{
160+
var ec = A.Fake<IEmbeddedController>();
161+
var fanSpeedOverride = new FanSpeedPercentageOverride()
162+
{
163+
FanSpeedPercentage = 100,
164+
FanSpeedValue = 255,
165+
TargetOperation = OverrideTargetOperation.Write
166+
};
167+
168+
var cfg = new FanConfiguration()
169+
{
170+
WriteRegister = 123,
171+
MinSpeedValue = 0,
172+
MaxSpeedValue = 200,
173+
FanSpeedPercentageOverrides = new List<FanSpeedPercentageOverride>()
174+
{
175+
fanSpeedOverride
176+
}
177+
};
178+
179+
int criticalTemperature = 70;
180+
181+
var fan = new Fan(ec, cfg, criticalTemperature, false);
182+
fan.SetTargetSpeed(50, criticalTemperature + 1, false);
183+
184+
A.CallTo(() => ec.WriteByte((byte)cfg.WriteRegister, (byte)fanSpeedOverride.FanSpeedValue))
185+
.MustHaveHappened();
186+
187+
Assert.True(fan.CriticalModeEnabled, nameof(fan.CriticalModeEnabled));
188+
Assert.Equal(100, fan.TargetSpeed, 10);
189+
}
190+
157191
public class GetCurrentSpeed
158192
{
159193
[Fact]

0 commit comments

Comments
 (0)