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