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