Hysteresis, Inhibit-Stop Timeframe
This commit is contained in:
@@ -17,16 +17,16 @@
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
class Serializer
|
||||
{
|
||||
class Serializer {
|
||||
public:
|
||||
Serializer();
|
||||
void SerializeFans(std::vector<std::shared_ptr<Fan>> fans);
|
||||
std::vector<std::shared_ptr<Fan>> DeserializeFans(
|
||||
std::vector<std::shared_ptr<Sensor>> availableSensors);
|
||||
std::vector<std::shared_ptr<FanCurve>> DeserializeFanCurves(
|
||||
std::vector<std::shared_ptr<Sensor>> availableSensors,
|
||||
std::vector<std::shared_ptr<Fan>> availableFans);
|
||||
std::vector<std::shared_ptr<Fan>>
|
||||
DeserializeFans(std::vector<std::shared_ptr<Sensor>> availableSensors);
|
||||
std::vector<std::shared_ptr<FanCurve>>
|
||||
DeserializeFanCurves(std::vector<std::shared_ptr<Sensor>> availableSensors,
|
||||
std::vector<std::shared_ptr<Fan>> availableFans,
|
||||
bool &everythingFound);
|
||||
std::shared_ptr<Settings> DeserializeSettings();
|
||||
|
||||
private:
|
||||
|
||||
@@ -22,6 +22,8 @@ public:
|
||||
|
||||
virtual void FindPWMLimits() = 0;
|
||||
virtual void AdjustPWMLimits() = 0;
|
||||
|
||||
virtual void EnforceSetValue() = 0;
|
||||
};
|
||||
|
||||
#endif // FAN_H_
|
||||
|
||||
@@ -8,30 +8,32 @@
|
||||
#include <fan/HwmonFan.h>
|
||||
#include <sensor/Sensor.h>
|
||||
|
||||
struct FanStep
|
||||
{
|
||||
struct FanStep {
|
||||
int Temp;
|
||||
int Percent;
|
||||
};
|
||||
|
||||
class FanCurve
|
||||
{
|
||||
class FanCurve {
|
||||
public:
|
||||
FanCurve(std::vector<FanStep> steps,
|
||||
std::vector<std::shared_ptr<Sensor>> sensors,
|
||||
std::vector<std::shared_ptr<Fan>> fans,
|
||||
std::unique_ptr<Aggregator> aggregator);
|
||||
std::unique_ptr<Aggregator> aggregator, int hysteresis);
|
||||
|
||||
void DoFanControl();
|
||||
|
||||
private:
|
||||
int AggregateTemperature();
|
||||
void PrintInfo();
|
||||
bool ExceedsHysteresis(int temperature);
|
||||
void ApplyFanPower(std::shared_ptr<Fan> fan, int targetFanPower);
|
||||
|
||||
std::vector<FanStep> mSteps;
|
||||
std::vector<std::shared_ptr<Sensor>> mTempSensors;
|
||||
std::vector<std::shared_ptr<Fan>> mFans;
|
||||
std::unique_ptr<Aggregator> mAggregator;
|
||||
int mHystersis;
|
||||
int mLastTemperature;
|
||||
};
|
||||
|
||||
#endif // FANCURVE_H_
|
||||
|
||||
@@ -30,11 +30,16 @@ public:
|
||||
void FindPWMLimits() override;
|
||||
void AdjustPWMLimits() override;
|
||||
|
||||
void EnforceSetValue() override;
|
||||
|
||||
json toJson() const override;
|
||||
|
||||
const std::string toString() const override;
|
||||
|
||||
private:
|
||||
bool InhibitStopPeriodExpired();
|
||||
void SetPower(int percent);
|
||||
|
||||
std::shared_ptr<PWMControl> mPWMControl;
|
||||
std::shared_ptr<Sensor> mRpmSensor;
|
||||
std::string mLabel;
|
||||
@@ -43,6 +48,9 @@ private:
|
||||
int mStartPWM = 0;
|
||||
bool mZeroFanModeSupported = false;
|
||||
std::chrono::time_point<std::chrono::steady_clock> mLastAdjustmentTime;
|
||||
std::chrono::time_point<std::chrono::steady_clock> mLastStartTime;
|
||||
int mSetValue = 0;
|
||||
bool mWasStopped = false;
|
||||
};
|
||||
|
||||
#endif // HWMONFAN_H_
|
||||
|
||||
@@ -26,8 +26,6 @@ public:
|
||||
json toJson() const override;
|
||||
|
||||
private:
|
||||
int mCurrentValue;
|
||||
|
||||
std::string mControlPath;
|
||||
std::string mEnablePath;
|
||||
std::string mModePath;
|
||||
|
||||
@@ -16,9 +16,13 @@ public:
|
||||
std::vector<std::shared_ptr<Sensor>> TemperatureSensors();
|
||||
std::vector<std::shared_ptr<Sensor>> RPMSensors();
|
||||
|
||||
void ReloadSensors();
|
||||
|
||||
private:
|
||||
template <sensors_subfeature_type T>
|
||||
std::vector<std::shared_ptr<Sensor>> Sensors();
|
||||
void InitSensors();
|
||||
void CleanupSensors();
|
||||
|
||||
private:
|
||||
FILE *mConfigFile;
|
||||
|
||||
@@ -12,6 +12,8 @@ public:
|
||||
std::vector<std::shared_ptr<Sensor>> TemperatureSensors();
|
||||
std::vector<std::shared_ptr<Sensor>> RPMSensors();
|
||||
|
||||
void ReloadSensors();
|
||||
|
||||
private:
|
||||
std::unique_ptr<LMSensorsFacade> mLMSensorsFacade;
|
||||
std::unique_ptr<GPUSensorsFacade> mGPUSensorsFacade;
|
||||
|
||||
Reference in New Issue
Block a user