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