blob: e1b1ddb35862b5bf5b1897483ec2f22d2e1a68c1 [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 Feist961bf092020-07-01 16:38:12 -070055 bool processReading(const std::vector<uint8_t>& data, double& resp);
James Feist6ef20402019-01-07 16:45:08 -080056
57 IpmbType type;
Vijay Khemka682a5cb2019-07-18 17:34:03 -070058 IpmbSubType subType;
59 double scaleVal;
60 double offsetVal;
James Feist6ef20402019-01-07 16:45:08 -080061 uint8_t commandAddress;
62 uint8_t netfn;
63 uint8_t command;
64 uint8_t deviceAddress;
James Feist551087a2019-12-09 11:17:12 -080065 uint8_t errorCount;
James Feist6ef20402019-01-07 16:45:08 -080066 std::vector<uint8_t> commandData;
67 std::optional<uint8_t> initCommand;
68 std::vector<uint8_t> initData;
69
James Feistd7ae29a2020-06-25 15:42:46 -070070 ReadingFormat readingFormat;
James Feist6ef20402019-01-07 16:45:08 -080071
72 private:
James Feistd8705872019-02-08 13:26:09 -080073 sdbusplus::asio::object_server& objectServer;
James Feist6ef20402019-01-07 16:45:08 -080074 std::shared_ptr<sdbusplus::asio::connection> dbusConnection;
75 boost::asio::deadline_timer waitTimer;
Vijay Khemka682a5cb2019-07-18 17:34:03 -070076};