blob: 564a07049dec5918dbd1920e8e89fd64e992928b [file] [log] [blame]
James Feist6ef20402019-01-07 16:45:08 -08001#pragma once
2#include "sensor.hpp"
3
4#include <boost/asio/deadline_timer.hpp>
5#include <boost/container/flat_map.hpp>
James Feist38fb5982020-05-28 10:09:54 -07006
James Feist6ef20402019-01-07 16:45:08 -08007#include <chrono>
8#include <limits>
Patrick Venturefd6ba732019-10-31 14:27:39 -07009#include <memory>
10#include <optional>
11#include <string>
James Feist6ef20402019-01-07 16:45:08 -080012#include <vector>
13
14enum class IpmbType
15{
16 meSensor,
17 PXE1410CVR,
18 IR38363VR,
Vijay Khemka682a5cb2019-07-18 17:34:03 -070019 ADM1278HSC,
James Feist6ef20402019-01-07 16:45:08 -080020 mpsVR
21};
22
Vijay Khemka682a5cb2019-07-18 17:34:03 -070023enum class IpmbSubType
24{
25 temp,
26 curr,
27 power,
Adrian Ambrożewicz45e92772020-06-04 13:59:55 +020028 volt,
29 util
Vijay Khemka682a5cb2019-07-18 17:34:03 -070030};
31
James Feist6ef20402019-01-07 16:45:08 -080032struct IpmbSensor : public Sensor
33{
James Feistd8705872019-02-08 13:26:09 -080034 IpmbSensor(std::shared_ptr<sdbusplus::asio::connection>& conn,
35 boost::asio::io_service& io, const std::string& name,
36 const std::string& sensorConfiguration,
37 sdbusplus::asio::object_server& objectServer,
38 std::vector<thresholds::Threshold>&& thresholds,
Vijay Khemka682a5cb2019-07-18 17:34:03 -070039 uint8_t deviceAddress, std::string& sensorTypeName);
James Feist6ef20402019-01-07 16:45:08 -080040 ~IpmbSensor();
41
42 void checkThresholds(void) override;
43 void read(void);
44 void init(void);
45 void loadDefaults(void);
James Feistf7e2c5d2019-02-13 17:27:51 -080046 void runInitCmd(void);
James Feist551087a2019-12-09 11:17:12 -080047 void processError(void);
James Feist6ef20402019-01-07 16:45:08 -080048
49 IpmbType type;
Vijay Khemka682a5cb2019-07-18 17:34:03 -070050 IpmbSubType subType;
51 double scaleVal;
52 double offsetVal;
James Feist6ef20402019-01-07 16:45:08 -080053 uint8_t commandAddress;
54 uint8_t netfn;
55 uint8_t command;
56 uint8_t deviceAddress;
James Feist551087a2019-12-09 11:17:12 -080057 uint8_t errorCount;
James Feist6ef20402019-01-07 16:45:08 -080058 std::vector<uint8_t> commandData;
59 std::optional<uint8_t> initCommand;
60 std::vector<uint8_t> initData;
61
62 // to date all ipmb sensors are power on only
James Feist52497fd2019-06-07 13:01:33 -070063 PowerState readState;
James Feist6ef20402019-01-07 16:45:08 -080064
65 private:
James Feistd8705872019-02-08 13:26:09 -080066 sdbusplus::asio::object_server& objectServer;
James Feist6ef20402019-01-07 16:45:08 -080067 std::shared_ptr<sdbusplus::asio::connection> dbusConnection;
68 boost::asio::deadline_timer waitTimer;
Vijay Khemka682a5cb2019-07-18 17:34:03 -070069};