blob: f5b129414029fee583b8e5b851e58edf17553a4a [file] [log] [blame]
George Liub49b7d82021-02-08 14:10:17 +08001#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
12using namespace pldm::dbus_api;
13
14namespace pldm
15{
16namespace led
17{
18
19using LEDGroupObj = sdbusplus::server::object_t<
20 sdbusplus::xyz::openbmc_project::Led::server::Group>;
21
22class 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 */
34class 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) :
Patrick Williams16c2a0a2024-08-16 15:20:59 -040058 LEDGroupObj(bus, objPath.c_str()), path(objPath), mctp_eid(mctp_eid),
59 instanceIdDb(instanceIdDb), pdrRepo(repo), handler(handler)
George Liub49b7d82021-02-08 14:10:17 +080060 {}
61
62 /** @brief Property SET Override function
63 *
64 * @param[in] value - True or False
65 * @return - Success or exception thrown
66 */
67 bool asserted(bool value) override;
68
69 /** @brief Property GET Override function
70 *
71 * @return - True or False
72 */
73 bool asserted() const override;
74
75 /** @brief Get effecterID from PDRs.
76 *
77 * @return effecterID
78 */
79 uint16_t getEffecterID() override;
80
81 /** @brief Set state effecter states to PHYP.
82 *
83 * @param[in] effecterID - effecterID
84 *
85 * @return rc - PLDM completion codes
86 */
87 uint8_t setHostStateEffecter(uint16_t effecterID) override;
88
89 private:
90 /** @brief Path of the group instance */
91 std::string path;
92
93 /** @brief MCTP EID of host firmware */
94 uint8_t mctp_eid;
95
96 /** @brief Reference to the InstanceIdDb object to obtain instance id
97 */
98 pldm::InstanceIdDb& instanceIdDb;
99
100 /** @brief pointer to BMC's primary PDR repo */
101 const pldm_pdr* pdrRepo;
102
103 /** @brief Effecter ID */
104 uint16_t effecterID = 0;
105
106 /** @brief PLDM request handler */
107 pldm::requester::Handler<pldm::requester::Request>* handler;
108};
109
110} // namespace led
111} // namespace pldm