1 #pragma once
2 #include <string>
3 #include <tuple>
4 #include <vector>
5 #include <sdbusplus/server.hpp>
6 #include "timer.hpp"
7 
8 namespace phosphor
9 {
10 namespace fan
11 {
12 namespace control
13 {
14 
15 class Zone;
16 
17 constexpr auto propertyNamePos = 0;
18 constexpr auto propertyInterfacePos = 1;
19 constexpr auto propertyPathPos = 2;
20 constexpr auto propertyValuePos = 3;
21 
22 // TODO openbmc/openbmc#1769: Support more property types.
23 using ConditionProperty = std::tuple<std::string,
24                           std::string,
25                           std::string,
26                           bool>;
27 
28 constexpr auto conditionTypePos = 0;
29 constexpr auto conditionPropertyListPos = 1;
30 using Condition = std::tuple<std::string,
31                              std::vector<ConditionProperty>>;
32 
33 using PropertyVariantType = sdbusplus::message::variant<bool, int64_t>;
34 
35 constexpr auto fanNamePos = 0;
36 constexpr auto sensorListPos = 1;
37 using FanDefinition = std::tuple<std::string, std::vector<std::string>>;
38 
39 constexpr auto intfPos = 0;
40 constexpr auto propPos = 1;
41 using Group = std::map<std::string, std::tuple<std::string, std::string>>;
42 using Handler = std::function<void(sdbusplus::bus::bus&,
43                                    sdbusplus::message::message&,
44                                    Zone&)>;
45 using Action = std::function<void(Zone&, const Group&)>;
46 
47 constexpr auto pcPathPos = 0;
48 constexpr auto pcIntfPos = 1;
49 constexpr auto pcPropPos = 2;
50 constexpr auto pcValuePos = 3;
51 using PrecondGroup = std::tuple<std::string,
52                                 std::string,
53                                 std::string,
54                                 PropertyVariantType>;
55 
56 constexpr auto intervalPos = 0;
57 using Timer = std::tuple<std::chrono::seconds>;
58 
59 constexpr auto signaturePos = 0;
60 constexpr auto handlerObjPos = 1;
61 using PropertyChange = std::tuple<std::string, Handler>;
62 
63 constexpr auto groupPos = 0;
64 constexpr auto actionsPos = 1;
65 constexpr auto timerPos = 2;
66 constexpr auto propChangeListPos = 3;
67 using SetSpeedEvent = std::tuple<Group,
68                                  std::vector<Action>,
69                                  Timer,
70                                  std::vector<PropertyChange>>;
71 
72 constexpr auto eventGroupPos = 0;
73 constexpr auto eventHandlerPos = 1;
74 constexpr auto eventActionsPos = 2;
75 using EventData = std::tuple<Group, Handler, std::vector<Action>>;
76 
77 constexpr auto timerTimerPos = 0;
78 using TimerEvent = std::tuple<phosphor::fan::util::Timer>;
79 
80 constexpr auto signalEventDataPos = 0;
81 constexpr auto signalMatchPos = 1;
82 using SignalEvent =
83     std::tuple<std::unique_ptr<EventData>,
84                std::unique_ptr<sdbusplus::server::match::match>>;
85 
86 constexpr auto zoneNumPos = 0;
87 constexpr auto fullSpeedPos = 1;
88 constexpr auto floorSpeedPos = 2;
89 constexpr auto incDelayPos = 3;
90 constexpr auto decIntervalPos = 4;
91 constexpr auto fanListPos = 5;
92 constexpr auto setSpeedEventsPos = 6;
93 using ZoneDefinition = std::tuple<size_t,
94                                   uint64_t,
95                                   uint64_t,
96                                   size_t,
97                                   size_t,
98                                   std::vector<FanDefinition>,
99                                   std::vector<SetSpeedEvent>>;
100 
101 constexpr auto conditionListPos = 0;
102 constexpr auto zoneListPos = 1;
103 using ZoneGroup = std::tuple<std::vector<Condition>,
104                              std::vector<ZoneDefinition>>;
105 
106 }
107 }
108 }
109