xref: /openbmc/dbus-sensors/src/cable-monitor/CableMonitor.hpp (revision ca8c7e98687da407fbab5dcd20cfe892928928ae)
1 #pragma once
2 
3 #include "CableConfig.hpp"
4 #include "CableEvents.hpp"
5 #include "EntityManagerInterface.hpp"
6 #include "NotifyWatch.hpp"
7 
8 #include <sdbusplus/async.hpp>
9 #include <sdbusplus/message/native_types.hpp>
10 #include <xyz/openbmc_project/Inventory/Item/Cable/client.hpp>
11 
12 #include <string>
13 
14 namespace cable
15 {
16 
17 class Monitor;
18 
19 using CableInventoryIntf =
20     sdbusplus::client::xyz::openbmc_project::inventory::item::Cable<>;
21 
22 class Monitor
23 {
24   public:
25     Monitor() = delete;
26 
27     explicit Monitor(sdbusplus::async::context& ctx);
28 
29   private:
30     /** @brief  Callback handler for new interfaces added to inventory */
31     auto inventoryAddedHandler(
32         const sdbusplus::message::object_path& objectPath,
33         const std::string& interfaceName) -> void;
34 
35     /** @brief Callback handler for interfaces removed from inventory */
36     auto inventoryRemovedHandler(
37         const sdbusplus::message::object_path& objectPath,
38         const std::string& interfaceName) -> void;
39 
40     /** @brief Callback handler for async updates to cable JSON configuration */
41     auto configUpdateHandler(std::string configFileName)
42         -> sdbusplus::async::task<>;
43 
44     /** @brief Start the Cable Monitor */
45     auto start() -> sdbusplus::async::task<>;
46 
47     /** @brief Asynchronously process cable inventory added */
48     auto processCableAddedAsync(sdbusplus::message::object_path objectPath)
49         -> sdbusplus::async::task<>;
50 
51     /** @brief Asynchronously process cable inventory removed */
52     auto processCableRemovedAsync(sdbusplus::message::object_path objectPath)
53         -> sdbusplus::async::task<>;
54 
55     /** @brief Reconcile connected and expected cable data */
56     auto reconcileCableData() -> void;
57 
58     sdbusplus::async::context& ctx;
59     Config::Cables connectedCables;
60     Config::Cables expectedCables;
61     Events cableEvents;
62     entity_manager::EntityManagerInterface entityManager;
63     notify_watch::NotifyWatch notifyWatch;
64 };
65 
66 } // namespace cable
67