#pragma once #include "sensors/sensor.hpp" #include #include #include #include #include #include namespace pid_control { /* * The SensorManager holds all sensors across all zones. */ class SensorManager { public: SensorManager(sdbusplus::bus::bus& pass, sdbusplus::bus::bus& host) : _passiveListeningBus(&pass), _hostSensorBus(&host) { // manager gets its interface from the bus. :D sdbusplus::server::manager::manager(*_hostSensorBus, SensorRoot); } SensorManager() = default; ~SensorManager() = default; SensorManager(const SensorManager&) = delete; SensorManager& operator=(const SensorManager&) = delete; SensorManager(SensorManager&&) = default; SensorManager& operator=(SensorManager&&) = default; /* * Add a Sensor to the Manager. */ void addSensor(const std::string& type, const std::string& name, std::unique_ptr sensor); // TODO(venture): Should implement read/write by name. Sensor* getSensor(const std::string& name) const { return _sensorMap.at(name).get(); } sdbusplus::bus::bus& getPassiveBus(void) { return *_passiveListeningBus; } sdbusplus::bus::bus& getHostBus(void) { return *_hostSensorBus; } private: std::map> _sensorMap; std::map> _sensorTypeList; sdbusplus::bus::bus* _passiveListeningBus; sdbusplus::bus::bus* _hostSensorBus; static constexpr auto SensorRoot = "/xyz/openbmc_project/extsensors"; }; } // namespace pid_control