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