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