blob: f4f3651911e2e58359a53756400fa09014c38801 [file] [log] [blame]
Patrick Venture863b9242018-03-08 08:29:23 -08001#pragma once
2
Patrick Venture863b9242018-03-08 08:29:23 -08003#include "sensors/sensor.hpp"
4
Patrick Ventureda4a5dd2018-08-31 09:42:48 -07005#include <map>
6#include <memory>
7#include <sdbusplus/bus.hpp>
8#include <sdbusplus/server.hpp>
9#include <string>
10#include <vector>
Patrick Venture863b9242018-03-08 08:29:23 -080011
12/*
13 * The SensorManager holds all sensors across all zones.
14 */
15class SensorManager
16{
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070017 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 }
Patrick Venture863b9242018-03-08 08:29:23 -080024
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070025 SensorManager() :
26 SensorManager(std::move(sdbusplus::bus::new_default()),
27 std::move(sdbusplus::bus::new_default()))
28 {
29 }
Patrick Venturefe75b192018-06-08 11:19:43 -070030
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070031 ~SensorManager() = default;
32 SensorManager(const SensorManager&) = delete;
33 SensorManager& operator=(const SensorManager&) = delete;
34 SensorManager(SensorManager&&) = default;
35 SensorManager& operator=(SensorManager&&) = default;
Patrick Venturefe75b192018-06-08 11:19:43 -070036
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070037 /*
38 * Add a Sensor to the Manager.
39 */
Patrick Ventureffc5ca72018-10-30 22:34:53 -070040 void addSensor(const std::string& type, const std::string& name,
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070041 std::unique_ptr<Sensor> sensor);
Patrick Venture863b9242018-03-08 08:29:23 -080042
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070043 // TODO(venture): Should implement read/write by name.
44 Sensor* getSensor(const std::string& name) const
45 {
46 return _sensorMap.at(name).get();
47 }
Patrick Venture863b9242018-03-08 08:29:23 -080048
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070049 sdbusplus::bus::bus& getPassiveBus(void)
50 {
51 return _passiveListeningBus;
52 }
Patrick Venture863b9242018-03-08 08:29:23 -080053
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070054 sdbusplus::bus::bus& getHostBus(void)
55 {
56 return _hostSensorBus;
57 }
Patrick Venture863b9242018-03-08 08:29:23 -080058
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070059 private:
60 std::map<std::string, std::unique_ptr<Sensor>> _sensorMap;
61 std::map<std::string, std::vector<std::string>> _sensorTypeList;
Patrick Venture863b9242018-03-08 08:29:23 -080062
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070063 sdbusplus::bus::bus _passiveListeningBus;
64 sdbusplus::bus::bus _hostSensorBus;
Patrick Venturefe75b192018-06-08 11:19:43 -070065
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070066 static constexpr auto SensorRoot = "/xyz/openbmc_project/extsensors";
Patrick Venture863b9242018-03-08 08:29:23 -080067};