1*d7be555eSGeorge Liu #pragma once 2*d7be555eSGeorge Liu 3*d7be555eSGeorge Liu #include <boost/asio/io_context.hpp> 4*d7be555eSGeorge Liu #include <boost/asio/steady_timer.hpp> 5*d7be555eSGeorge Liu #include <gpiod.hpp> 6*d7be555eSGeorge Liu #include <sdbusplus/asio/object_server.hpp> 7*d7be555eSGeorge Liu 8*d7be555eSGeorge Liu #include <memory> 9*d7be555eSGeorge Liu #include <string> 10*d7be555eSGeorge Liu 11*d7be555eSGeorge Liu namespace fs = std::filesystem; 12*d7be555eSGeorge Liu 13*d7be555eSGeorge Liu class ChassisIntrusionSensor 14*d7be555eSGeorge Liu { 15*d7be555eSGeorge Liu public: 16*d7be555eSGeorge Liu explicit ChassisIntrusionSensor(bool autoRearm, 17*d7be555eSGeorge Liu sdbusplus::asio::object_server& objServer); 18*d7be555eSGeorge Liu 19*d7be555eSGeorge Liu virtual ~ChassisIntrusionSensor(); 20*d7be555eSGeorge Liu 21*d7be555eSGeorge Liu void start(); 22*d7be555eSGeorge Liu 23*d7be555eSGeorge Liu protected: 24*d7be555eSGeorge Liu virtual int readSensor() = 0; 25*d7be555eSGeorge Liu virtual void pollSensorStatus() = 0; 26*d7be555eSGeorge Liu void updateValue(const size_t& value); 27*d7be555eSGeorge Liu 28*d7be555eSGeorge Liu private: 29*d7be555eSGeorge Liu std::string mValue; 30*d7be555eSGeorge Liu // If this sensor uses automatic rearm method. Otherwise, manually rearm it 31*d7be555eSGeorge Liu bool mAutoRearm; 32*d7be555eSGeorge Liu std::shared_ptr<sdbusplus::asio::dbus_interface> mIface; 33*d7be555eSGeorge Liu sdbusplus::asio::object_server& mObjServer; 34*d7be555eSGeorge Liu bool mOverridenState = false; 35*d7be555eSGeorge Liu bool mInternalSet = false; 36*d7be555eSGeorge Liu bool mRearmFlag = false; 37*d7be555eSGeorge Liu 38*d7be555eSGeorge Liu int setSensorValue(const std::string& req, std::string& propertyValue); 39*d7be555eSGeorge Liu }; 40*d7be555eSGeorge Liu 41*d7be555eSGeorge Liu class ChassisIntrusionPchSensor : 42*d7be555eSGeorge Liu public ChassisIntrusionSensor, 43*d7be555eSGeorge Liu public std::enable_shared_from_this<ChassisIntrusionPchSensor> 44*d7be555eSGeorge Liu { 45*d7be555eSGeorge Liu public: 46*d7be555eSGeorge Liu ChassisIntrusionPchSensor(bool autoRearm, boost::asio::io_context& io, 47*d7be555eSGeorge Liu sdbusplus::asio::object_server& objServer, 48*d7be555eSGeorge Liu int busId, int slaveAddr); 49*d7be555eSGeorge Liu 50*d7be555eSGeorge Liu ~ChassisIntrusionPchSensor() override; 51*d7be555eSGeorge Liu 52*d7be555eSGeorge Liu private: 53*d7be555eSGeorge Liu int mBusFd{-1}; 54*d7be555eSGeorge Liu int mSlaveAddr{-1}; 55*d7be555eSGeorge Liu boost::asio::steady_timer mPollTimer; 56*d7be555eSGeorge Liu int readSensor() override; 57*d7be555eSGeorge Liu void pollSensorStatus() override; 58*d7be555eSGeorge Liu }; 59*d7be555eSGeorge Liu 60*d7be555eSGeorge Liu class ChassisIntrusionGpioSensor : 61*d7be555eSGeorge Liu public ChassisIntrusionSensor, 62*d7be555eSGeorge Liu public std::enable_shared_from_this<ChassisIntrusionGpioSensor> 63*d7be555eSGeorge Liu { 64*d7be555eSGeorge Liu public: 65*d7be555eSGeorge Liu ChassisIntrusionGpioSensor(bool autoRearm, boost::asio::io_context& io, 66*d7be555eSGeorge Liu sdbusplus::asio::object_server& objServer, 67*d7be555eSGeorge Liu bool gpioInverted); 68*d7be555eSGeorge Liu 69*d7be555eSGeorge Liu ~ChassisIntrusionGpioSensor() override; 70*d7be555eSGeorge Liu 71*d7be555eSGeorge Liu private: 72*d7be555eSGeorge Liu bool mGpioInverted{false}; 73*d7be555eSGeorge Liu std::string mPinName = "CHASSIS_INTRUSION"; 74*d7be555eSGeorge Liu gpiod::line mGpioLine; 75*d7be555eSGeorge Liu boost::asio::posix::stream_descriptor mGpioFd; 76*d7be555eSGeorge Liu int readSensor() override; 77*d7be555eSGeorge Liu void pollSensorStatus() override; 78*d7be555eSGeorge Liu }; 79*d7be555eSGeorge Liu 80*d7be555eSGeorge Liu class ChassisIntrusionHwmonSensor : 81*d7be555eSGeorge Liu public ChassisIntrusionSensor, 82*d7be555eSGeorge Liu public std::enable_shared_from_this<ChassisIntrusionHwmonSensor> 83*d7be555eSGeorge Liu { 84*d7be555eSGeorge Liu public: 85*d7be555eSGeorge Liu ChassisIntrusionHwmonSensor(bool autoRearm, boost::asio::io_context& io, 86*d7be555eSGeorge Liu sdbusplus::asio::object_server& objServer, 87*d7be555eSGeorge Liu std::string hwmonName); 88*d7be555eSGeorge Liu 89*d7be555eSGeorge Liu ~ChassisIntrusionHwmonSensor() override; 90*d7be555eSGeorge Liu 91*d7be555eSGeorge Liu private: 92*d7be555eSGeorge Liu std::string mHwmonName; 93*d7be555eSGeorge Liu std::string mHwmonPath; 94*d7be555eSGeorge Liu boost::asio::steady_timer mPollTimer; 95*d7be555eSGeorge Liu int readSensor() override; 96*d7be555eSGeorge Liu void pollSensorStatus() override; 97*d7be555eSGeorge Liu }; 98