diff options
Diffstat (limited to 'pid')
-rw-r--r-- | pid/controller.hpp | 6 | ||||
-rw-r--r-- | pid/fancontroller.cpp | 4 | ||||
-rw-r--r-- | pid/fancontroller.hpp | 4 | ||||
-rw-r--r-- | pid/thermalcontroller.cpp | 2 | ||||
-rw-r--r-- | pid/thermalcontroller.hpp | 4 | ||||
-rw-r--r-- | pid/zone.cpp | 6 | ||||
-rw-r--r-- | pid/zone.hpp | 27 |
7 files changed, 33 insertions, 20 deletions
diff --git a/pid/controller.hpp b/pid/controller.hpp index d02f9cc..fa89ad1 100644 --- a/pid/controller.hpp +++ b/pid/controller.hpp @@ -6,7 +6,7 @@ #include "fan.hpp" #include "ec/pid.hpp" -class PIDZone; +class ZoneInterface; /* * Base class for PID controllers. Each PID that implements this needs to @@ -15,7 +15,7 @@ class PIDZone; class PIDController { public: - PIDController(const std::string& id, PIDZone* owner) + PIDController(const std::string& id, ZoneInterface* owner) : _owner(owner), _id(id) { } @@ -47,7 +47,7 @@ class PIDController } protected: - PIDZone* _owner; + ZoneInterface* _owner; private: // parameters diff --git a/pid/fancontroller.cpp b/pid/fancontroller.cpp index 340c6d0..c2dee74 100644 --- a/pid/fancontroller.cpp +++ b/pid/fancontroller.cpp @@ -22,7 +22,7 @@ #include "zone.hpp" std::unique_ptr<PIDController> FanController::CreateFanPid( - PIDZone* owner, + ZoneInterface* owner, const std::string& id, std::vector<std::string>& inputs, ec::pidinfo initial) @@ -133,7 +133,7 @@ void FanController::output_proc(float value) // PidSensorMap for writing. for (auto& it : _inputs) { - auto& sensor = _owner->getSensor(it); + auto sensor = _owner->getSensor(it); sensor->write(static_cast<double>(percent)); } diff --git a/pid/fancontroller.hpp b/pid/fancontroller.hpp index b627915..b9b015c 100644 --- a/pid/fancontroller.hpp +++ b/pid/fancontroller.hpp @@ -18,14 +18,14 @@ class FanController : public PIDController { public: static std::unique_ptr<PIDController> CreateFanPid( - PIDZone* owner, + ZoneInterface* owner, const std::string& id, std::vector<std::string>& inputs, ec::pidinfo initial); FanController(const std::string& id, std::vector<std::string>& inputs, - PIDZone* owner) + ZoneInterface* owner) : PIDController(id, owner), _inputs(inputs), _direction(FanSpeedDirection::NEUTRAL) diff --git a/pid/thermalcontroller.cpp b/pid/thermalcontroller.cpp index 61e5ca9..dee2d4e 100644 --- a/pid/thermalcontroller.cpp +++ b/pid/thermalcontroller.cpp @@ -20,7 +20,7 @@ std::unique_ptr<PIDController> ThermalController::CreateThermalPid( - PIDZone* owner, + ZoneInterface* owner, const std::string& id, std::vector<std::string>& inputs, float setpoint, diff --git a/pid/thermalcontroller.hpp b/pid/thermalcontroller.hpp index dbfcfc9..32d4a7f 100644 --- a/pid/thermalcontroller.hpp +++ b/pid/thermalcontroller.hpp @@ -16,7 +16,7 @@ class ThermalController : public PIDController { public: static std::unique_ptr<PIDController> CreateThermalPid( - PIDZone* owner, + ZoneInterface* owner, const std::string& id, std::vector<std::string>& inputs, float setpoint, @@ -24,7 +24,7 @@ class ThermalController : public PIDController ThermalController(const std::string& id, std::vector<std::string>& inputs, - PIDZone* owner) + ZoneInterface* owner) : PIDController(id, owner), _inputs(inputs) { } diff --git a/pid/zone.cpp b/pid/zone.cpp index 26bff6a..fdf16fc 100644 --- a/pid/zone.cpp +++ b/pid/zone.cpp @@ -208,7 +208,7 @@ void PIDZone::updateFanTelemetry(void) for (auto& f : _fanInputs) { - auto& sensor = _mgr.getSensor(f); + auto sensor = _mgr.getSensor(f); ReadReturn r = sensor->read(); _cachedValuesByName[f] = r.value; @@ -240,7 +240,7 @@ void PIDZone::updateSensors(void) for (auto& t : _thermalInputs) { - auto& sensor = _mgr.getSensor(t); + auto sensor = _mgr.getSensor(t); ReadReturn r = sensor->read(); int64_t timeout = sensor->GetTimeout(); @@ -316,7 +316,7 @@ void PIDZone::process_thermals(void) } } -const std::unique_ptr<Sensor>& PIDZone::getSensor(std::string name) +Sensor* PIDZone::getSensor(std::string name) { return _mgr.getSensor(name); } diff --git a/pid/zone.hpp b/pid/zone.hpp index f6ee5e8..1934a66 100644 --- a/pid/zone.hpp +++ b/pid/zone.hpp @@ -23,12 +23,25 @@ using ModeInterface = sdbusplus::xyz::openbmc_project::Control::server::Mode; using ModeObject = ServerObject<ModeInterface>; +class ZoneInterface +{ + public: + virtual ~ZoneInterface() = default; + + virtual double getCachedValue(const std::string& name) = 0; + virtual void addRPMSetPoint(float setpoint) = 0; + virtual float getMaxRPMRequest() const = 0; + virtual bool getFailSafeMode() const = 0; + virtual float getFailSafePercent() const = 0; + virtual Sensor* getSensor(std::string name) = 0; +}; + /* * The PIDZone inherits from the Mode object so that it can listen for control * mode changes. It primarily holds all PID loops and holds the sensor value * cache that's used per iteration of the PID loops. */ -class PIDZone : public ModeObject +class PIDZone : public ZoneInterface, public ModeObject { public: PIDZone(int64_t zone, @@ -50,21 +63,21 @@ class PIDZone : public ModeObject #endif } - float getMaxRPMRequest(void) const; + float getMaxRPMRequest(void) const override; bool getManualMode(void) const; /* Could put lock around this since it's accessed from two threads, but * only one reader/one writer. */ void setManualMode(bool mode); - bool getFailSafeMode(void) const; + bool getFailSafeMode(void) const override; int64_t getZoneId(void) const; - void addRPMSetPoint(float setpoint); + void addRPMSetPoint(float setpoint) override; void clearRPMSetPoints(void); - float getFailSafePercent(void) const; + float getFailSafePercent(void) const override; float getMinThermalRpmSetPt(void) const; - const std::unique_ptr<Sensor>& getSensor(std::string name); + Sensor* getSensor(std::string name) override; void determineMaxRPMRequest(void); void updateFanTelemetry(void); void updateSensors(void); @@ -75,7 +88,7 @@ class PIDZone : public ModeObject void addFanPID(std::unique_ptr<PIDController> pid); void addThermalPID(std::unique_ptr<PIDController> pid); - double getCachedValue(const std::string& name); + double getCachedValue(const std::string& name) override; void addFanInput(std::string fan); void addThermalInput(std::string therm); |