Add support for zero-fan mode, fix sensor identifiers

This commit is contained in:
2023-07-24 13:55:53 +02:00
parent ad12f7a981
commit ff72f8d2ea
6 changed files with 53 additions and 58 deletions

View File

@@ -12,22 +12,17 @@ FanCurve::FanCurve(std::vector<FanStep> steps,
std::vector<std::shared_ptr<Sensor>> sensors,
std::vector<std::shared_ptr<Fan>> fans,
std::unique_ptr<Aggregator> aggregator)
: mSteps(steps)
, mTempSensors(sensors)
, mFans(fans)
, mAggregator(std::move(aggregator))
{
: mSteps(steps), mTempSensors(sensors), mFans(fans),
mAggregator(std::move(aggregator)) {
PrintInfo();
}
void
FanCurve::DoFanControl()
{
void FanCurve::DoFanControl() {
BOOST_LOG_FUNCTION();
int temp = AggregateTemperature();
int t0, t1, p0, p1;
int t0 = 0, t1 = 0, p0 = 0, p1 = 0;
int targetFanPower;
if (temp <= mSteps[0].Temp) {
@@ -35,7 +30,7 @@ FanCurve::DoFanControl()
} else if (temp > mSteps[mSteps.size() - 1].Temp) {
targetFanPower = mSteps[mSteps.size() - 1].Percent;
} else {
for (int i = 0; i < mSteps.size(); i++) {
for (int i = 0; i < (int)mSteps.size(); i++) {
if (temp > mSteps[i].Temp) {
t0 = mSteps[i].Temp;
p0 = mSteps[i].Percent;
@@ -49,7 +44,7 @@ FanCurve::DoFanControl()
}
for (auto f : mFans) {
if (f->RPM() <= 0) {
if (!f->ZeroFanModeSupported() && f->RPM() <= 0) {
BOOST_LOG_TRIVIAL(warning) << "Fan stopped completely!";
f->PWM(f->StartPWM());
f->AdjustPWMLimits();
@@ -59,15 +54,11 @@ FanCurve::DoFanControl()
}
}
int
FanCurve::AggregateTemperature()
{
int FanCurve::AggregateTemperature() {
return mAggregator->aggregate(mTempSensors);
}
void
FanCurve::PrintInfo()
{
void FanCurve::PrintInfo() {
BOOST_LOG_FUNCTION()
BOOST_LOG_TRIVIAL(info) << "### Fan curve:";

View File

@@ -39,6 +39,12 @@ void HwmonFan::StartPWM(int value) { mStartPWM = value; }
int HwmonFan::StartPWM() { return mStartPWM; }
void HwmonFan::ZeroFanModeSupported(bool value) {
mZeroFanModeSupported = value;
}
bool HwmonFan::ZeroFanModeSupported() { return mZeroFanModeSupported; }
void HwmonFan::FindPWMLimits() {
cout << "Looking for minimal PWM" << endl;
int minPWM = 0;
@@ -95,11 +101,9 @@ void HwmonFan::AdjustPWMLimits() {
json HwmonFan::toJson() const {
json obj;
obj = {mPWMControl->toJson(),
mRpmSensor->toJson(),
{"Label", mLabel},
{"MinPWM", mMinPWM},
{"StartPWM", mStartPWM}};
obj = {mPWMControl->toJson(), mRpmSensor->toJson(),
{"Label", mLabel}, {"MinPWM", mMinPWM},
{"StartPWM", mStartPWM}, {"ZeroFan", mZeroFanModeSupported}};
return obj;
}