blob: 3d78bfa1a20f005e1d17e7465492a54d905aec75 [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 Feistd7ae29a2020-06-25 15:42:46 -070032enum class ReadingFormat
33{
34 byte0,
35 byte3,
36 elevenBit,
37 elevenBitShift,
38};
39
James Feist6ef20402019-01-07 16:45:08 -080040struct IpmbSensor : public Sensor
41{
James Feistd8705872019-02-08 13:26:09 -080042 IpmbSensor(std::shared_ptr<sdbusplus::asio::connection>& conn,
43 boost::asio::io_service& io, const std::string& name,
44 const std::string& sensorConfiguration,
45 sdbusplus::asio::object_server& objectServer,
46 std::vector<thresholds::Threshold>&& thresholds,
Vijay Khemka682a5cb2019-07-18 17:34:03 -070047 uint8_t deviceAddress, std::string& sensorTypeName);
James Feist6ef20402019-01-07 16:45:08 -080048 ~IpmbSensor();
49
50 void checkThresholds(void) override;
51 void read(void);
52 void init(void);
53 void loadDefaults(void);
James Feistf7e2c5d2019-02-13 17:27:51 -080054 void runInitCmd(void);
James Feist551087a2019-12-09 11:17:12 -080055 void processError(void);
James Feistd7ae29a2020-06-25 15:42:46 -070056 double processReading(const std::vector<uint8_t>& data);
James Feist6ef20402019-01-07 16:45:08 -080057
58 IpmbType type;
Vijay Khemka682a5cb2019-07-18 17:34:03 -070059 IpmbSubType subType;
60 double scaleVal;
61 double offsetVal;
James Feist6ef20402019-01-07 16:45:08 -080062 uint8_t commandAddress;
63 uint8_t netfn;
64 uint8_t command;
65 uint8_t deviceAddress;
James Feist551087a2019-12-09 11:17:12 -080066 uint8_t errorCount;
James Feist6ef20402019-01-07 16:45:08 -080067 std::vector<uint8_t> commandData;
68 std::optional<uint8_t> initCommand;
69 std::vector<uint8_t> initData;
70
71 // to date all ipmb sensors are power on only
James Feist52497fd2019-06-07 13:01:33 -070072 PowerState readState;
James Feistd7ae29a2020-06-25 15:42:46 -070073 ReadingFormat readingFormat;
James Feist6ef20402019-01-07 16:45:08 -080074
75 private:
James Feistd8705872019-02-08 13:26:09 -080076 sdbusplus::asio::object_server& objectServer;
James Feist6ef20402019-01-07 16:45:08 -080077 std::shared_ptr<sdbusplus::asio::connection> dbusConnection;
78 boost::asio::deadline_timer waitTimer;
Vijay Khemka682a5cb2019-07-18 17:34:03 -070079};