1 #pragma once 2 3 #include <memory> 4 #include <mutex> 5 6 #include <sdbusplus/bus.hpp> 7 #include <sdbusplus/server.hpp> 8 #include "xyz/openbmc_project/Sensor/Value/server.hpp" 9 10 #include "sensor.hpp" 11 12 template <typename... T> 13 using ServerObject = typename sdbusplus::server::object::object<T...>; 14 15 using ValueInterface = sdbusplus::xyz::openbmc_project::Sensor::server::Value; 16 using ValueObject = ServerObject<ValueInterface>; 17 18 /* 19 * HostSensor object is a Sensor derivative that also implements a ValueObject, 20 * which comes from the dbus as an object that implements Sensor.Value. 21 */ 22 class HostSensor : public Sensor, public ValueObject 23 { 24 public: 25 static std::unique_ptr<Sensor> CreateTemp( 26 const std::string& name, 27 int64_t timeout, 28 sdbusplus::bus::bus& bus, 29 const char* objPath, 30 bool defer); 31 32 HostSensor(const std::string& name, 33 int64_t timeout, 34 sdbusplus::bus::bus& bus, 35 const char* objPath, 36 bool defer) 37 : Sensor(name, timeout), 38 ValueObject(bus, objPath, defer) 39 { } 40 41 /* Note: This must be int64_t because it's from ValueObject */ 42 int64_t value(int64_t value) override; 43 44 ReadReturn read(void) override; 45 void write(double value) override; 46 47 private: 48 /* 49 * _lock will be used to make sure _updated & _value are updated 50 * together. 51 */ 52 std::mutex _lock; 53 std::chrono::high_resolution_clock::time_point _updated; 54 double _value = 0; 55 }; 56 57