Implement remaining stuff

Basic functionality milestone reached!!
This commit is contained in:
2022-10-01 15:55:49 +02:00
parent 2ef9d979b0
commit b74f0e87cd
12 changed files with 205 additions and 58 deletions

View File

@@ -1,25 +1,28 @@
#include <fan/FanCurve.h>
#include <iostream>
#include <array>
#include <fan/FanCurve.h>
using namespace std;
FanCurve::FanCurve(std::vector<FanStep> steps,
std::vector<std::shared_ptr<Sensor>> sensors,
std::vector<std::shared_ptr<Fan>> fans)
: mSteps(steps), mTempSensors(sensors), mFans(fans) {}
: mSteps(steps), mTempSensors(sensors), mFans(fans) {
cout << "Initialized Fan Curve:" << endl;
PrintInfo();
}
void FanCurve::DoFanControl() {
int temp = AggregateTemperature();
cout << "Temp: " << temp << "C" << endl;
int t0, t1, p0, p1;
int targetFanSpeed;
if (temp <= mSteps[0].Temp) {
t0 = t1 = mSteps[0].Temp;
p0 = p1 = mSteps[0].Percent;
targetFanSpeed = mSteps[0].Percent;
} else if (temp > mSteps[mSteps.size() - 1].Temp) {
t0 = t1 = mSteps[mSteps.size() - 1].Temp;
p0 = p1 = mSteps[mSteps.size() - 1].Percent;
targetFanSpeed = mSteps[mSteps.size() - 1].Percent;
} else {
for (int i = 0; i < mSteps.size(); i++) {
if (temp > mSteps[i].Temp) {
@@ -30,9 +33,11 @@ void FanCurve::DoFanControl() {
p1 = mSteps[i + 1].Percent;
}
}
targetFanSpeed = p0 + ((p1 - p0) / (t1 - t0)) * (temp - t0);
}
int targetFanSpeed = p0 + ((p1 - p0) / (t1 - t0)) * (temp - t0);
cout << "Power: " << targetFanSpeed << "%" << endl;
for (auto f : mFans) {
f->PWM(targetFanSpeed);
@@ -41,10 +46,37 @@ void FanCurve::DoFanControl() {
// Dummy Implementation using AVG
int FanCurve::AggregateTemperature() {
int sum;
int sum = 0;
for (auto s : mTempSensors) {
sum += s->value();
}
return sum / mTempSensors.size();
}
void FanCurve::PrintInfo() {
stringstream sStream;
cout << "Steps: ";
for (auto s : mSteps) {
sStream << "[ " << s.Temp << "C, " << s.Percent << "% ] ";
}
cout << sStream.str() << endl;
sStream.str(string());
cout << "Sensors: ";
for (auto s : mTempSensors) {
sStream << s->toString() << ", ";
}
cout << sStream.str() << endl;
sStream.str(string());
cout << "Fans: ";
for (auto s : mFans) {
sStream << s->toString() << ", ";
}
cout << sStream.str() << endl;
}

View File

@@ -70,6 +70,9 @@ json HwmonFan::toJson() const {
}
const string HwmonFan::toString() const {
return "Fan!\nPWMControl: " + mPWMControl->toString() +
"\nRpmSensor: " + mRpmSensor->toString();
if (!mLabel.empty()) {
return mLabel;
} else {
return "fan:" + mPWMControl->toString();
}
}