1 #pragma once
2 #include <string>
3 #include <tuple>
4 #include <vector>
5 #include <sdbusplus/server.hpp>
6 #include <sdeventplus/clock.hpp>
7 #include <sdeventplus/utility/timer.hpp>
8 
9 namespace phosphor
10 {
11 namespace fan
12 {
13 namespace control
14 {
15 
16 class Zone;
17 
18 constexpr auto propertyNamePos = 0;
19 constexpr auto propertyInterfacePos = 1;
20 constexpr auto propertyPathPos = 2;
21 constexpr auto propertyValuePos = 3;
22 
23 // TODO openbmc/openbmc#1769: Support more property types.
24 using ConditionProperty = std::tuple<std::string,
25                           std::string,
26                           std::string,
27                           bool>;
28 
29 constexpr auto conditionTypePos = 0;
30 constexpr auto conditionPropertyListPos = 1;
31 using Condition = std::tuple<std::string,
32                              std::vector<ConditionProperty>>;
33 
34 using PropertyVariantType = sdbusplus::message::variant<bool,
35                                                         int64_t,
36                                                         std::string>;
37 
38 constexpr auto fanNamePos = 0;
39 constexpr auto sensorListPos = 1;
40 constexpr auto targetInterfacePos = 2;
41 using FanDefinition = std::tuple<std::string,
42                                  std::vector<std::string>,
43                                  std::string>;
44 
45 constexpr auto intfPos = 0;
46 constexpr auto propPos = 1;
47 using Group = std::map<std::string, std::tuple<std::string, std::string>>;
48 using ZoneHandler = std::function<void(Zone&)>;
49 using Handler = std::function<void(sdbusplus::bus::bus&,
50                                    sdbusplus::message::message&,
51                                    Zone&)>;
52 using Action = std::function<void(Zone&, const Group&)>;
53 
54 constexpr auto pcPathPos = 0;
55 constexpr auto pcIntfPos = 1;
56 constexpr auto pcPropPos = 2;
57 constexpr auto pcValuePos = 3;
58 using PrecondGroup = std::tuple<std::string,
59                                 std::string,
60                                 std::string,
61                                 PropertyVariantType>;
62 
63 constexpr auto namePos = 0;
64 constexpr auto hasOwnerPos = 1;
65 using Service = std::tuple<std::string, bool>;
66 
67 constexpr auto intervalPos = 0;
68 constexpr auto typePos = 1;
69 enum class TimerType
70 {
71     oneshot,
72     repeating,
73 };
74 using TimerConf = std::tuple<std::chrono::seconds,
75                              TimerType>;
76 
77 constexpr auto sigMatchPos = 0;
78 constexpr auto sigHandlerPos = 1;
79 using Signal = std::tuple<std::string, Handler>;
80 
81 constexpr auto groupPos = 0;
82 constexpr auto actionsPos = 1;
83 constexpr auto timerConfPos = 2;
84 constexpr auto signalsPos = 3;
85 using SetSpeedEvent = std::tuple<Group,
86                                  std::vector<Action>,
87                                  TimerConf,
88                                  std::vector<Signal>>;
89 
90 constexpr auto eventGroupPos = 0;
91 constexpr auto eventMatchPos = 1;
92 constexpr auto eventHandlerPos = 2;
93 constexpr auto eventActionsPos = 3;
94 using EventData = std::tuple<Group, std::string, Handler, std::vector<Action>>;
95 
96 constexpr auto timerEventDataPos = 0;
97 constexpr auto timerTimerPos = 1;
98 using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
99 using TimerEvent = std::tuple<std::unique_ptr<EventData>, Timer>;
100 
101 constexpr auto signalEventDataPos = 0;
102 constexpr auto signalMatchPos = 1;
103 using SignalEvent =
104     std::tuple<std::unique_ptr<EventData>,
105                std::unique_ptr<sdbusplus::server::match::match>>;
106 
107 constexpr auto zoneNumPos = 0;
108 constexpr auto fullSpeedPos = 1;
109 constexpr auto floorSpeedPos = 2;
110 constexpr auto incDelayPos = 3;
111 constexpr auto decIntervalPos = 4;
112 constexpr auto handlerPos = 5;
113 constexpr auto fanListPos = 6;
114 constexpr auto setSpeedEventsPos = 7;
115 using ZoneDefinition = std::tuple<size_t,
116                                   uint64_t,
117                                   uint64_t,
118                                   size_t,
119                                   size_t,
120                                   std::vector<ZoneHandler>,
121                                   std::vector<FanDefinition>,
122                                   std::vector<SetSpeedEvent>>;
123 
124 constexpr auto conditionListPos = 0;
125 constexpr auto zoneListPos = 1;
126 using ZoneGroup = std::tuple<std::vector<Condition>,
127                              std::vector<ZoneDefinition>>;
128 
129 }
130 }
131 }
132