1cc372355SAlexander Hansen #pragma once 2cc372355SAlexander Hansen 3cc372355SAlexander Hansen #include "device.hpp" 4cec14752SAlexander Hansen #include "sdbusplus/async/match.hpp" 5cc372355SAlexander Hansen 6cc372355SAlexander Hansen #include <boost/asio/steady_timer.hpp> 7cc372355SAlexander Hansen #include <phosphor-logging/lg2.hpp> 8cc372355SAlexander Hansen #include <sdbusplus/asio/connection.hpp> 9cc372355SAlexander Hansen #include <sdbusplus/asio/object_server.hpp> 10cc372355SAlexander Hansen #include <sdbusplus/async/context.hpp> 11cc372355SAlexander Hansen #include <sdbusplus/timer.hpp> 12cc372355SAlexander Hansen 13cc372355SAlexander Hansen #include <string> 14cc372355SAlexander Hansen 15cc372355SAlexander Hansen using namespace phosphor::software::config; 16cc372355SAlexander Hansen using namespace phosphor::software::device; 17cc372355SAlexander Hansen 18cc372355SAlexander Hansen namespace phosphor::software::manager 19cc372355SAlexander Hansen { 20cc372355SAlexander Hansen 21cc372355SAlexander Hansen // This is the base class for the code updater 22cc372355SAlexander Hansen // Every code updater can inherit from this 23cc372355SAlexander Hansen class SoftwareManager 24cc372355SAlexander Hansen { 25cc372355SAlexander Hansen public: 26cc372355SAlexander Hansen SoftwareManager(sdbusplus::async::context& ctx, 27cc372355SAlexander Hansen const std::string& serviceNameSuffix); 28cc372355SAlexander Hansen 29cc372355SAlexander Hansen // Fetches initial configuration from dbus and initializes devices. 30cc372355SAlexander Hansen // This should be called once by a code updater at startup. 31cc372355SAlexander Hansen // @param configurationInterfaces the dbus interfaces from which to fetch 32cc372355SAlexander Hansen // configuration 33cc372355SAlexander Hansen sdbusplus::async::task<> initDevices( 34cc372355SAlexander Hansen const std::vector<std::string>& configurationInterfaces); 35cc372355SAlexander Hansen 36cc372355SAlexander Hansen // Map of EM config object path to device. 37cc372355SAlexander Hansen std::map<sdbusplus::message::object_path, std::unique_ptr<Device>> devices; 38cc372355SAlexander Hansen 39cc372355SAlexander Hansen protected: 40cc372355SAlexander Hansen // This function receives a dbus name and object path for a single device, 41cc372355SAlexander Hansen // which was configured. 42cc372355SAlexander Hansen // The component code updater overrides this function and may create a 43cc372355SAlexander Hansen // device instance internally, or reject the configuration as invalid. 44cc372355SAlexander Hansen // @param service The dbus name where our configuration is 45cc372355SAlexander Hansen // @param config The common configuration properties which are shared 46cc372355SAlexander Hansen // by all devices. 47cc372355SAlexander Hansen // Also includes the object path to fetch other 48cc372355SAlexander Hansen // configuration properties. 49cc372355SAlexander Hansen // @returns true if the configuration was accepted 50cc372355SAlexander Hansen virtual sdbusplus::async::task<bool> initDevice(const std::string& service, 51cc372355SAlexander Hansen const std::string& path, 52cc372355SAlexander Hansen SoftwareConfig& config) = 0; 53cc372355SAlexander Hansen 54*e2cd6759SAlexander Hansen std::string getBusName(); 55*e2cd6759SAlexander Hansen 56cc372355SAlexander Hansen sdbusplus::async::context& ctx; 57cc372355SAlexander Hansen 58cc372355SAlexander Hansen private: 5990174799SAlexander Hansen sdbusplus::async::task<void> handleInterfaceAdded( 6090174799SAlexander Hansen const std::string& service, const std::string& path, 6190174799SAlexander Hansen const std::string& interface); 6290174799SAlexander Hansen 63cec14752SAlexander Hansen sdbusplus::async::task<void> handleInterfaceRemoved( 64cec14752SAlexander Hansen const sdbusplus::message::object_path& path); 65cec14752SAlexander Hansen 66cec14752SAlexander Hansen sdbusplus::async::task<void> interfaceAddedMatch( 67cec14752SAlexander Hansen std::vector<std::string> interfaces); 68cec14752SAlexander Hansen sdbusplus::async::task<void> interfaceRemovedMatch( 69cec14752SAlexander Hansen std::vector<std::string> interfaces); 70cec14752SAlexander Hansen 71cec14752SAlexander Hansen // DBus matches for interfaces added and interfaces removed 72cec14752SAlexander Hansen sdbusplus::async::match configIntfAddedMatch; 73cec14752SAlexander Hansen sdbusplus::async::match configIntfRemovedMatch; 74cec14752SAlexander Hansen 75*e2cd6759SAlexander Hansen // the dbus name 76*e2cd6759SAlexander Hansen const std::string serviceName; 77cc372355SAlexander Hansen 78cc372355SAlexander Hansen sdbusplus::server::manager_t manager; 79cc372355SAlexander Hansen 80cc372355SAlexander Hansen friend Software; 81cc372355SAlexander Hansen friend Device; 82cc372355SAlexander Hansen }; 83cc372355SAlexander Hansen 84cc372355SAlexander Hansen }; // namespace phosphor::software::manager 85