xref: /openbmc/phosphor-modbus/rtu/device/device_factory.hpp (revision 7184805ae4ede906935133e3e0f8ee2468bc781b)
1 #pragma once
2 
3 #include "base_device.hpp"
4 
5 namespace phosphor::modbus::rtu::device
6 {
7 
8 namespace config
9 {
10 
11 enum class DeviceType
12 {
13     reservoirPumpUnit,
14     heatExchanger,
15     flowMeter,
16     unknown
17 };
18 
19 enum class DeviceModel
20 {
21     RDF040DSS5193E0,
22     unknown
23 };
24 
25 struct DeviceFactoryConfig : public Config
26 {
27     DeviceType deviceType = DeviceType::unknown;
28     DeviceModel deviceModel = DeviceModel::unknown;
29 };
30 
31 } // namespace config
32 
33 class DeviceFactory
34 {
35   public:
36     DeviceFactory() = delete;
37 
38     static auto getInterfaces() -> std::vector<std::string>;
39 
40     static auto getConfig(sdbusplus::async::context& ctx,
41                           const sdbusplus::message::object_path& objectPath,
42                           const std::string& interfaceName)
43         -> sdbusplus::async::task<std::optional<config::DeviceFactoryConfig>>;
44 
45     static auto create(sdbusplus::async::context& ctx,
46                        const config::DeviceFactoryConfig& config,
47                        PortIntf& serialPort, EventIntf::Events& events)
48         -> std::unique_ptr<BaseDevice>;
49 };
50 
51 } // namespace phosphor::modbus::rtu::device
52