xref: /openbmc/dbus-sensors/src/mcu/MCUTempSensor.hpp (revision d7be555ee0d885418e9a862b16565a0474c68d14)
1*d7be555eSGeorge Liu #pragma once
2*d7be555eSGeorge Liu #include <boost/asio/steady_timer.hpp>
3*d7be555eSGeorge Liu #include <boost/container/flat_map.hpp>
4*d7be555eSGeorge Liu #include <sensor.hpp>
5*d7be555eSGeorge Liu 
6*d7be555eSGeorge Liu #include <chrono>
7*d7be555eSGeorge Liu #include <limits>
8*d7be555eSGeorge Liu #include <memory>
9*d7be555eSGeorge Liu #include <string>
10*d7be555eSGeorge Liu #include <vector>
11*d7be555eSGeorge Liu 
12*d7be555eSGeorge Liu struct MCUTempSensor : public Sensor
13*d7be555eSGeorge Liu {
14*d7be555eSGeorge Liu     MCUTempSensor(std::shared_ptr<sdbusplus::asio::connection>& conn,
15*d7be555eSGeorge Liu                   boost::asio::io_context& io, const std::string& name,
16*d7be555eSGeorge Liu                   const std::string& sensorConfiguration,
17*d7be555eSGeorge Liu                   sdbusplus::asio::object_server& objectServer,
18*d7be555eSGeorge Liu                   std::vector<thresholds::Threshold>&& thresholdData,
19*d7be555eSGeorge Liu                   uint8_t busId, uint8_t mcuAddress, uint8_t tempReg);
20*d7be555eSGeorge Liu     ~MCUTempSensor() override;
21*d7be555eSGeorge Liu 
22*d7be555eSGeorge Liu     void checkThresholds() override;
23*d7be555eSGeorge Liu     void read();
24*d7be555eSGeorge Liu     void init();
25*d7be555eSGeorge Liu 
26*d7be555eSGeorge Liu     uint8_t busId;
27*d7be555eSGeorge Liu     uint8_t mcuAddress;
28*d7be555eSGeorge Liu     uint8_t tempReg;
29*d7be555eSGeorge Liu 
30*d7be555eSGeorge Liu   private:
31*d7be555eSGeorge Liu     int getMCURegsInfoWord(uint8_t regs, int32_t* pu32data) const;
32*d7be555eSGeorge Liu     sdbusplus::asio::object_server& objectServer;
33*d7be555eSGeorge Liu     boost::asio::steady_timer waitTimer;
34*d7be555eSGeorge Liu };
35