1 #pragma once
2 
3 #include "libpldm/platform.h"
4 #include "libpldm/pldm.h"
5 
6 #include "terminus.hpp"
7 #include "terminus_manager.hpp"
8 
9 namespace pldm
10 {
11 
12 namespace platform_mc
13 {
14 
15 /**
16  * @brief PlatformManager
17  *
18  * PlatformManager class manages the actions outlined in the platform spec.
19  */
20 class PlatformManager
21 {
22   public:
23     PlatformManager() = delete;
24     PlatformManager(const PlatformManager&) = delete;
25     PlatformManager(PlatformManager&&) = delete;
26     PlatformManager& operator=(const PlatformManager&) = delete;
27     PlatformManager& operator=(PlatformManager&&) = delete;
28     ~PlatformManager() = default;
29 
30     explicit PlatformManager(TerminusManager& terminusManager,
31                              TerminiMapper& termini) :
32         terminusManager(terminusManager),
33         termini(termini)
34     {}
35 
36     /** @brief Initialize terminus which supports PLDM Type 2
37      *
38      *  @return coroutine return_value - PLDM completion code
39      */
40     exec::task<int> initTerminus();
41 
42   private:
43     /** reference of TerminusManager for sending PLDM request to terminus*/
44     TerminusManager& terminusManager;
45 
46     /** @brief Managed termini list */
47     TerminiMapper& termini;
48 };
49 } // namespace platform_mc
50 } // namespace pldm
51