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