1*b49b7d80SGeorge Liu #pragma once 2*b49b7d80SGeorge Liu 3*b49b7d80SGeorge Liu #include "pldmd/dbus_impl_pdr.hpp" 4*b49b7d80SGeorge Liu #include "pldmd/dbus_impl_requester.hpp" 5*b49b7d80SGeorge Liu #include "requester/handler.hpp" 6*b49b7d80SGeorge Liu 7*b49b7d80SGeorge Liu #include <sdbusplus/server/object.hpp> 8*b49b7d80SGeorge Liu #include <xyz/openbmc_project/Led/Group/server.hpp> 9*b49b7d80SGeorge Liu 10*b49b7d80SGeorge Liu #include <string> 11*b49b7d80SGeorge Liu 12*b49b7d80SGeorge Liu using namespace pldm::dbus_api; 13*b49b7d80SGeorge Liu 14*b49b7d80SGeorge Liu namespace pldm 15*b49b7d80SGeorge Liu { 16*b49b7d80SGeorge Liu namespace led 17*b49b7d80SGeorge Liu { 18*b49b7d80SGeorge Liu 19*b49b7d80SGeorge Liu using LEDGroupObj = sdbusplus::server::object_t< 20*b49b7d80SGeorge Liu sdbusplus::xyz::openbmc_project::Led::server::Group>; 21*b49b7d80SGeorge Liu 22*b49b7d80SGeorge Liu class HostLampTestInterfaces 23*b49b7d80SGeorge Liu { 24*b49b7d80SGeorge Liu public: 25*b49b7d80SGeorge Liu virtual ~HostLampTestInterfaces() {} 26*b49b7d80SGeorge Liu 27*b49b7d80SGeorge Liu virtual uint16_t getEffecterID() = 0; 28*b49b7d80SGeorge Liu virtual uint8_t setHostStateEffecter(uint16_t effecterID) = 0; 29*b49b7d80SGeorge Liu }; 30*b49b7d80SGeorge Liu 31*b49b7d80SGeorge Liu /** @class HostLampTest 32*b49b7d80SGeorge Liu * @brief Manages group of Host lamp test LEDs 33*b49b7d80SGeorge Liu */ 34*b49b7d80SGeorge Liu class HostLampTest : public HostLampTestInterfaces, public LEDGroupObj 35*b49b7d80SGeorge Liu { 36*b49b7d80SGeorge Liu public: 37*b49b7d80SGeorge Liu HostLampTest() = delete; 38*b49b7d80SGeorge Liu ~HostLampTest() = default; 39*b49b7d80SGeorge Liu HostLampTest(const HostLampTest&) = delete; 40*b49b7d80SGeorge Liu HostLampTest& operator=(const HostLampTest&) = delete; 41*b49b7d80SGeorge Liu HostLampTest(HostLampTest&&) = delete; 42*b49b7d80SGeorge Liu HostLampTest& operator=(HostLampTest&&) = delete; 43*b49b7d80SGeorge Liu 44*b49b7d80SGeorge Liu /** @brief Constructs LED Group 45*b49b7d80SGeorge Liu * 46*b49b7d80SGeorge Liu * @param[in] bus - Handle to system dbus 47*b49b7d80SGeorge Liu * @param[in] objPath - The D-Bus path that hosts LED group 48*b49b7d80SGeorge Liu * @param[in] mctp_fd - MCTP file descriptor 49*b49b7d80SGeorge Liu * @param[in] mctp_eid - MCTP EID 50*b49b7d80SGeorge Liu * @param[in] instanceIdDb - InstanceIdDb object to obtain instance id 51*b49b7d80SGeorge Liu * @param[in] repo - pointer to BMC's primary PDR repo 52*b49b7d80SGeorge Liu * @param[in] handler - PLDM request handler 53*b49b7d80SGeorge Liu */ 54*b49b7d80SGeorge Liu HostLampTest(sdbusplus::bus_t& bus, const std::string& objPath, 55*b49b7d80SGeorge Liu uint8_t mctp_eid, pldm::InstanceIdDb& instanceIdDb, 56*b49b7d80SGeorge Liu pldm_pdr* repo, 57*b49b7d80SGeorge Liu pldm::requester::Handler<pldm::requester::Request>* handler) : 58*b49b7d80SGeorge Liu LEDGroupObj(bus, objPath.c_str()), 59*b49b7d80SGeorge Liu path(objPath), mctp_eid(mctp_eid), instanceIdDb(instanceIdDb), 60*b49b7d80SGeorge Liu pdrRepo(repo), handler(handler) 61*b49b7d80SGeorge Liu {} 62*b49b7d80SGeorge Liu 63*b49b7d80SGeorge Liu /** @brief Property SET Override function 64*b49b7d80SGeorge Liu * 65*b49b7d80SGeorge Liu * @param[in] value - True or False 66*b49b7d80SGeorge Liu * @return - Success or exception thrown 67*b49b7d80SGeorge Liu */ 68*b49b7d80SGeorge Liu bool asserted(bool value) override; 69*b49b7d80SGeorge Liu 70*b49b7d80SGeorge Liu /** @brief Property GET Override function 71*b49b7d80SGeorge Liu * 72*b49b7d80SGeorge Liu * @return - True or False 73*b49b7d80SGeorge Liu */ 74*b49b7d80SGeorge Liu bool asserted() const override; 75*b49b7d80SGeorge Liu 76*b49b7d80SGeorge Liu /** @brief Get effecterID from PDRs. 77*b49b7d80SGeorge Liu * 78*b49b7d80SGeorge Liu * @return effecterID 79*b49b7d80SGeorge Liu */ 80*b49b7d80SGeorge Liu uint16_t getEffecterID() override; 81*b49b7d80SGeorge Liu 82*b49b7d80SGeorge Liu /** @brief Set state effecter states to PHYP. 83*b49b7d80SGeorge Liu * 84*b49b7d80SGeorge Liu * @param[in] effecterID - effecterID 85*b49b7d80SGeorge Liu * 86*b49b7d80SGeorge Liu * @return rc - PLDM completion codes 87*b49b7d80SGeorge Liu */ 88*b49b7d80SGeorge Liu uint8_t setHostStateEffecter(uint16_t effecterID) override; 89*b49b7d80SGeorge Liu 90*b49b7d80SGeorge Liu private: 91*b49b7d80SGeorge Liu /** @brief Path of the group instance */ 92*b49b7d80SGeorge Liu std::string path; 93*b49b7d80SGeorge Liu 94*b49b7d80SGeorge Liu /** @brief MCTP EID of host firmware */ 95*b49b7d80SGeorge Liu uint8_t mctp_eid; 96*b49b7d80SGeorge Liu 97*b49b7d80SGeorge Liu /** @brief Reference to the InstanceIdDb object to obtain instance id 98*b49b7d80SGeorge Liu */ 99*b49b7d80SGeorge Liu pldm::InstanceIdDb& instanceIdDb; 100*b49b7d80SGeorge Liu 101*b49b7d80SGeorge Liu /** @brief pointer to BMC's primary PDR repo */ 102*b49b7d80SGeorge Liu const pldm_pdr* pdrRepo; 103*b49b7d80SGeorge Liu 104*b49b7d80SGeorge Liu /** @brief Effecter ID */ 105*b49b7d80SGeorge Liu uint16_t effecterID = 0; 106*b49b7d80SGeorge Liu 107*b49b7d80SGeorge Liu /** @brief PLDM request handler */ 108*b49b7d80SGeorge Liu pldm::requester::Handler<pldm::requester::Request>* handler; 109*b49b7d80SGeorge Liu }; 110*b49b7d80SGeorge Liu 111*b49b7d80SGeorge Liu } // namespace led 112*b49b7d80SGeorge Liu } // namespace pldm 113