#pragma once #include "common/types.hpp" #include "firmware_inventory.hpp" class FirmwareInventoryManagerTest; namespace pldm::fw_update { using ObjectPath = pldm::dbus::ObjectPath; using SoftwareMap = std::map>; /** * @brief Get the Board path from Entity Manager for the given inventory path * @param[in] path - Inventory path * @param[in] handler - D-Bus handler for querying ancestors * @return Board path if found, std::nullopt otherwise */ std::optional getBoardPath( const pldm::utils::DBusHandler& handler, const InventoryPath& path); class FirmwareInventoryManager { public: friend class ::FirmwareInventoryManagerTest; FirmwareInventoryManager() = delete; FirmwareInventoryManager(const FirmwareInventoryManager&) = delete; FirmwareInventoryManager(FirmwareInventoryManager&&) = delete; FirmwareInventoryManager& operator=(const FirmwareInventoryManager&) = delete; FirmwareInventoryManager& operator=(FirmwareInventoryManager&&) = delete; ~FirmwareInventoryManager() = default; /** * @brief Constructor * @param[in] configurations - Reference to the EM configurations for MCTP * endpoints */ explicit FirmwareInventoryManager( const pldm::utils::DBusHandler* dbusHandler, const Configurations& config) : dbusHandler(dbusHandler), configurations(config) {} /** * @brief Creates a firmware inventory entry for the given software * identifier * @param[in] softwareIdentifier - Software identifier containing EID and * component identifier * @param[in] softwareName - Name of the firmware device * @param[in] activeVersion - Active version of the firmware * @param[in] descriptors - Descriptors associated with the firmware * @param[in] componentInfo - Component information associated with the * firmware */ void createFirmwareEntry( const SoftwareIdentifier& softwareIdentifier, const SoftwareName& softwareName, const std::string& activeVersion, const Descriptors& descriptors, const ComponentInfo& componentInfo); /** * @brief Deletes the firmware inventory entry for the given EID * @param[in] eid - MCTP endpoint ID for which the firmware inventory entry * needs to be deleted */ void deleteFirmwareEntry(const pldm::eid& eid); private: /** * @brief Get the inventory path associated with the given EID * @param[in] eid - MCTP endpoint ID * @return Inventory path if found, std::nullopt otherwise */ std::optional getInventoryPath(const pldm::eid& eid) const; /** * @brief D-Bus Handler */ const pldm::utils::DBusHandler* dbusHandler; /** * @brief Map of software identifier to FirmwareInventory instances * This map maintains the firmware inventory entries created for * different firmware components identified by their software * identifiers (EID and component identifier). */ SoftwareMap softwareMap; /** * @brief Reference to the EM configurations for MCTP endpoints * This is used to retrieve the associated endpoint information * when creating firmware inventory entries. * It is expected that the configurations are provided during * the initialization of the FirmwareInventoryManager. */ const Configurations& configurations; }; } // namespace pldm::fw_update