xref: /openbmc/pldm/fw-update/activation.hpp (revision 366507c82a4781c4a893ab9b9ca7b38f2157a353)
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