1 #pragma once 2 3 #include "sensors/sensor.hpp" 4 5 #include <map> 6 #include <memory> 7 #include <sdbusplus/bus.hpp> 8 #include <sdbusplus/server.hpp> 9 #include <string> 10 #include <vector> 11 12 /* 13 * The SensorManager holds all sensors across all zones. 14 */ 15 class SensorManager 16 { 17 public: 18 SensorManager(sdbusplus::bus::bus&& pass, sdbusplus::bus::bus&& host) : 19 _passiveListeningBus(std::move(pass)), _hostSensorBus(std::move(host)) 20 { 21 // manager gets its interface from the bus. :D 22 sdbusplus::server::manager::manager(_hostSensorBus, SensorRoot); 23 } 24 25 SensorManager() : 26 SensorManager(std::move(sdbusplus::bus::new_system()), 27 std::move(sdbusplus::bus::new_system())) 28 { 29 } 30 31 ~SensorManager() = default; 32 SensorManager(const SensorManager&) = delete; 33 SensorManager& operator=(const SensorManager&) = delete; 34 SensorManager(SensorManager&&) = default; 35 SensorManager& operator=(SensorManager&&) = default; 36 37 /* 38 * Add a Sensor to the Manager. 39 */ 40 void addSensor(const std::string& type, const std::string& name, 41 std::unique_ptr<Sensor> sensor); 42 43 // TODO(venture): Should implement read/write by name. 44 Sensor* getSensor(const std::string& name) const 45 { 46 return _sensorMap.at(name).get(); 47 } 48 49 sdbusplus::bus::bus& getPassiveBus(void) 50 { 51 return _passiveListeningBus; 52 } 53 54 sdbusplus::bus::bus& getHostBus(void) 55 { 56 return _hostSensorBus; 57 } 58 59 private: 60 std::map<std::string, std::unique_ptr<Sensor>> _sensorMap; 61 std::map<std::string, std::vector<std::string>> _sensorTypeList; 62 63 sdbusplus::bus::bus _passiveListeningBus; 64 sdbusplus::bus::bus _hostSensorBus; 65 66 static constexpr auto SensorRoot = "/xyz/openbmc_project/extsensors"; 67 }; 68