blob: afc748b1f507ae621a8d0015b37c0bd5a9fc35f1 [file] [log] [blame]
Cheng C Yang209ec562019-03-12 16:37:44 +08001#pragma once
2
Cheng C Yang916360b2019-05-07 18:47:16 +08003#include <PwmSensor.hpp>
Cheng C Yang209ec562019-03-12 16:37:44 +08004#include <Thresholds.hpp>
5#include <sdbusplus/asio/object_server.hpp>
6#include <sensor.hpp>
7
Cheng C Yang209ec562019-03-12 16:37:44 +08008class PSUSensor : public Sensor
9{
10 public:
11 PSUSensor(const std::string& path, const std::string& objectType,
12 sdbusplus::asio::object_server& objectServer,
13 std::shared_ptr<sdbusplus::asio::connection>& conn,
14 boost::asio::io_service& io, const std::string& sensorName,
15 std::vector<thresholds::Threshold>&& thresholds,
16 const std::string& sensorConfiguration,
17 std::string& sensorTypeName, unsigned int factor, double max,
18 double min);
19 ~PSUSensor();
20
21 private:
22 sdbusplus::asio::object_server& objServer;
23 boost::asio::posix::stream_descriptor inputDev;
24 boost::asio::deadline_timer waitTimer;
25 boost::asio::streambuf readBuf;
26 int errCount;
27 unsigned int sensorFactor;
28 void setupRead(void);
29 void handleResponse(const boost::system::error_code& err);
30 void checkThresholds(void) override;
31
32 static constexpr unsigned int sensorPollMs = 500;
33 static constexpr size_t warnAfterErrorCount = 10;
34};
35
36class PSUProperty
37{
38 public:
39 PSUProperty(std::string name, double max, double min, unsigned int factor) :
Cheng C Yange50345b2019-04-02 17:26:15 +080040 labelTypeName(name), maxReading(max), minReading(min),
Cheng C Yang209ec562019-03-12 16:37:44 +080041 sensorScaleFactor(factor)
42 {
43 }
44 ~PSUProperty() = default;
45
Cheng C Yange50345b2019-04-02 17:26:15 +080046 std::string labelTypeName;
Cheng C Yang209ec562019-03-12 16:37:44 +080047 double maxReading;
48 double minReading;
49 unsigned int sensorScaleFactor;
50};