#pragma once #include #include #include "sensor_base.hpp" namespace phosphor { namespace fan { namespace presence { class TachSensor : public Sensor { public: TachSensor() = delete; TachSensor(const TachSensor&) = delete; TachSensor(TachSensor&&) = delete; TachSensor& operator=(const TachSensor&) = delete; TachSensor& operator=(TachSensor&&) = delete; ~TachSensor() = default; TachSensor( sdbusplus::bus::bus& bus, const std::string& id, FanEnclosure& fanEnc) : Sensor(id, fanEnc), bus(bus), tachSignal(bus, match(id).c_str(), handleTachChangeSignal, this) { // Nothing to do here } bool isPresent(); private: sdbusplus::bus::bus& bus; sdbusplus::server::match::match tachSignal; int64_t tach = 0; static std::string match(std::string id) { return std::string("type='signal'," "interface='org.freedesktop.DBus.Properties'," "member='PropertiesChanged'," "path='/xyz/openbmc_project/sensors/fan_tach/" + id + "'"); } // Tach signal callback handler static int handleTachChangeSignal(sd_bus_message* msg, void* data, sd_bus_error* err); void handleTachChange(sdbusplus::message::message& msg, sd_bus_error* err); }; } // namespace presence } // namespace fan } // namespace phosphor