blob: e6616ce91a51c540dea49f8ca523f9c3092da622 [file] [log] [blame]
Unive Tien7ad45b42025-08-18 06:04:53 +00001#pragma once
2
3#include "common/types.hpp"
4#include "firmware_inventory.hpp"
5
6class FirmwareInventoryManagerTest;
7
8namespace pldm::fw_update
9{
10
11using ObjectPath = pldm::dbus::ObjectPath;
12using SoftwareMap =
13 std::map<SoftwareIdentifier, std::unique_ptr<FirmwareInventory>>;
14
15/**
16 * @brief Get the Board path from Entity Manager for the given inventory path
17 * @param[in] path - Inventory path
18 * @param[in] handler - D-Bus handler for querying ancestors
19 * @return Board path if found, std::nullopt otherwise
20 */
21std::optional<std::filesystem::path> getBoardPath(
22 const pldm::utils::DBusHandler& handler, const InventoryPath& path);
23
24class FirmwareInventoryManager
25{
26 public:
27 friend class ::FirmwareInventoryManagerTest;
28 FirmwareInventoryManager() = delete;
29 FirmwareInventoryManager(const FirmwareInventoryManager&) = delete;
30 FirmwareInventoryManager(FirmwareInventoryManager&&) = delete;
31 FirmwareInventoryManager& operator=(const FirmwareInventoryManager&) =
32 delete;
33 FirmwareInventoryManager& operator=(FirmwareInventoryManager&&) = delete;
34 ~FirmwareInventoryManager() = default;
35
36 /**
37 * @brief Constructor
38 * @param[in] configurations - Reference to the EM configurations for MCTP
39 * endpoints
40 */
41 explicit FirmwareInventoryManager(
42 const pldm::utils::DBusHandler* dbusHandler,
43 const Configurations& config) :
44 dbusHandler(dbusHandler), configurations(config)
45 {}
46
47 /**
48 * @brief Creates a firmware inventory entry for the given software
49 * identifier
50 * @param[in] softwareIdentifier - Software identifier containing EID and
51 * component identifier
52 * @param[in] softwareName - Name of the firmware device
53 * @param[in] activeVersion - Active version of the firmware
54 * @param[in] descriptors - Descriptors associated with the firmware
55 * @param[in] componentInfo - Component information associated with the
56 * firmware
57 */
58 void createFirmwareEntry(
59 const SoftwareIdentifier& softwareIdentifier,
60 const SoftwareName& softwareName, const std::string& activeVersion,
61 const Descriptors& descriptors, const ComponentInfo& componentInfo);
62
63 /**
64 * @brief Deletes the firmware inventory entry for the given EID
65 * @param[in] eid - MCTP endpoint ID for which the firmware inventory entry
66 * needs to be deleted
67 */
68 void deleteFirmwareEntry(const pldm::eid& eid);
69
70 private:
71 /**
72 * @brief Get the inventory path associated with the given EID
73 * @param[in] eid - MCTP endpoint ID
74 * @return Inventory path if found, std::nullopt otherwise
75 */
76 std::optional<InventoryPath> getInventoryPath(const pldm::eid& eid) const;
77
78 /**
79 * @brief D-Bus Handler
80 */
81 const pldm::utils::DBusHandler* dbusHandler;
82
83 /**
84 * @brief Map of software identifier to FirmwareInventory instances
85 * This map maintains the firmware inventory entries created for
86 * different firmware components identified by their software
87 * identifiers (EID and component identifier).
88 */
89 SoftwareMap softwareMap;
90
91 /**
92 * @brief Reference to the EM configurations for MCTP endpoints
93 * This is used to retrieve the associated endpoint information
94 * when creating firmware inventory entries.
95 * It is expected that the configurations are provided during
96 * the initialization of the FirmwareInventoryManager.
97 */
98 const Configurations& configurations;
99};
100
101} // namespace pldm::fw_update