1 #pragma once 2 3 #include "libpldm/pdr.h" 4 #include "libpldm/platform.h" 5 6 #include "xyz/openbmc_project/PLDM/PDR/server.hpp" 7 8 #include <sdbusplus/bus.hpp> 9 #include <sdbusplus/server/object.hpp> 10 11 #include <vector> 12 13 namespace pldm 14 { 15 namespace dbus_api 16 { 17 18 using PdrIntf = sdbusplus::server::object::object< 19 sdbusplus::xyz::openbmc_project::PLDM::server::PDR>; 20 21 /** @class Pdr 22 * @brief OpenBMC PLDM.PDR Implementation 23 * @details A concrete implementation for the 24 * xyz.openbmc_project.PLDM.PDR DBus APIs. 25 */ 26 class Pdr : public PdrIntf 27 { 28 public: 29 Pdr() = delete; 30 Pdr(const Pdr&) = delete; 31 Pdr& operator=(const Pdr&) = delete; 32 Pdr(Pdr&&) = delete; 33 Pdr& operator=(Pdr&&) = delete; 34 virtual ~Pdr() = default; 35 36 /** @brief Constructor to put object onto bus at a dbus path. 37 * @param[in] bus - Bus to attach to. 38 * @param[in] path - Path to attach at. 39 * @param[in] repo - pointer to BMC's primary PDR repo 40 */ 41 Pdr(sdbusplus::bus::bus& bus, const std::string& path, 42 const pldm_pdr* repo) : 43 PdrIntf(bus, path.c_str()), 44 pdrRepo(repo){}; 45 46 /** @brief Implementation for PdrIntf.FindStateEffecterPDR 47 * @param[in] tid - PLDM terminus ID. 48 * @param[in] entityID - entity that can be associated with PLDM State set. 49 * @param[in] stateSetId - value that identifies PLDM State set. 50 */ 51 std::vector<std::vector<uint8_t>> 52 findStateEffecterPDR(uint8_t tid, uint16_t entityID, 53 uint16_t stateSetId) override; 54 55 /** @brief Implementation for PdrIntf.FindStateSensorPDR 56 * @param[in] tid - PLDM terminus ID. 57 * @param[in] entityID - entity that can be associated with PLDM State set. 58 * @param[in] stateSetId - value that identifies PLDM State set. 59 */ 60 std::vector<std::vector<uint8_t>> 61 findStateSensorPDR(uint8_t tid, uint16_t entityID, 62 uint16_t stateSetId) override; 63 64 private: 65 /** @brief pointer to BMC's primary PDR repo */ 66 const pldm_pdr* pdrRepo; 67 }; 68 69 } // namespace dbus_api 70 } // namespace pldm 71