| Jagpal Singh Gill | 6d131aa | 2024-04-07 23:56:48 -0700 | [diff] [blame] | 1 | #pragma once | 
|  | 2 |  | 
|  | 3 | #include "config.h" | 
|  | 4 |  | 
|  | 5 | #include <sdbusplus/async.hpp> | 
|  | 6 | #include <xyz/openbmc_project/Software/Update/server.hpp> | 
|  | 7 |  | 
|  | 8 | #include <random> | 
|  | 9 | #include <string> | 
|  | 10 | #include <tuple> | 
|  | 11 |  | 
|  | 12 | namespace phosphor::software::updater | 
|  | 13 | { | 
|  | 14 | class ItemUpdater; | 
|  | 15 | } | 
|  | 16 |  | 
|  | 17 | namespace phosphor::software::update | 
|  | 18 | { | 
|  | 19 |  | 
|  | 20 | using UpdateIntf = sdbusplus::server::object_t< | 
|  | 21 | sdbusplus::xyz::openbmc_project::Software::server::Update>; | 
|  | 22 | using ItemUpdaterIntf = phosphor::software::updater::ItemUpdater; | 
|  | 23 |  | 
|  | 24 | using ApplyTimeIntf = | 
|  | 25 | sdbusplus::common::xyz::openbmc_project::software::ApplyTime; | 
|  | 26 |  | 
|  | 27 | /** @class Manager | 
|  | 28 | *  @brief Processes the image file from update D-Bus interface. | 
|  | 29 | *  @details The update manager class handles software updates and manages | 
|  | 30 | * software info through version and activation objects. | 
|  | 31 | */ | 
|  | 32 | class Manager : public UpdateIntf | 
|  | 33 | { | 
|  | 34 | public: | 
|  | 35 | /** @brief Constructs Manager Class | 
|  | 36 | * | 
|  | 37 | * @param[in] bus - The Dbus bus object | 
|  | 38 | */ | 
|  | 39 | explicit Manager(sdbusplus::async::context& ctx, const std::string& path, | 
|  | 40 | ItemUpdaterIntf& itemUpdater) : | 
|  | 41 | UpdateIntf(ctx.get_bus(), path.c_str(), UpdateIntf::action::defer_emit), | 
|  | 42 | ctx(ctx), itemUpdater(itemUpdater) | 
|  | 43 | { | 
|  | 44 | emit_object_added(); | 
|  | 45 | } | 
|  | 46 |  | 
|  | 47 | private: | 
|  | 48 | /** @brief Implementation for StartUpdate | 
|  | 49 | *  Start a firware update to be performed asynchronously. | 
|  | 50 | */ | 
| Patrick Williams | eae5ec9 | 2025-02-01 08:21:45 -0500 | [diff] [blame] | 51 | sdbusplus::message::object_path startUpdate( | 
|  | 52 | sdbusplus::message::unix_fd image, | 
|  | 53 | ApplyTimeIntf::RequestedApplyTimes applyTime) override; | 
| Jagpal Singh Gill | 6d131aa | 2024-04-07 23:56:48 -0700 | [diff] [blame] | 54 |  | 
|  | 55 | /* @brief Process the image supplied via image fd */ | 
|  | 56 | auto processImage(sdbusplus::message::unix_fd image, | 
|  | 57 | ApplyTimeIntf::RequestedApplyTimes applyTime, | 
| Patrick Williams | b3e3d64 | 2024-12-18 11:20:22 -0500 | [diff] [blame] | 58 | std::string id, std::string objPath) | 
|  | 59 | -> sdbusplus::async::task<>; | 
| Jagpal Singh Gill | 6d131aa | 2024-04-07 23:56:48 -0700 | [diff] [blame] | 60 |  | 
|  | 61 | /* @brief The handler for the image processing failure  */ | 
|  | 62 | void processImageFailed(sdbusplus::message::unix_fd image, std::string& id); | 
|  | 63 |  | 
|  | 64 | /** @brief The random generator for the software id */ | 
|  | 65 | std::mt19937 randomGen{static_cast<unsigned>( | 
|  | 66 | std::chrono::system_clock::now().time_since_epoch().count())}; | 
|  | 67 |  | 
|  | 68 | /** @brief D-Bus context */ | 
|  | 69 | sdbusplus::async::context& ctx; | 
|  | 70 | /** @brief item_updater reference */ | 
|  | 71 | ItemUpdaterIntf& itemUpdater; | 
|  | 72 | /** @brief State whether update is in progress */ | 
|  | 73 | bool updateInProgress = false; | 
|  | 74 | }; | 
|  | 75 |  | 
|  | 76 | } // namespace phosphor::software::update |