14d8d5770STom Joseph #pragma once 24d8d5770STom Joseph 34d8d5770STom Joseph #include <sdbusplus/bus.hpp> 44d8d5770STom Joseph #include <xyz/openbmc_project/Object/Delete/server.hpp> 54d8d5770STom Joseph #include <xyz/openbmc_project/Software/Activation/server.hpp> 64d8d5770STom Joseph #include <xyz/openbmc_project/Software/ActivationProgress/server.hpp> 74d8d5770STom Joseph 84d8d5770STom Joseph #include <string> 94d8d5770STom Joseph 104d8d5770STom Joseph namespace pldm 114d8d5770STom Joseph { 124d8d5770STom Joseph 134d8d5770STom Joseph namespace fw_update 144d8d5770STom Joseph { 154d8d5770STom Joseph 16f106a2c8SAndrew Jeffery class UpdateManager; 17f106a2c8SAndrew Jeffery 1884b790cbSPatrick Williams using ActivationIntf = sdbusplus::server::object_t< 194d8d5770STom Joseph sdbusplus::xyz::openbmc_project::Software::server::Activation>; 2084b790cbSPatrick Williams using ActivationProgressIntf = sdbusplus::server::object_t< 214d8d5770STom Joseph sdbusplus::xyz::openbmc_project::Software::server::ActivationProgress>; 2284b790cbSPatrick Williams using DeleteIntf = sdbusplus::server::object_t< 234d8d5770STom Joseph sdbusplus::xyz::openbmc_project::Object::server::Delete>; 244d8d5770STom Joseph 254d8d5770STom Joseph /** @class ActivationProgress 264d8d5770STom Joseph * 274d8d5770STom Joseph * Concrete implementation of xyz.openbmc_project.Software.ActivationProgress 284d8d5770STom Joseph * D-Bus interface 294d8d5770STom Joseph */ 304d8d5770STom Joseph class ActivationProgress : public ActivationProgressIntf 314d8d5770STom Joseph { 324d8d5770STom Joseph public: 334d8d5770STom Joseph /** @brief Constructor 344d8d5770STom Joseph * 354d8d5770STom Joseph * @param[in] bus - Bus to attach to 364d8d5770STom Joseph * @param[in] objPath - D-Bus object path 374d8d5770STom Joseph */ ActivationProgress(sdbusplus::bus_t & bus,const std::string & objPath)3884b790cbSPatrick Williams ActivationProgress(sdbusplus::bus_t& bus, const std::string& objPath) : 394d8d5770STom Joseph ActivationProgressIntf(bus, objPath.c_str(), 404d8d5770STom Joseph action::emit_interface_added) 414d8d5770STom Joseph { 424d8d5770STom Joseph progress(0); 434d8d5770STom Joseph } 444d8d5770STom Joseph }; 454d8d5770STom Joseph 464d8d5770STom Joseph /** @class Delete 474d8d5770STom Joseph * 484d8d5770STom Joseph * Concrete implementation of xyz.openbmc_project.Object.Delete D-Bus interface 494d8d5770STom Joseph */ 504d8d5770STom Joseph class Delete : public DeleteIntf 514d8d5770STom Joseph { 524d8d5770STom Joseph public: 534d8d5770STom Joseph /** @brief Constructor 544d8d5770STom Joseph * 554d8d5770STom Joseph * @param[in] bus - Bus to attach to 564d8d5770STom Joseph * @param[in] objPath - D-Bus object path 574d8d5770STom Joseph * @param[in] updateManager - Reference to FW update manager 584d8d5770STom Joseph */ Delete(sdbusplus::bus_t & bus,const std::string & objPath,UpdateManager * updateManager)5984b790cbSPatrick Williams Delete(sdbusplus::bus_t& bus, const std::string& objPath, 604d8d5770STom Joseph UpdateManager* updateManager) : 614d8d5770STom Joseph DeleteIntf(bus, objPath.c_str(), action::emit_interface_added), 624d8d5770STom Joseph updateManager(updateManager) 634d8d5770STom Joseph {} 644d8d5770STom Joseph 654d8d5770STom Joseph /** @brief Delete the Activation D-Bus object for the FW update package */ 66f106a2c8SAndrew Jeffery void delete_() override; 674d8d5770STom Joseph 684d8d5770STom Joseph private: 694d8d5770STom Joseph UpdateManager* updateManager; 704d8d5770STom Joseph }; 714d8d5770STom Joseph 724d8d5770STom Joseph /** @class Activation 734d8d5770STom Joseph * 744d8d5770STom Joseph * Concrete implementation of xyz.openbmc_project.Object.Activation D-Bus 754d8d5770STom Joseph * interface 764d8d5770STom Joseph */ 774d8d5770STom Joseph class Activation : public ActivationIntf 784d8d5770STom Joseph { 794d8d5770STom Joseph public: 804d8d5770STom Joseph /** @brief Constructor 814d8d5770STom Joseph * 824d8d5770STom Joseph * @param[in] bus - Bus to attach to 834d8d5770STom Joseph * @param[in] objPath - D-Bus object path 844d8d5770STom Joseph * @param[in] updateManager - Reference to FW update manager 854d8d5770STom Joseph */ Activation(sdbusplus::bus_t & bus,std::string objPath,Activations activationStatus,UpdateManager * updateManager)8684b790cbSPatrick Williams Activation(sdbusplus::bus_t& bus, std::string objPath, 874d8d5770STom Joseph Activations activationStatus, UpdateManager* updateManager) : 88357b72dcSPatrick Williams ActivationIntf(bus, objPath.c_str(), 89357b72dcSPatrick Williams ActivationIntf::action::defer_emit), 904d8d5770STom Joseph bus(bus), objPath(objPath), updateManager(updateManager) 914d8d5770STom Joseph { 924d8d5770STom Joseph activation(activationStatus); 934d8d5770STom Joseph deleteImpl = std::make_unique<Delete>(bus, objPath, updateManager); 944d8d5770STom Joseph emit_object_added(); 954d8d5770STom Joseph } 964d8d5770STom Joseph 974d8d5770STom Joseph using sdbusplus::xyz::openbmc_project::Software::server::Activation:: 984d8d5770STom Joseph activation; 994d8d5770STom Joseph using sdbusplus::xyz::openbmc_project::Software::server::Activation:: 1004d8d5770STom Joseph requestedActivation; 1014d8d5770STom Joseph 1024d8d5770STom Joseph /** @brief Overriding Activation property setter function 1034d8d5770STom Joseph */ 104f106a2c8SAndrew Jeffery Activations activation(Activations value) override; 1054d8d5770STom Joseph 1064d8d5770STom Joseph /** @brief Overriding RequestedActivations property setter function 1074d8d5770STom Joseph */ requestedActivation(RequestedActivations value)108*366507c8SPatrick Williams RequestedActivations requestedActivation( 109*366507c8SPatrick Williams RequestedActivations value) override 1104d8d5770STom Joseph { 1114d8d5770STom Joseph if ((value == RequestedActivations::Active) && 1124d8d5770STom Joseph (requestedActivation() != RequestedActivations::Active)) 1134d8d5770STom Joseph { 1144d8d5770STom Joseph if ((ActivationIntf::activation() == Activations::Ready)) 1154d8d5770STom Joseph { 1164d8d5770STom Joseph activation(Activations::Activating); 1174d8d5770STom Joseph } 1184d8d5770STom Joseph } 1194d8d5770STom Joseph return ActivationIntf::requestedActivation(value); 1204d8d5770STom Joseph } 1214d8d5770STom Joseph 1224d8d5770STom Joseph private: 12384b790cbSPatrick Williams sdbusplus::bus_t& bus; 1244d8d5770STom Joseph const std::string objPath; 1254d8d5770STom Joseph UpdateManager* updateManager; 1264d8d5770STom Joseph std::unique_ptr<Delete> deleteImpl; 1274d8d5770STom Joseph }; 1284d8d5770STom Joseph 1294d8d5770STom Joseph } // namespace fw_update 1304d8d5770STom Joseph 1314d8d5770STom Joseph } // namespace pldm 132